@proteinjs/db-driver-spanner 1.18.0 → 1.20.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/generated/index.js +1 -1
  3. package/dist/generated/index.js.map +1 -1
  4. package/dist/generated/test/index.js +1 -1
  5. package/dist/generated/test/index.js.map +1 -1
  6. package/dist/src/SpannerDriver.d.ts +52 -3
  7. package/dist/src/SpannerDriver.d.ts.map +1 -1
  8. package/dist/src/SpannerDriver.js +141 -33
  9. package/dist/src/SpannerDriver.js.map +1 -1
  10. package/dist/src/SpannerSchemaOperations.d.ts +9 -1
  11. package/dist/src/SpannerSchemaOperations.d.ts.map +1 -1
  12. package/dist/src/SpannerSchemaOperations.js +88 -124
  13. package/dist/src/SpannerSchemaOperations.js.map +1 -1
  14. package/dist/test/BatchedDdl.test.d.ts +2 -0
  15. package/dist/test/BatchedDdl.test.d.ts.map +1 -0
  16. package/dist/test/BatchedDdl.test.js +496 -0
  17. package/dist/test/BatchedDdl.test.js.map +1 -0
  18. package/dist/test/DmlRetrySafety.test.d.ts +2 -0
  19. package/dist/test/DmlRetrySafety.test.d.ts.map +1 -0
  20. package/dist/test/DmlRetrySafety.test.js +472 -0
  21. package/dist/test/DmlRetrySafety.test.js.map +1 -0
  22. package/dist/test/RecordIterator.test.d.ts +2 -0
  23. package/dist/test/RecordIterator.test.d.ts.map +1 -0
  24. package/dist/test/RecordIterator.test.js +14 -0
  25. package/dist/test/RecordIterator.test.js.map +1 -0
  26. package/dist/test/RunPendingMigrations.test.d.ts +2 -0
  27. package/dist/test/RunPendingMigrations.test.d.ts.map +1 -0
  28. package/dist/test/RunPendingMigrations.test.js +354 -0
  29. package/dist/test/RunPendingMigrations.test.js.map +1 -0
  30. package/dist/test/SpannerOperationDeadline.test.js +1 -1
  31. package/dist/test/SpannerOperationDeadline.test.js.map +1 -1
  32. package/generated/index.ts +1 -1
  33. package/generated/test/index.ts +1 -1
  34. package/package.json +6 -6
  35. package/src/SpannerDriver.ts +110 -18
  36. package/src/SpannerSchemaOperations.ts +69 -55
  37. package/test/BatchedDdl.test.ts +293 -0
  38. package/test/DmlRetrySafety.test.ts +305 -0
  39. package/test/RecordIterator.test.ts +16 -0
  40. package/test/RunPendingMigrations.test.ts +201 -0
  41. package/test/SpannerOperationDeadline.test.ts +1 -1
@@ -173,7 +173,7 @@ var SpannerDriver = /** @class */ (function () {
173
173
  if (_a.sent()) {
174
174
  return [2 /*return*/];
175
175
  }
176
- return [4 /*yield*/, this.getSpannerInstance().createDatabase(this.getDbName())];
176
+ return [4 /*yield*/, this.createDb(this.getDbName())];
177
177
  case 2:
178
178
  _a.sent();
179
179
  return [2 /*return*/];
@@ -181,19 +181,87 @@ var SpannerDriver = /** @class */ (function () {
181
181
  });
182
182
  });
183
183
  };
