@proteinjs/db-driver-spanner 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/generated/test/index.d.ts.map +1 -1
- package/dist/generated/test/index.js +3 -1
- package/dist/generated/test/index.js.map +1 -1
- package/dist/src/SpannerDriver.d.ts.map +1 -1
- package/dist/src/SpannerDriver.js +6 -0
- package/dist/src/SpannerDriver.js.map +1 -1
- package/dist/test/QueryAggregates.test.d.ts +2 -0
- package/dist/test/QueryAggregates.test.d.ts.map +1 -0
- package/dist/test/QueryAggregates.test.js +292 -0
- package/dist/test/QueryAggregates.test.js.map +1 -0
- package/dist/test/ReferenceColumnAdoptWidth.test.d.ts +2 -0
- package/dist/test/ReferenceColumnAdoptWidth.test.d.ts.map +1 -0
- package/dist/test/ReferenceColumnAdoptWidth.test.js +244 -0
- package/dist/test/ReferenceColumnAdoptWidth.test.js.map +1 -0
- package/dist/test/util/referenceAdoptWidthTestTables.d.ts +24 -0
- package/dist/test/util/referenceAdoptWidthTestTables.d.ts.map +1 -0
- package/dist/test/util/referenceAdoptWidthTestTables.js +35 -0
- package/dist/test/util/referenceAdoptWidthTestTables.js.map +1 -0
- package/generated/test/index.ts +3 -1
- package/package.json +6 -6
- package/src/SpannerDriver.ts +5 -0
- package/test/QueryAggregates.test.ts +215 -0
- package/test/ReferenceColumnAdoptWidth.test.ts +155 -0
- package/test/util/referenceAdoptWidthTestTables.ts +23 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
29
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
30
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
31
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
32
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
33
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
34
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
38
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
39
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
40
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
41
|
+
function step(op) {
|
|
42
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
43
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
44
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
45
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
46
|
+
switch (op[0]) {
|
|
47
|
+
case 0: case 1: t = op; break;
|
|
48
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
49
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
50
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
51
|
+
default:
|
|
52
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
53
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
54
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
55
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
56
|
+
if (t[2]) _.ops.pop();
|
|
57
|
+
_.trys.pop(); continue;
|
|
58
|
+
}
|
|
59
|
+
op = body.call(thisArg, _);
|
|
60
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
61
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
65
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
66
|
+
};
|
|
67
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
68
|
+
var moment_1 = __importDefault(require("moment"));
|
|
69
|
+
var db_driver_spanner_1 = require("@proteinjs/db-driver-spanner");
|
|
70
|
+
var db_1 = require("@proteinjs/db");
|
|
71
|
+
var test_1 = require("@proteinjs/db/test");
|
|
72
|
+
var db_transaction_context_1 = require("@proteinjs/db-transaction-context");
|
|
73
|
+
var getDropTestTable_1 = require("./util/getDropTestTable");
|
|
74
|
+
var SpannerEmulatorProvisioner_1 = require("./util/SpannerEmulatorProvisioner");
|
|
75
|
+
require("../generated/test/index");
|
|
76
|
+
var UsageShapeTable = /** @class */ (function (_super) {
|
|
77
|
+
__extends(UsageShapeTable, _super);
|
|
78
|
+
function UsageShapeTable() {
|
|
79
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
80
|
+
_this.name = 'db_test_query_aggregates';
|
|
81
|
+
_this.columns = (0, db_1.withRecordColumns)({
|
|
82
|
+
model: new db_1.StringColumn('model'),
|
|
83
|
+
source: new db_1.StringColumn('source'),
|
|
84
|
+
totalTokens: new db_1.IntegerColumn('total_tokens', undefined, true),
|
|
85
|
+
costMicroUsd: new db_1.IntegerColumn('cost_micro_usd', undefined, true),
|
|
86
|
+
priced: new db_1.BooleanColumn('priced'),
|
|
87
|
+
});
|
|
88
|
+
return _this;
|
|
89
|
+
}
|
|
90
|
+
return UsageShapeTable;
|
|
91
|
+
}(db_1.Table));
|
|
92
|
+
var table = new UsageShapeTable();
|
|
93
|
+
var getTable = function (tableName) {
|
|
94
|
+
if (tableName === table.name) {
|
|
95
|
+
return table;
|
|
96
|
+
}
|
|
97
|
+
throw new Error("Unexpected table lookup in test: ".concat(tableName));
|
|
98
|
+
};
|
|
99
|
+
var spannerDriver = new db_driver_spanner_1.SpannerDriver({
|
|
100
|
+
projectId: 'proteinjs-test',
|
|
101
|
+
instanceName: 'proteinjs-test',
|
|
102
|
+
databaseName: 'test',
|
|
103
|
+
}, getTable);
|
|
104
|
+
var seedRow = function (over) { return (__assign({ model: 'model-a', source: 'chat_turn', totalTokens: 0, costMicroUsd: 0, priced: true }, over)); };
|
|
105
|
+
/** Bucket values arrive as the driver returns them (Date/ISO string); normalize to YYYY-MM-DD. */
|
|
106
|
+
var dayOf = function (value) { return new Date(String(value)).toISOString().slice(0, 10); };
|
|
107
|
+
describe('Db.queryAggregates (grouped aggregation + UTC day buckets)', function () {
|
|
108
|
+
var dropTable = (0, getDropTestTable_1.getDropTestTable)(spannerDriver);
|
|
109
|
+
var db = new db_1.Db(spannerDriver, getTable, new db_transaction_context_1.TransactionContext());
|
|
110
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
111
|
+
return __generator(this, function (_a) {
|
|
112
|
+
switch (_a.label) {
|
|
113
|
+
case 0:
|
|
114
|
+
// The table declares no auth block → the default admin door; carry that identity.
|
|
115
|
+
(0, test_1.registerTestUser)();
|
|
116
|
+
return [4 /*yield*/, SpannerEmulatorProvisioner_1.SpannerEmulatorProvisioner.ensureProvisioned({
|
|
117
|
+
projectId: 'proteinjs-test',
|
|
118
|
+
instanceName: 'proteinjs-test',
|
|
119
|
+
databaseName: 'test',
|
|
120
|
+
})];
|
|
121
|
+
case 1:
|
|
122
|
+
_a.sent();
|
|
123
|
+
return [4 /*yield*/, dropTable(table)];
|
|
124
|
+
case 2:
|
|
125
|
+
_a.sent();
|
|
126
|
+
return [4 /*yield*/, spannerDriver.getTableManager().loadTable(table)];
|
|
127
|
+
case 3:
|
|
128
|
+
_a.sent();
|
|
129
|
+
// Two models, two sources, three UTC instants — the last two straddle a UTC midnight.
|
|
130
|
+
return [4 /*yield*/, db.insert(table, seedRow({
|
|
131
|
+
model: 'model-a',
|
|
132
|
+
source: 'chat_turn',
|
|
133
|
+
totalTokens: 1000,
|
|
134
|
+
costMicroUsd: 50000,
|
|
135
|
+
created: moment_1.default.utc('2026-08-10T10:00:00Z'),
|
|
136
|
+
}))];
|
|
137
|
+
case 4:
|
|
138
|
+
// Two models, two sources, three UTC instants — the last two straddle a UTC midnight.
|
|
139
|
+
_a.sent();
|
|
140
|
+
return [4 /*yield*/, db.insert(table, seedRow({
|
|
141
|
+
model: 'model-a',
|
|
142
|
+
source: 'flow_request',
|
|
143
|
+
totalTokens: 200,
|
|
144
|
+
costMicroUsd: 10000,
|
|
145
|
+
created: moment_1.default.utc('2026-08-10T23:30:00Z'),
|
|
146
|
+
}))];
|
|
147
|
+
case 5:
|
|
148
|
+
_a.sent();
|
|
149
|
+
return [4 /*yield*/, db.insert(table, seedRow({
|
|
150
|
+
model: 'model-b',
|
|
151
|
+
source: 'chat_turn',
|
|
152
|
+
totalTokens: 40,
|
|
153
|
+
costMicroUsd: 2000,
|
|
154
|
+
priced: false,
|
|
155
|
+
created: moment_1.default.utc('2026-08-11T00:30:00Z'),
|
|
156
|
+
}))];
|
|
157
|
+
case 6:
|
|
158
|
+
_a.sent();
|
|
159
|
+
return [2 /*return*/];
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
}); }, 60000);
|
|
163
|
+
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
164
|
+
return __generator(this, function (_a) {
|
|
165
|
+
switch (_a.label) {
|
|
166
|
+
case 0:
|
|
167
|
+
(0, test_1.clearTestUser)();
|
|
168
|
+
return [4 /*yield*/, dropTable(table)];
|
|
169
|
+
case 1:
|
|
170
|
+
_a.sent();
|
|
171
|
+
return [4 /*yield*/, SpannerEmulatorProvisioner_1.SpannerEmulatorProvisioner.release()];
|
|
172
|
+
case 2:
|
|
173
|
+
_a.sent();
|
|
174
|
+
return [2 /*return*/];
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}); }, 30000);
|
|
178
|
+
test('grouped SUM/COUNT rows carry group fields + aggregate resultProps', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
179
|
+
var qb, rows, byModel;
|
|
180
|
+
return __generator(this, function (_a) {
|
|
181
|
+
switch (_a.label) {
|
|
182
|
+
case 0:
|
|
183
|
+
qb = new db_1.QueryBuilderFactory()
|
|
184
|
+
.createQueryBuilder(table)
|
|
185
|
+
.select({ fields: ['model'] })
|
|
186
|
+
.groupBy(['model'])
|
|
187
|
+
.aggregate({ function: 'SUM', field: 'totalTokens', resultProp: 'totalTokens' })
|
|
188
|
+
.aggregate({ function: 'SUM', field: 'costMicroUsd', resultProp: 'costMicroUsd' })
|
|
189
|
+
.aggregate({ function: 'COUNT', resultProp: 'requests' });
|
|
190
|
+
return [4 /*yield*/, db.queryAggregates(table, qb)];
|
|
191
|
+
case 1:
|
|
192
|
+
rows = _a.sent();
|
|
193
|
+
byModel = new Map(rows.map(function (row) { return [row.model, row]; }));
|
|
194
|
+
expect(byModel.size).toBe(2);
|
|
195
|
+
expect(Number(byModel.get('model-a').totalTokens)).toBe(1200);
|
|
196
|
+
expect(Number(byModel.get('model-a').costMicroUsd)).toBe(60000);
|
|
197
|
+
expect(Number(byModel.get('model-a').requests)).toBe(2);
|
|
198
|
+
expect(Number(byModel.get('model-b').totalTokens)).toBe(40);
|
|
199
|
+
expect(Number(byModel.get('model-b').requests)).toBe(1);
|
|
200
|
+
return [2 /*return*/];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}); }, 60000);
|
|
204
|
+
test('timeBucket buckets by UTC day — rows across a UTC midnight land apart', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
205
|
+
var qb, rows, byDay;
|
|
206
|
+
return __generator(this, function (_a) {
|
|
207
|
+
switch (_a.label) {
|
|
208
|
+
case 0:
|
|
209
|
+
qb = new db_1.QueryBuilderFactory()
|
|
210
|
+
.createQueryBuilder(table)
|
|
211
|
+
.timeBucket({ field: 'created', unit: 'day', resultProp: 'day' })
|
|
212
|
+
.aggregate({ function: 'SUM', field: 'totalTokens', resultProp: 'totalTokens' });
|
|
213
|
+
return [4 /*yield*/, db.queryAggregates(table, qb)];
|
|
214
|
+
case 1:
|
|
215
|
+
rows = _a.sent();
|
|
216
|
+
byDay = new Map(rows.map(function (row) { return [dayOf(row.day), Number(row.totalTokens)]; }));
|
|
217
|
+
expect(byDay.size).toBe(2);
|
|
218
|
+
expect(byDay.get('2026-08-10')).toBe(1200); // 10:00Z + 23:30Z
|
|
219
|
+
expect(byDay.get('2026-08-11')).toBe(40); // 00:30Z — next UTC day
|
|
220
|
+
return [2 /*return*/];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}); }, 60000);
|
|
224
|
+
test('group fields, day bucket, aggregates, and conditions compose in one statement', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
225
|
+
var qb, rows, key, byKey;
|
|
226
|
+
return __generator(this, function (_a) {
|
|
227
|
+
switch (_a.label) {
|
|
228
|
+
case 0:
|
|
229
|
+
qb = new db_1.QueryBuilderFactory()
|
|
230
|
+
.createQueryBuilder(table)
|
|
231
|
+
.condition({ field: 'priced', operator: '=', value: true })
|
|
232
|
+
.select({ fields: ['model', 'source'] })
|
|
233
|
+
.groupBy(['model', 'source'])
|
|
234
|
+
.timeBucket({ field: 'created', unit: 'day', resultProp: 'day' })
|
|
235
|
+
.aggregate({ function: 'SUM', field: 'totalTokens', resultProp: 'totalTokens' })
|
|
236
|
+
.aggregate({ function: 'COUNT', resultProp: 'requests' });
|
|
237
|
+
return [4 /*yield*/, db.queryAggregates(table, qb)];
|
|
238
|
+
case 1:
|
|
239
|
+
rows = _a.sent();
|
|
240
|
+
// priced=false row excluded; model-a splits by source, same day for the 10:00Z/23:30Z rows.
|
|
241
|
+
expect(rows).toHaveLength(2);
|
|
242
|
+
key = function (row) { return "".concat(row.model, "/").concat(row.source, "/").concat(dayOf(row.day)); };
|
|
243
|
+
byKey = new Map(rows.map(function (row) { return [key(row), row]; }));
|
|
244
|
+
expect(Number(byKey.get('model-a/chat_turn/2026-08-10').totalTokens)).toBe(1000);
|
|
245
|
+
expect(Number(byKey.get('model-a/flow_request/2026-08-10').totalTokens)).toBe(200);
|
|
246
|
+
expect(Number(byKey.get('model-a/chat_turn/2026-08-10').requests)).toBe(1);
|
|
247
|
+
return [2 /*return*/];
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}); }, 60000);
|
|
251
|
+
// LAST test: it seeds an extra same-hour row; afterAll drops the table so no cleanup needed.
|
|
252
|
+
test('timeBucket(hour) buckets by UTC hour — cross-hour rows split, same-hour rows merge (V2.3)', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
253
|
+
var hourQb, byHour, _a, byHour2, _b;
|
|
254
|
+
return __generator(this, function (_c) {
|
|
255
|
+
switch (_c.label) {
|
|
256
|
+
case 0:
|
|
257
|
+
hourQb = function () {
|
|
258
|
+
return new db_1.QueryBuilderFactory()
|
|
259
|
+
.createQueryBuilder(table)
|
|
260
|
+
.timeBucket({ field: 'created', unit: 'hour', resultProp: 'hour' })
|
|
261
|
+
.aggregate({ function: 'SUM', field: 'totalTokens', resultProp: 'totalTokens' })
|
|
262
|
+
.aggregate({ function: 'COUNT', resultProp: 'requests' });
|
|
263
|
+
};
|
|
264
|
+
_a = Map.bind;
|
|
265
|
+
return [4 /*yield*/, db.queryAggregates(table, hourQb())];
|
|
266
|
+
case 1:
|
|
267
|
+
byHour = new (_a.apply(Map, [void 0, (_c.sent()).map(function (row) { return [
|
|
268
|
+
new Date(String(row.hour)).toISOString(),
|
|
269
|
+
Number(row.totalTokens),
|
|
270
|
+
]; })]))();
|
|
271
|
+
expect(byHour.size).toBe(3);
|
|
272
|
+
expect(byHour.get('2026-08-10T10:00:00.000Z')).toBe(1000);
|
|
273
|
+
expect(byHour.get('2026-08-10T23:00:00.000Z')).toBe(200); // 23:30Z floors to 23:00Z
|
|
274
|
+
expect(byHour.get('2026-08-11T00:00:00.000Z')).toBe(40); // 00:30Z → its own hour, not merged with 23:30Z
|
|
275
|
+
// A second row INSIDE an existing hour must MERGE, not open a new bucket (30 min apart, same hour).
|
|
276
|
+
return [4 /*yield*/, db.insert(table, seedRow({ model: 'model-c', totalTokens: 7, created: moment_1.default.utc('2026-08-10T10:45:00Z') }))];
|
|
277
|
+
case 2:
|
|
278
|
+
// A second row INSIDE an existing hour must MERGE, not open a new bucket (30 min apart, same hour).
|
|
279
|
+
_c.sent();
|
|
280
|
+
_b = Map.bind;
|
|
281
|
+
return [4 /*yield*/, db.queryAggregates(table, hourQb())];
|
|
282
|
+
case 3:
|
|
283
|
+
byHour2 = new (_b.apply(Map, [void 0, (_c.sent()).map(function (row) { return [new Date(String(row.hour)).toISOString(), row]; })]))();
|
|
284
|
+
expect(byHour2.size).toBe(3); // still three hours — 10:00Z absorbed the 10:45Z row
|
|
285
|
+
expect(Number(byHour2.get('2026-08-10T10:00:00.000Z').totalTokens)).toBe(1007); // 1000 + 7
|
|
286
|
+
expect(Number(byHour2.get('2026-08-10T10:00:00.000Z').requests)).toBe(2);
|
|
287
|
+
return [2 /*return*/];
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
}); }, 60000);
|
|
291
|
+
});
|
|
292
|
+
//# sourceMappingURL=QueryAggregates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryAggregates.test.js","sourceRoot":"","sources":["../../test/QueryAggregates.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferenceColumnAdoptWidth.test.d.ts","sourceRoot":"","sources":["../../test/ReferenceColumnAdoptWidth.test.ts"],"names":[],"mappings":"AAWA,OAAO,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
19
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
20
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
21
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
22
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
23
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
27
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
28
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
29
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
30
|
+
function step(op) {
|
|
31
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
32
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
33
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
34
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
35
|
+
switch (op[0]) {
|
|
36
|
+
case 0: case 1: t = op; break;
|
|
37
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
38
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
39
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
40
|
+
default:
|
|
41
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
42
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
43
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
44
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
45
|
+
if (t[2]) _.ops.pop();
|
|
46
|
+
_.trys.pop(); continue;
|
|
47
|
+
}
|
|
48
|
+
op = body.call(thisArg, _);
|
|
49
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
50
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
var db_driver_spanner_1 = require("@proteinjs/db-driver-spanner");
|
|
55
|
+
var db_1 = require("@proteinjs/db");
|
|
56
|
+
var db_transaction_context_1 = require("@proteinjs/db-transaction-context");
|
|
57
|
+
var getDropTestTable_1 = require("./util/getDropTestTable");
|
|
58
|
+
var SpannerEmulatorProvisioner_1 = require("./util/SpannerEmulatorProvisioner");
|
|
59
|
+
var referenceAdoptWidthTestTables_1 = require("./util/referenceAdoptWidthTestTables");
|
|
60
|
+
require("../generated/test/index");
|
|
61
|
+
/**
|
|
62
|
+
* `ReferenceColumn`'s width-adoption option (`maxLength`), which exists so an EXISTING string-uuid
|
|
63
|
+
* column can be retyped to a reference IN PLACE — same storage type, same bytes, zero DDL.
|
|
64
|
+
*
|
|
65
|
+
* The default reference width is STRING(36), but a column that predates the reference type was
|
|
66
|
+
* created at StringColumn's default STRING(255); Spanner cannot narrow a STRING in place, so
|
|
67
|
+
* without adopting the existing width the schema sync doesn't just emit DDL — it throws and
|
|
68
|
+
* bricks boot. Contracts, as outcomes against the live emulator schema:
|
|
69
|
+
* 1. Adopting the existing width means the sync sees NO changes for the retype (no DDL at all).
|
|
70
|
+
* 2. Storage is byte-identical both directions: rows written by the string era read back as
|
|
71
|
+
* references to the same id, and reference writes store the raw id string.
|
|
72
|
+
* 3. The stock (36) shape against a 255-width column is a narrowing: reported as a type change
|
|
73
|
+
* and refused by the alter pass — the documented reason the adoption option must be passed.
|
|
74
|
+
*/
|
|
75
|
+
var spannerDriver = new db_driver_spanner_1.SpannerDriver({
|
|
76
|
+
projectId: 'proteinjs-test',
|
|
77
|
+
instanceName: 'proteinjs-test',
|
|
78
|
+
databaseName: 'test',
|
|
79
|
+
});
|
|
80
|
+
var TABLE_NAME = referenceAdoptWidthTestTables_1.ADOPT_WIDTH_TABLE_NAME;
|
|
81
|
+
var TARGET_TABLE_NAME = referenceAdoptWidthTestTables_1.ADOPT_WIDTH_TARGET_TABLE_NAME;
|
|
82
|
+
/** The string era: how the column was originally declared (and lives in deployed schemas). */
|
|
83
|
+
var legacyTable = function () {
|
|
84
|
+
return new (/** @class */ (function (_super) {
|
|
85
|
+
__extends(class_1, _super);
|
|
86
|
+
function class_1() {
|
|
87
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
88
|
+
_this.name = TABLE_NAME;
|
|
89
|
+
_this.columns = (0, db_1.withRecordColumns)({
|
|
90
|
+
invitedBy: new db_1.StringColumn('invited_by'),
|
|
91
|
+
});
|
|
92
|
+
return _this;
|
|
93
|
+
}
|
|
94
|
+
return class_1;
|
|
95
|
+
}(db_1.Table)))();
|
|
96
|
+
};
|
|
97
|
+
/** The retype under test: same physical column, adopted at its existing width (registered — Db
|
|
98
|
+
* statement generation resolves tables by name through the reflection registry). */
|
|
99
|
+
var adoptedTable = function () { return new referenceAdoptWidthTestTables_1.ReferenceAdoptWidthTestTable(); };
|
|
100
|
+
/** The stock shape (36): what the retype would be WITHOUT width adoption. */
|
|
101
|
+
var stockWidthTable = function () {
|
|
102
|
+
return new (/** @class */ (function (_super) {
|
|
103
|
+
__extends(class_2, _super);
|
|
104
|
+
function class_2() {
|
|
105
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
106
|
+
_this.name = TABLE_NAME;
|
|
107
|
+
_this.columns = (0, db_1.withRecordColumns)({
|
|
108
|
+
invitedBy: new db_1.ReferenceColumn('invited_by', TARGET_TABLE_NAME, false),
|
|
109
|
+
});
|
|
110
|
+
return _this;
|
|
111
|
+
}
|
|
112
|
+
return class_2;
|
|
113
|
+
}(db_1.Table)))();
|
|
114
|
+
};
|
|
115
|
+
describe('ReferenceColumn width adoption (string uuid column retyped in place)', function () {
|
|
116
|
+
var dropTable = (0, getDropTestTable_1.getDropTestTable)(spannerDriver);
|
|
117
|
+
var tableManager = spannerDriver.getTableManager();
|
|
118
|
+
var tableManagerInternals = tableManager;
|
|
119
|
+
var STRING_ERA_UUID = '3f2a9c04-6b1d-4e8a-9c37-5d20f4a81b6e';
|
|
120
|
+
var REFERENCE_ERA_UUID = '9b7c1e52-0d4f-4a63-8e91-2c85d6f03a47';
|
|
121
|
+
beforeAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
122
|
+
return __generator(this, function (_a) {
|
|
123
|
+
switch (_a.label) {
|
|
124
|
+
case 0: return [4 /*yield*/, SpannerEmulatorProvisioner_1.SpannerEmulatorProvisioner.ensureProvisioned({
|
|
125
|
+
projectId: 'proteinjs-test',
|
|
126
|
+
instanceName: 'proteinjs-test',
|
|
127
|
+
databaseName: 'test',
|
|
128
|
+
})];
|
|
129
|
+
case 1:
|
|
130
|
+
_a.sent();
|
|
131
|
+
return [4 /*yield*/, dropTable(legacyTable())];
|
|
132
|
+
case 2:
|
|
133
|
+
_a.sent();
|
|
134
|
+
return [2 /*return*/];
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}); }, 30000);
|
|
138
|
+
afterAll(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
139
|
+
return __generator(this, function (_a) {
|
|
140
|
+
switch (_a.label) {
|
|
141
|
+
case 0: return [4 /*yield*/, dropTable(legacyTable())];
|
|
142
|
+
case 1:
|
|
143
|
+
_a.sent();
|
|
144
|
+
return [4 /*yield*/, SpannerEmulatorProvisioner_1.SpannerEmulatorProvisioner.release()];
|
|
145
|
+
case 2:
|
|
146
|
+
_a.sent();
|
|
147
|
+
return [2 /*return*/];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}); }, 30000);
|
|
151
|
+
test('retype with the adopted width is invisible to the schema sync — zero DDL', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
152
|
+
var legacy, _a, adopted, tableChanges, _b;
|
|
153
|
+
return __generator(this, function (_c) {
|
|
154
|
+
switch (_c.label) {
|
|
155
|
+
case 0:
|
|
156
|
+
legacy = legacyTable();
|
|
157
|
+
return [4 /*yield*/, tableManager.loadTable(legacy)];
|
|
158
|
+
case 1:
|
|
159
|
+
_c.sent();
|
|
160
|
+
_a = expect;
|
|
161
|
+
return [4 /*yield*/, tableManager.schemaMetadata.getColumnMetadata(legacy)];
|
|
162
|
+
case 2:
|
|
163
|
+
_a.apply(void 0, [(_c.sent())['invited_by'].type]).toBe('STRING(255)');
|
|
164
|
+
return [4 /*yield*/, spannerDriver.runDml(function () { return ({
|
|
165
|
+
sql: "INSERT INTO ".concat(TABLE_NAME, " (id, invited_by) VALUES (@id, @invitedBy)"),
|
|
166
|
+
namedParams: {
|
|
167
|
+
params: { id: 'string-era-row', invitedBy: STRING_ERA_UUID },
|
|
168
|
+
types: { id: 'string', invitedBy: 'string' },
|
|
169
|
+
},
|
|
170
|
+
}); })];
|
|
171
|
+
case 3:
|
|
172
|
+
_c.sent();
|
|
173
|
+
adopted = adoptedTable();
|
|
174
|
+
return [4 /*yield*/, tableManagerInternals.getTableChanges(adopted)];
|
|
175
|
+
case 4:
|
|
176
|
+
tableChanges = _c.sent();
|
|
177
|
+
expect(tableChanges.columnTypeChanges).toEqual([]);
|
|
178
|
+
expect(tableChanges.columnsToAlter).toEqual([]);
|
|
179
|
+
expect(tableChanges.columnsToCreate).toEqual([]);
|
|
180
|
+
expect(tableManagerInternals.shouldAlterTable(tableChanges)).toBe(false);
|
|
181
|
+
// And a full load pass leaves the live column untouched.
|
|
182
|
+
return [4 /*yield*/, tableManager.loadTable(adopted)];
|
|
183
|
+
case 5:
|
|
184
|
+
// And a full load pass leaves the live column untouched.
|
|
185
|
+
_c.sent();
|
|
186
|
+
_b = expect;
|
|
187
|
+
return [4 /*yield*/, tableManager.schemaMetadata.getColumnMetadata(adopted)];
|
|
188
|
+
case 6:
|
|
189
|
+
_b.apply(void 0, [(_c.sent())['invited_by'].type]).toBe('STRING(255)');
|
|
190
|
+
return [2 /*return*/];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
}); }, 60000);
|
|
194
|
+
test('storage stays byte-identical: string-era rows read as references; reference writes store the raw id', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
195
|
+
var adopted, db, stringEraRow, inserted, rows;
|
|
196
|
+
var _a, _b;
|
|
197
|
+
return __generator(this, function (_c) {
|
|
198
|
+
switch (_c.label) {
|
|
199
|
+
case 0:
|
|
200
|
+
adopted = adoptedTable();
|
|
201
|
+
db = new db_1.Db(spannerDriver, function () { return adopted; }, new db_transaction_context_1.TransactionContext(), true);
|
|
202
|
+
return [4 /*yield*/, db.get(adopted, { id: 'string-era-row' })];
|
|
203
|
+
case 1:
|
|
204
|
+
stringEraRow = _c.sent();
|
|
205
|
+
expect(stringEraRow.invitedBy).toBeInstanceOf(db_1.Reference);
|
|
206
|
+
expect((_a = stringEraRow.invitedBy) === null || _a === void 0 ? void 0 : _a._id).toBe(STRING_ERA_UUID);
|
|
207
|
+
expect((_b = stringEraRow.invitedBy) === null || _b === void 0 ? void 0 : _b._table).toBe(TARGET_TABLE_NAME);
|
|
208
|
+
return [4 /*yield*/, db.insert(adopted, {
|
|
209
|
+
invitedBy: new db_1.Reference(TARGET_TABLE_NAME, REFERENCE_ERA_UUID),
|
|
210
|
+
})];
|
|
211
|
+
case 2:
|
|
212
|
+
inserted = _c.sent();
|
|
213
|
+
return [4 /*yield*/, spannerDriver.runQuery(function () { return ({
|
|
214
|
+
sql: "SELECT invited_by FROM ".concat(TABLE_NAME, " WHERE id = @id"),
|
|
215
|
+
namedParams: { params: { id: inserted.id }, types: { id: 'string' } },
|
|
216
|
+
}); })];
|
|
217
|
+
case 3:
|
|
218
|
+
rows = _c.sent();
|
|
219
|
+
expect(rows[0].invited_by).toBe(REFERENCE_ERA_UUID);
|
|
220
|
+
return [2 /*return*/];
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
}); }, 60000);
|
|
224
|
+
test('the stock 36 width against a 255 column is a narrowing: reported as a type change and refused', function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
225
|
+
var stock, tableChanges;
|
|
226
|
+
return __generator(this, function (_a) {
|
|
227
|
+
switch (_a.label) {
|
|
228
|
+
case 0:
|
|
229
|
+
stock = stockWidthTable();
|
|
230
|
+
return [4 /*yield*/, tableManagerInternals.getTableChanges(stock)];
|
|
231
|
+
case 1:
|
|
232
|
+
tableChanges = _a.sent();
|
|
233
|
+
expect(tableChanges.columnTypeChanges).toEqual([
|
|
234
|
+
{ name: 'invited_by', oldType: 'STRING(255)', newType: 'STRING(36)' },
|
|
235
|
+
]);
|
|
236
|
+
return [4 /*yield*/, expect(tableManager.loadTable(stock)).rejects.toThrow(/Unable to change column types in Spanner/)];
|
|
237
|
+
case 2:
|
|
238
|
+
_a.sent();
|
|
239
|
+
return [2 /*return*/];
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
}); }, 60000);
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=ReferenceColumnAdoptWidth.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReferenceColumnAdoptWidth.test.js","sourceRoot":"","sources":["../../test/ReferenceColumnAdoptWidth.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Record, Reference, Table } from '@proteinjs/db';
|
|
2
|
+
/**
|
|
3
|
+
* The registered face of the width-adoption suite's table (ReferenceColumnAdoptWidth.test.ts):
|
|
4
|
+
* the retyped declaration — a reference adopting the column's pre-existing STRING(255) width.
|
|
5
|
+
* Declared here (not inline in the suite) because Db statement generation resolves tables by
|
|
6
|
+
* NAME through the reflection registry; the suite's string-era and stock-width variants of the
|
|
7
|
+
* same physical table stay inline there, reaching only instance-passed TableManager APIs.
|
|
8
|
+
*/
|
|
9
|
+
export interface AdoptWidthRecord extends Record {
|
|
10
|
+
invitedBy?: Reference<Record> | null;
|
|
11
|
+
}
|
|
12
|
+
export declare const ADOPT_WIDTH_TABLE_NAME = "db_test_reference_adopt_width";
|
|
13
|
+
export declare const ADOPT_WIDTH_TARGET_TABLE_NAME = "db_test_reference_adopt_target";
|
|
14
|
+
export declare class ReferenceAdoptWidthTestTable extends Table<AdoptWidthRecord> {
|
|
15
|
+
name: string;
|
|
16
|
+
columns: {
|
|
17
|
+
id: import("@proteinjs/db").Column<string, any>;
|
|
18
|
+
created: import("@proteinjs/db").Column<import("moment").Moment, any>;
|
|
19
|
+
updated: import("@proteinjs/db").Column<import("moment").Moment, any>;
|
|
20
|
+
} & {} & {
|
|
21
|
+
invitedBy: import("@proteinjs/db").Column<Reference<Record> | null | undefined, any>;
|
|
22
|
+
} & {};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=referenceAdoptWidthTestTables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenceAdoptWidthTestTables.d.ts","sourceRoot":"","sources":["../../../test/util/referenceAdoptWidthTestTables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAmB,KAAK,EAAqB,MAAM,eAAe,CAAC;AAE7F;;;;;;GAMG;AAEH,MAAM,WAAW,gBAAiB,SAAQ,MAAM;IAC9C,SAAS,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;CACtC;AAED,eAAO,MAAM,sBAAsB,kCAAkC,CAAC;AACtE,eAAO,MAAM,6BAA6B,mCAAmC,CAAC;AAE9E,qBAAa,4BAA6B,SAAQ,KAAK,CAAC,gBAAgB,CAAC;IACvE,IAAI,SAA0B;IAC9B,OAAO;;;;;;WAEJ;CACJ"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ReferenceAdoptWidthTestTable = exports.ADOPT_WIDTH_TARGET_TABLE_NAME = exports.ADOPT_WIDTH_TABLE_NAME = void 0;
|
|
19
|
+
var db_1 = require("@proteinjs/db");
|
|
20
|
+
exports.ADOPT_WIDTH_TABLE_NAME = 'db_test_reference_adopt_width';
|
|
21
|
+
exports.ADOPT_WIDTH_TARGET_TABLE_NAME = 'db_test_reference_adopt_target';
|
|
22
|
+
var ReferenceAdoptWidthTestTable = /** @class */ (function (_super) {
|
|
23
|
+
__extends(ReferenceAdoptWidthTestTable, _super);
|
|
24
|
+
function ReferenceAdoptWidthTestTable() {
|
|
25
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
26
|
+
_this.name = exports.ADOPT_WIDTH_TABLE_NAME;
|
|
27
|
+
_this.columns = (0, db_1.withRecordColumns)({
|
|
28
|
+
invitedBy: new db_1.ReferenceColumn('invited_by', exports.ADOPT_WIDTH_TARGET_TABLE_NAME, false, { maxLength: 255 }),
|
|
29
|
+
});
|
|
30
|
+
return _this;
|
|
31
|
+
}
|
|
32
|
+
return ReferenceAdoptWidthTestTable;
|
|
33
|
+
}(db_1.Table));
|
|
34
|
+
exports.ReferenceAdoptWidthTestTable = ReferenceAdoptWidthTestTable;
|
|
35
|
+
//# sourceMappingURL=referenceAdoptWidthTestTables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referenceAdoptWidthTestTables.js","sourceRoot":"","sources":["../../../test/util/referenceAdoptWidthTestTables.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,oCAA6F;AAchF,QAAA,sBAAsB,GAAG,+BAA+B,CAAC;AACzD,QAAA,6BAA6B,GAAG,gCAAgC,CAAC;AAE9E;IAAkD,gDAAuB;IAAzE;QAAA,qEAKC;QAJC,UAAI,GAAG,8BAAsB,CAAC;QAC9B,aAAO,GAAG,IAAA,sBAAiB,EAAmB;YAC5C,SAAS,EAAE,IAAI,oBAAe,CAAS,YAAY,EAAE,qCAA6B,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SAC/G,CAAC,CAAC;;IACL,CAAC;IAAD,mCAAC;AAAD,CAAC,AALD,CAAkD,UAAK,GAKtD;AALY,oEAA4B"}
|