184
+ /**
185
+ * Create the named database in one operation. `ddl` statements ride the create as
186
+ * `CreateDatabase.extra_statements` — applied in order, atomically with the creation (if any
187
+ * statement fails, the database is not created) — so a database can be born with its full
188
+ * schema without a second schema-update operation.
189
+ */
190
+ SpannerDriver.prototype.createDb = function (name, options) {
191
+ var _a;
192
+ return __awaiter(this, void 0, void 0, function () {
193
+ var _b, database, operation;
194
+ return __generator(this, function (_c) {
195
+ switch (_c.label) {
196
+ case 0: return [4 /*yield*/, this.getSpannerInstance().createDatabase(name, {
197
+ extraStatements: (_a = options === null || options === void 0 ? void 0 : options.ddl) !== null && _a !== void 0 ? _a : [],
198
+ // Admin-handle hygiene (see adminDbHandle): the client constructs the returned handle
199
+ // BEFORE the create operation completes — a default eager pool races the operation and
200
+ // crashes on NOT_FOUND.
201
+ poolOptions: { min: 0 },
202
+ })];
203
+ case 1:
204
+ _b = _c.sent(), database = _b[0], operation = _b[1];
205
+ database.on('error', function () { return undefined; });
206
+ return [4 /*yield*/, operation.promise()];
207
+ case 2:
208
+ _c.sent();
209
+ return [4 /*yield*/, database.close().catch(function () { return undefined; })];
210
+ case 3:
211
+ _c.sent();
212
+ return [2 /*return*/];
213
+ }
214
+ });
215
+ });
216
+ };
217
+ /** Drop the named database (client `Database.delete()` — closes the handle, then drops). */
218
+ SpannerDriver.prototype.dropDb = function (name) {
219
+ return __awaiter(this, void 0, void 0, function () {
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0: return [4 /*yield*/, this.adminDbHandle(name).delete()];
223
+ case 1:
224
+ _a.sent();
225
+ return [2 /*return*/];
226
+ }
227
+ });
228
+ });
229
+ };
184
230
  SpannerDriver.prototype.dbExists = function (databaseName) {
185
231
  return __awaiter(this, void 0, void 0, function () {
186
- var exists;
232
+ var database, exists;
187
233
  return __generator(this, function (_a) {
188
234
  switch (_a.label) {
189
- case 0: return [4 /*yield*/, this.getSpannerInstance().database(databaseName).exists()];
235
+ case 0:
236
+ database = this.adminDbHandle(databaseName);
237
+ _a.label = 1;
190
238
  case 1:
239
+ _a.trys.push([1, , 3, 5]);
240
+ return [4 /*yield*/, database.exists()];
241
+ case 2:
191
242
  exists = (_a.sent())[0];
192
243
  return [2 /*return*/, exists];
244
+ case 3: return [4 /*yield*/, database.close().catch(function () { return undefined; })];
245
+ case 4:
246
+ _a.sent();
247
+ return [7 /*endfinally*/];
248
+ case 5: return [2 /*return*/];
193
249
  }
194
250
  });
195
251
  });
196
252
  };
253
+ /**
254
+ * A Database handle for admin operations (exists/drop): admin RPCs ride the admin client, not
255
+ * sessions, so the pool is configured to hold ZERO sessions — the default pool eagerly fills
256
+ * in the handle's constructor and emits process-crashing unlistened 'error' events when the
257
+ * database does not exist, which is the NORMAL case for these operations. Its error channel is
258
+ * owned for the same reason.
259
+ */
260
+ SpannerDriver.prototype.adminDbHandle = function (name) {
261
+ var database = this.getSpannerInstance().database(name, { min: 0 });
262
+ database.on('error', function () { return undefined; });
263
+ return database;
264
+ };
197
265
  /**
198
266
  * Execute a query.
199
267
  */
@@ -305,32 +373,29 @@ var SpannerDriver = /** @class */ (function () {
305
373
  });
306
374
  };
307
375
  SpannerDriver.prototype.executeDml = function (generateStatement, runner) {
376
+ var _a;
308
377
  return __awaiter(this, void 0, void 0, function () {
309
- var _a, sql, namedParams, startTime, rowCount, durationMs, error_3, durationMs;
310
- return __generator(this, function (_b) {
311
- switch (_b.label) {
378
+ var _b, sql, namedParams, startTime, rowCounts, rowCount, durationMs, error_3, durationMs;
379
+ return __generator(this, function (_c) {
380
+ switch (_c.label) {
312
381
  case 0:
313
- _a = generateStatement({
382
+ _b = generateStatement({
314
383
  useParams: true,
315
384
  useNamedParams: true,
316
385
  prefixTablesWithDb: false,
317
386
  getDriverColumnType: this.getColumnType.bind(this),
318
- }), sql = _a.sql, namedParams = _a.namedParams;
387
+ }), sql = _b.sql, namedParams = _b.namedParams;
319
388
  startTime = process.hrtime.bigint();
320
- _b.label = 1;
389
+ _c.label = 1;
321
390
  case 1:
322
- _b.trys.push([1, 3, , 4]);
391
+ _c.trys.push([1, 3, , 4]);
323
392
  this.logger.debug({ message: "Executing dml", obj: { sql: sql, params: namedParams } });
324
- return [4 /*yield*/, this.withDeadline('spanner dml', sql, runner.runUpdate({
325
- sql: sql,
326
- params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params,
327
- types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types,
328
- // gRPC deadline: cancels the RPC on a dead channel so the transaction's run function
329
- // settles and the library releases the session (see runDml).
330
- gaxOptions: { timeout: this.operationDeadlineMs() },
393
+ return [4 /*yield*/, this.withDeadline('spanner dml', sql, runner.batchUpdate([{ sql: sql, params: namedParams === null || namedParams === void 0 ? void 0 : namedParams.params, types: namedParams === null || namedParams === void 0 ? void 0 : namedParams.types }], {
394
+ gaxOptions: this.dmlGaxOptions(),
331
395
  }))];
332
396
  case 2:
333
- rowCount = (_b.sent())[0];
397
+ rowCounts = (_c.sent())[0];
398
+ rowCount = (_a = rowCounts[0]) !== null && _a !== void 0 ? _a : 0;
334
399
  durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
335
400
  this.logger.debug({
336
401
  message: "Dml executed",
@@ -338,7 +403,7 @@ var SpannerDriver = /** @class */ (function () {
338
403
  });
339
404
  return [2 /*return*/, rowCount];
340
405
  case 3:
341
- error_3 = _b.sent();
406
+ error_3 = _c.sent();
342
407
  durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
343
408
  this.logger.error({
344
409
  message: "Failed when executing dml",
@@ -575,6 +640,28 @@ var SpannerDriver = /** @class */ (function () {
575
640
  // already torn down
576
641
  }
577
642
  };
643
+ /**
644
+ * Per-call gax options for the DML RPC (ExecuteBatchDml). The gRPC deadline (see runDml)
645
+ * applies everywhere. The transparent-retry policy differs by backend:
646
+ *
647
+ * - Real Spanner: gax's default unary policy (UNAVAILABLE only) stands. A replay re-sends the
648
+ * identical request — same seqno, deduped in the same-transaction geometry — and in the
649
+ * inline-begin geometry only the transaction the client ultimately commits applies durably,
650
+ * so the transient-blip resilience is safe there.
651
+ * - Emulator (SPANNER_EMULATOR_HOST — the same switch the client library keys on): a replayed
652
+ * inline-begin DML begins a fresh transaction per attempt, and the abandoned
653
+ * applied-but-uncommitted siblings are exactly what fed the splice incident's spurious
654
+ * failures under pool pressure. `retry: null` makes the call single-attempt: a lost response
655
+ * surfaces as the loss to the caller, deterministically, instead of invisible multi-
656
+ * transaction churn. Loopback needs no blip resilience.
657
+ */
658
+ SpannerDriver.prototype.dmlGaxOptions = function () {
659
+ var gaxOptions = { timeout: this.operationDeadlineMs() };
660
+ if (process.env.SPANNER_EMULATOR_HOST) {
661
+ gaxOptions.retry = null;
662
+ }
663
+ return gaxOptions;
664
+ };
578
665
  SpannerDriver.prototype.operationDeadlineMs = function () {
579
666
  var _a;
580
667
  return (_a = this.config.operationDeadlineMs) !== null && _a !== void 0 ? _a : 60000;
@@ -584,34 +671,55 @@ var SpannerDriver = /** @class */ (function () {
584
671
  return (_a = this.config.deadlineFailuresBeforeRecycle) !== null && _a !== void 0 ? _a : 3;
585
672
  };
586
673
  /**
587
- * Execute a schema write operation.
674
+ * Execute a schema write operation — one long-running operation for the WHOLE statement list
675
+ * (`UpdateDatabaseDdl` applies the statements in order). Sequential per-statement operations
676
+ * are what made a 37-statement prod boot take 10m31s; callers batch and pass the list.
677
+ *
678
+ * Partial-failure semantics (verified against the emulator; matches Spanner's documented
679
+ * batch-DDL behavior — both phases are covered in BatchedDdl.test.ts):
680
+ * - VALIDATION failure (schema-shape errors, checked upfront for the whole batch, in order,
681
+ * against the projected schema): the batch is rejected before anything applies — NOTHING
682
+ * lands. Strictly safer than the old serial path, which stranded the earlier statements.
683
+ * - APPLY failure (data-dependent errors, e.g. a unique-index backfill over duplicate rows):
684
+ * statements BEFORE the failing one stay applied; the failing one and everything after are
685
+ * cancelled — the serial path's semantics.
686
+ * Neither phase reports a positional statement index: the backend error names the offending
687
+ * OBJECT (table/index/column). The failure log below carries the full statement list plus
688
+ * that reason, which together locate the statement.
588
689
  */
589
- SpannerDriver.prototype.runUpdateSchema = function (sql) {
690
+ SpannerDriver.prototype.runUpdateSchema = function (statements) {
691
+ var _a;
590
692
  return __awaiter(this, void 0, void 0, function () {
591
- var startTime, operation, durationMs, error_5, durationMs;
592
- return __generator(this, function (_a) {
593
- switch (_a.label) {
693
+ var statementList, startTime, operation, durationMs, error_5, durationMs;
694
+ return __generator(this, function (_b) {
695
+ switch (_b.label) {
594
696
  case 0:
697
+ statementList = Array.isArray(statements) ? statements : [statements];
595
698
  startTime = process.hrtime.bigint();
596
- _a.label = 1;
699
+ _b.label = 1;
597
700
  case 1:
598
- _a.trys.push([1, 4, , 5]);
599
- this.logger.debug({ message: "Executing schema update", obj: { sql: sql } });
600
- return [4 /*yield*/, this.getSpannerDb().updateSchema(sql)];
701
+ _b.trys.push([1, 4, , 5]);
702
+ this.logger.debug({ message: "Executing schema update", obj: { statements: statementList } });
703
+ return [4 /*yield*/, this.getSpannerDb().updateSchema(statementList)];
601
704
  case 2:
602
- operation = (_a.sent())[0];
705
+ operation = (_b.sent())[0];
603
706
  return [4 /*yield*/, operation.promise()];
604
707
  case 3:
605
- _a.sent();
708
+ _b.sent();
606
709
  durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
607
- this.logger.debug({ message: "Schema update executed", obj: { sql: sql, durationMs: durationMs } });
710
+ this.logger.debug({
711
+ message: "Schema update executed",
712
+ obj: { statementCount: statementList.length, durationMs: durationMs },
713
+ });
608
714
  return [3 /*break*/, 5];
609
715
  case 4:
610
- error_5 = _a.sent();
716
+ error_5 = _b.sent();
611
717
  durationMs = Number(process.hrtime.bigint() - startTime) / 1000000;
612
718
  this.logger.error({
613
719
  message: "Failed when executing schema update",
614
- obj: { sql: sql, errorDetails: error_5.details, durationMs: durationMs },
720
+ // Apply-phase LRO failures carry their reason only in `message` (`details` is
721
+ // undefined there); validation-phase gRPC errors carry both.
722
+ obj: { statements: statementList, errorDetails: (_a = error_5.details) !== null && _a !== void 0 ? _a : String(error_5), durationMs: durationMs },
615
723
  });
616
724
  throw error_5;
617
725
  case 5: return [2 /*return*/];
@@ -1 +1 @@
1
- {"version":3,"file":"SpannerDriver.js","sourceRoot":"","sources":["../../src/SpannerDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SpannerDriver.js","sourceRoot":"","sources":["../../src/SpannerDriver.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,16 @@ export declare class SpannerSchemaOperations implements SchemaOperations {
4
4
  private spannerDriver;
5
5
  private logger;
6
6
  constructor(spannerDriver: SpannerDriver);
7
- createTable(table: Table<any>): Promise<void>;
7
+ /**
8
+ * Create every table in `tables` — each table's `CREATE TABLE` plus all of its `CREATE INDEX`
9
+ * statements, concatenated across tables in the given order — as ONE schema-update operation.
10
+ * `UpdateDatabaseDdl` applies the batch in order, so a table whose foreign keys reference an
11
+ * earlier table in the list resolves against it, exactly as it did when the statements ran
12
+ * serially.
13
+ */
14
+ createTables(tables: Table<any>[]): Promise<void>;
8
15
  alterTable(table: Table<any>, tableChanges: TableChanges): Promise<void>;
16
+ private createTableStatements;
9
17
  /**
10
18
  * Spanner supports exactly one in-place column type change: widening a `STRING(n)` to a larger
11
19
  * `STRING(m)` or `STRING(MAX)`. Returns the `ALTER COLUMN` statement when `change` is such a
@@ -1 +1 @@
1
- {"version":3,"file":"SpannerSchemaOperations.d.ts","sourceRoot":"","sources":["../../src/SpannerSchemaOperations.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,qBAAa,uBAAwB,YAAW,gBAAgB;IAGlD,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,MAAM,CAA2F;gBAErF,aAAa,EAAE,aAAa;IAE1C,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;IA6C7B,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,YAAY;IAwG9D;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;CAuBhC"}
1
+ {"version":3,"file":"SpannerSchemaOperations.d.ts","sourceRoot":"","sources":["../../src/SpannerSchemaOperations.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,YAAY,EAIb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMhD,qBAAa,uBAAwB,YAAW,gBAAgB;IAGlD,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,MAAM,CAA2F;gBAErF,aAAa,EAAE,aAAa;IAEhD;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;IAajC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,YAAY;IAqG9D,OAAO,CAAC,qBAAqB;IA0C7B;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;CAuBhC"}
@@ -48,65 +48,31 @@ var SpannerSchemaOperations = /** @class */ (function () {
48
48
  this.spannerDriver = spannerDriver;
49
49
  this.logger = new logger_1.Logger({ name: this.constructor.name, logLevel: getEnvVar('DB_LOG_LEVEL') });
50
50
  }
51
- SpannerSchemaOperations.prototype.createTable = function (table) {
52
- var _a, _b, _c, _d;
51
+ /**
52
+ * Create every table in `tables` — each table's `CREATE TABLE` plus all of its `CREATE INDEX`
53
+ * statements, concatenated across tables in the given order — as ONE schema-update operation.
54
+ * `UpdateDatabaseDdl` applies the batch in order, so a table whose foreign keys reference an
55
+ * earlier table in the list resolves against it, exactly as it did when the statements ran
56
+ * serially.
57
+ */
58
+ SpannerSchemaOperations.prototype.createTables = function (tables) {
53
59
  return __awaiter(this, void 0, void 0, function () {
54
- var indexes, _i, _e, _f, name_1, columns, unique, serializedColumns, foreignKeys, columnPropertyName, column, columnType, createTableSql, _g, indexes_1, index, createIndexSql, indexName;
55
- return __generator(this, function (_h) {
56
- switch (_h.label) {
60
+ var statements, _i, tables_1, table;
61
+ return __generator(this, function (_a) {
62
+ switch (_a.label) {
57
63
  case 0:
58
- indexes = [];
59
- for (_i = 0, _e = table.indexes; _i < _e.length; _i++) {
60
- _f = _e[_i], name_1 = _f.name, columns = _f.columns, unique = _f.unique;
61
- indexes.push({ name: name_1, columns: columns.map(function (x) { return table.columns[x].name; }), unique: unique });
64
+ statements = [];
65
+ for (_i = 0, tables_1 = tables; _i < tables_1.length; _i++) {
66
+ table = tables_1[_i];
67
+ statements.push.apply(statements, this.createTableStatements(table));
62
68
  }
63
- serializedColumns = [];
64
- foreignKeys = [];
65
- for (columnPropertyName in table.columns) {
66
- column = table.columns[columnPropertyName];
67
- columnType = new SpannerColumnTypeFactory_1.SpannerColumnTypeFactory().getType(column);
68
- serializedColumns.push({ name: column.name, type: columnType, nullable: (_a = column.options) === null || _a === void 0 ? void 0 : _a.nullable });
69
- this.logger.info({ message: "[".concat(table.name, "] Creating column: ").concat(column.name, " (").concat(column.constructor.name, ")") });
70
- if ((_c = (_b = column.options) === null || _b === void 0 ? void 0 : _b.unique) === null || _c === void 0 ? void 0 : _c.unique) {
71
- indexes.push({
72
- name: column.options.unique.indexName,
73
- columns: [table.columns[column.name].name],
74
- unique: true,
75
- });
76
- this.logger.info({ message: "[".concat(table.name, ".").concat(column.name, "] Adding unique constraint") });
77
- }
78
- if ((_d = column.options) === null || _d === void 0 ? void 0 : _d.references) {
79
- foreignKeys.push({ table: column.options.references.table, column: 'id', referencedByColumn: column.name });
80
- this.logger.info({
81
- message: "[".concat(table.name, ".").concat(column.name, "] Adding foreign key -> ").concat(column.options.references.table, ".id"),
82
- });
83
- }
69
+ if (statements.length === 0) {
70
+ return [2 /*return*/];
84
71
  }
85
- createTableSql = new db_1.StatementFactory().createTable(table.name, serializedColumns, 'id', foreignKeys).sql;
86
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(createTableSql)];
72
+ return [4 /*yield*/, this.spannerDriver.runUpdateSchema(statements)];
87
73
  case 1:
88
- _h.sent();
89
- _g = 0, indexes_1 = indexes;
90
- _h.label = 2;
91
- case 2:
92
- if (!(_g < indexes_1.length)) return [3 /*break*/, 5];
93
- index = indexes_1[_g];
94
- createIndexSql = new db_1.StatementFactory().createIndex(index, table.name).sql;
95
- indexName = db_1.StatementUtil.getIndexName(table.name, index);
96
- this.logger.info({
97
- message: "[".concat(table.name, "] Creating index: ").concat(indexName, " (").concat(index.columns.join(', '), ")"),
98
- });
99
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(createIndexSql)];
100
- case 3:
101
- _h.sent();
102
- this.logger.info({
103
- message: "[".concat(table.name, "] Created index: ").concat(indexName, " (").concat(index.columns.join(', '), ")"),
104
- });
105
- _h.label = 4;
106
- case 4:
107
- _g++;
108
- return [3 /*break*/, 2];
109
- case 5: return [2 /*return*/];
74
+ _a.sent();
75
+ return [2 /*return*/];
110
76
  }
111
77
  });
112
78
  });
@@ -114,9 +80,9 @@ var SpannerSchemaOperations = /** @class */ (function () {
114
80
  SpannerSchemaOperations.prototype.alterTable = function (table, tableChanges) {
115
81
  var _a, _b, _c, _d, _e, _f, _g;
116
82
  return __awaiter(this, void 0, void 0, function () {
117
- var alterParams, indexesToDrop, indexesToAdd, _i, _h, columnPropertyName, column, columnType, _j, _k, columnName, _l, _m, foreignKey, wideningStatements, _o, _p, columnTypeChange, wideningStatement, errorMessage, _q, _r, columnNullableChange, errorMessage, _s, _t, columnPropertyName, column, errorMessage, alterStatements, _u, alterStatements_1, alterStatement, _v, wideningStatements_1, wideningStatement, _w, _x, index, dropIndexSql, _y, _z, index, createIndexSql, indexName;
118
- return __generator(this, function (_0) {
119
- switch (_0.label) {
83
+ var alterParams, indexesToDrop, indexesToAdd, _i, _h, columnPropertyName, column, columnType, _j, _k, columnName, _l, _m, foreignKey, wideningStatements, _o, _p, columnTypeChange, wideningStatement, errorMessage, _q, _r, columnNullableChange, errorMessage, _s, _t, columnPropertyName, column, errorMessage, statements, _u, _v, index, _w, _x, index, indexName;
84
+ return __generator(this, function (_y) {
85
+ switch (_y.label) {
120
86
  case 0:
121
87
  alterParams = {
122
88
  tableName: table.name,
@@ -187,78 +153,76 @@ var SpannerSchemaOperations = /** @class */ (function () {
187
153
  this.logger.error({ message: errorMessage });
188
154
  throw new Error(errorMessage);
189
155
  }
190
- alterStatements = new db_1.StatementFactory().alterTable(alterParams);
191
- _u = 0, alterStatements_1 = alterStatements;
192
- _0.label = 1;
156
+ statements = new db_1.StatementFactory()
157
+ .alterTable(alterParams)
158
+ .map(function (alterStatement) { return alterStatement.sql; });
159
+ statements.push.apply(statements, wideningStatements);
160
+ for (_u = 0, _v = tableChanges.indexesToDrop; _u < _v.length; _u++) {
161
+ index = _v[_u];
162
+ this.logger.info({
163
+ message: "[".concat(table.name, "] Dropping index: ").concat(index.name, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
164
+ });
165
+ statements.push(new db_1.StatementFactory().dropIndex(index, table.name).sql);
166
+ }
167
+ for (_w = 0, _x = tableChanges.indexesToCreate; _w < _x.length; _w++) {
168
+ index = _x[_w];
169
+ indexName = db_1.StatementUtil.getIndexName(table.name, index);
170
+ this.logger.info({
171
+ message: "[".concat(table.name, "] Creating index: ").concat(indexName, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
172
+ });
173
+ statements.push(new db_1.StatementFactory().createIndex(index, table.name).sql);
174
+ }
175
+ if (statements.length === 0) {
176
+ return [2 /*return*/];
177
+ }
178
+ return [4 /*yield*/, this.spannerDriver.runUpdateSchema(statements)];
193
179
  case 1:
194
- if (!(_u < alterStatements_1.length)) return [3 /*break*/, 4];
195
- alterStatement = alterStatements_1[_u];
196
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(alterStatement.sql)];
197
- case 2:
198
- _0.sent();
199
- _0.label = 3;
200
- case 3:
201
- _u++;
202
- return [3 /*break*/, 1];
203
- case 4:
204
- _v = 0, wideningStatements_1 = wideningStatements;
205
- _0.label = 5;
206
- case 5:
207
- if (!(_v < wideningStatements_1.length)) return [3 /*break*/, 8];
208
- wideningStatement = wideningStatements_1[_v];
209
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(wideningStatement)];
210
- case 6:
211
- _0.sent();
212
- _0.label = 7;
213
- case 7:
214
- _v++;
215
- return [3 /*break*/, 5];
216
- case 8:
217
- _w = 0, _x = tableChanges.indexesToDrop;
218
- _0.label = 9;
219
- case 9:
220
- if (!(_w < _x.length)) return [3 /*break*/, 12];
221
- index = _x[_w];
222
- dropIndexSql = new db_1.StatementFactory().dropIndex(index, table.name).sql;
223
- this.logger.info({
224
- message: "[".concat(table.name, "] Dropping index: ").concat(index.name, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
225
- });
226
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(dropIndexSql)];
227
- case 10:
228
- _0.sent();
229
- this.logger.info({
230
- message: "[".concat(table.name, "] Dropped index: ").concat(index.name, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
231
- });
232
- _0.label = 11;
233
- case 11:
234
- _w++;
235
- return [3 /*break*/, 9];
236
- case 12:
237
- _y = 0, _z = tableChanges.indexesToCreate;
238
- _0.label = 13;
239
- case 13:
240
- if (!(_y < _z.length)) return [3 /*break*/, 16];
241
- index = _z[_y];
242
- createIndexSql = new db_1.StatementFactory().createIndex(index, table.name).sql;
243
- indexName = db_1.StatementUtil.getIndexName(table.name, index);
244
- this.logger.info({
245
- message: "[".concat(table.name, "] Creating index: ").concat(indexName, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
246
- });
247
- return [4 /*yield*/, this.spannerDriver.runUpdateSchema(createIndexSql)];
248
- case 14:
249
- _0.sent();
250
- this.logger.info({
251
- message: "[".concat(table.name, "] Created index: ").concat(indexName, " (").concat(typeof index.columns === 'string' ? index.columns : index.columns.join(', '), ")"),
252
- });
253
- _0.label = 15;
254
- case 15:
255
- _y++;
256
- return [3 /*break*/, 13];
257
- case 16: return [2 /*return*/];
180
+ _y.sent();
181
+ return [2 /*return*/];
258
182
  }
259
183
  });
260
184
  });
261
185
  };
186
+ SpannerSchemaOperations.prototype.createTableStatements = function (table) {
187
+ var _a, _b, _c, _d;
188
+ var indexes = [];
189
+ for (var _i = 0, _e = table.indexes; _i < _e.length; _i++) {
190
+ var _f = _e[_i], name_1 = _f.name, columns = _f.columns, unique = _f.unique;
191
+ indexes.push({ name: name_1, columns: columns.map(function (x) { return table.columns[x].name; }), unique: unique });
192
+ }
193
+ var serializedColumns = [];
194
+ var foreignKeys = [];
195
+ for (var columnPropertyName in table.columns) {
196
+ var column = table.columns[columnPropertyName];
197
+ var columnType = new SpannerColumnTypeFactory_1.SpannerColumnTypeFactory().getType(column);
198
+ serializedColumns.push({ name: column.name, type: columnType, nullable: (_a = column.options) === null || _a === void 0 ? void 0 : _a.nullable });
199
+ this.logger.info({ message: "[".concat(table.name, "] Creating column: ").concat(column.name, " (").concat(column.constructor.name, ")") });
200
+ if ((_c = (_b = column.options) === null || _b === void 0 ? void 0 : _b.unique) === null || _c === void 0 ? void 0 : _c.unique) {
201
+ indexes.push({
202
+ name: column.options.unique.indexName,
203
+ columns: [table.columns[column.name].name],
204
+ unique: true,
205
+ });
206
+ this.logger.info({ message: "[".concat(table.name, ".").concat(column.name, "] Adding unique constraint") });
207
+ }
208
+ if ((_d = column.options) === null || _d === void 0 ? void 0 : _d.references) {
209
+ foreignKeys.push({ table: column.options.references.table, column: 'id', referencedByColumn: column.name });
210
+ this.logger.info({
211
+ message: "[".concat(table.name, ".").concat(column.name, "] Adding foreign key -> ").concat(column.options.references.table, ".id"),
212
+ });
213
+ }
214
+ }
215
+ var statements = [new db_1.StatementFactory().createTable(table.name, serializedColumns, 'id', foreignKeys).sql];
216
+ for (var _g = 0, indexes_1 = indexes; _g < indexes_1.length; _g++) {
217
+ var index = indexes_1[_g];
218
+ var indexName = db_1.StatementUtil.getIndexName(table.name, index);
219
+ this.logger.info({
220
+ message: "[".concat(table.name, "] Creating index: ").concat(indexName, " (").concat(index.columns.join(', '), ")"),
221
+ });
222
+ statements.push(new db_1.StatementFactory().createIndex(index, table.name).sql);
223
+ }
224
+ return statements;
225
+ };
262
226
  /**
263
227
  * Spanner supports exactly one in-place column type change: widening a `STRING(n)` to a larger
264
228
  * `STRING(m)` or `STRING(MAX)`. Returns the `ALTER COLUMN` statement when `change` is such a