@quereus/sync 4.5.0 → 4.7.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/README.md +14 -6
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/metadata/column-version.d.ts.map +1 -1
- package/dist/src/metadata/column-version.js +8 -9
- package/dist/src/metadata/column-version.js.map +1 -1
- package/dist/src/metadata/keys.d.ts +99 -39
- package/dist/src/metadata/keys.d.ts.map +1 -1
- package/dist/src/metadata/keys.js +213 -158
- package/dist/src/metadata/keys.js.map +1 -1
- package/dist/src/metadata/pk-identity.d.ts +19 -14
- package/dist/src/metadata/pk-identity.d.ts.map +1 -1
- package/dist/src/metadata/pk-identity.js +21 -28
- package/dist/src/metadata/pk-identity.js.map +1 -1
- package/dist/src/metadata/schema-migration.d.ts +33 -10
- package/dist/src/metadata/schema-migration.d.ts.map +1 -1
- package/dist/src/metadata/schema-migration.js +77 -18
- package/dist/src/metadata/schema-migration.js.map +1 -1
- package/dist/src/sync/change-applicator.d.ts +19 -3
- package/dist/src/sync/change-applicator.d.ts.map +1 -1
- package/dist/src/sync/change-applicator.js +253 -63
- package/dist/src/sync/change-applicator.js.map +1 -1
- package/dist/src/sync/maintenance.d.ts +8 -5
- package/dist/src/sync/maintenance.d.ts.map +1 -1
- package/dist/src/sync/maintenance.js +7 -4
- package/dist/src/sync/maintenance.js.map +1 -1
- package/dist/src/sync/manager.d.ts +46 -1
- package/dist/src/sync/manager.d.ts.map +1 -1
- package/dist/src/sync/protocol.d.ts +42 -3
- package/dist/src/sync/protocol.d.ts.map +1 -1
- package/dist/src/sync/protocol.js +40 -0
- package/dist/src/sync/protocol.js.map +1 -1
- package/dist/src/sync/snapshot-identity.d.ts.map +1 -1
- package/dist/src/sync/snapshot-identity.js +1 -9
- package/dist/src/sync/snapshot-identity.js.map +1 -1
- package/dist/src/sync/snapshot-stream.d.ts +11 -0
- package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
- package/dist/src/sync/snapshot-stream.js +134 -67
- package/dist/src/sync/snapshot-stream.js.map +1 -1
- package/dist/src/sync/snapshot.d.ts.map +1 -1
- package/dist/src/sync/snapshot.js +15 -30
- package/dist/src/sync/snapshot.js.map +1 -1
- package/dist/src/sync/store-adapter.d.ts +5 -4
- package/dist/src/sync/store-adapter.d.ts.map +1 -1
- package/dist/src/sync/store-adapter.js +328 -108
- package/dist/src/sync/store-adapter.js.map +1 -1
- package/dist/src/sync/sync-manager-impl.d.ts +37 -4
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
- package/dist/src/sync/sync-manager-impl.js +110 -56
- package/dist/src/sync/sync-manager-impl.js.map +1 -1
- package/dist/src/sync/wire.d.ts +6 -0
- package/dist/src/sync/wire.d.ts.map +1 -1
- package/dist/src/sync/wire.js +3 -0
- package/dist/src/sync/wire.js.map +1 -1
- package/package.json +7 -7
|
@@ -17,10 +17,11 @@
|
|
|
17
17
|
* receiver failing "already exists" on every sync (see
|
|
18
18
|
* {@link decideSchemaChange}).
|
|
19
19
|
* 2. Data changes are grouped per table, then per row; each row group
|
|
20
|
-
* collapses to ONE `ExternalRowOp` — the group's NET effect in
|
|
21
|
-
* order (a delete resets the row to
|
|
22
|
-
* rebuild it from PK+nulls; updates with no
|
|
23
|
-
* pre-read existing row — UPSERT semantics; see
|
|
20
|
+
* collapses to ONE `ExternalRowOp` — the group's NET effect in list
|
|
21
|
+
* order, which the caller delivers HLC-ordered (a delete resets the row to
|
|
22
|
+
* absent and later column updates rebuild it from PK+nulls; updates with no
|
|
23
|
+
* later delete merge onto the pre-read existing row — UPSERT semantics; see
|
|
24
|
+
* {@link buildRowOp}).
|
|
24
25
|
* 3. `StoreTable.applyExternalRowChanges(ops)` applies the table's ops to
|
|
25
26
|
* committed storage and returns the EFFECTIVE changes (no-ops — absent
|
|
26
27
|
* delete, value-identical upsert — are suppressed: no storage write, no
|
|
@@ -104,7 +105,7 @@
|
|
|
104
105
|
* MV/capture state from the already-committed storage rows; recoverable via
|
|
105
106
|
* MV refresh).
|
|
106
107
|
*/
|
|
107
|
-
import { compareSqlValues, generateIndexDDL, generateTableDDL } from '@quereus/quereus';
|
|
108
|
+
import { compareSqlValues, expressionToString, generateIndexDDL, generateTableDDL, inferType, namedConstraintExists, Parser } from '@quereus/quereus';
|
|
108
109
|
import { makePkIdentityEncoder } from '../metadata/pk-identity.js';
|
|
109
110
|
import { toError } from './sync-context.js';
|
|
110
111
|
/**
|
|
@@ -311,31 +312,6 @@ function normalizeDDL(ddl) {
|
|
|
311
312
|
// trim again — collapsing first would leave the `;`-adjacent space behind.
|
|
312
313
|
return ddl.replace(/;\s*$/, '').replace(/\s+/g, ' ').trim().toLowerCase();
|
|
313
314
|
}
|
|
314
|
-
/**
|
|
315
|
-
* Locate the table owning `indexName` in `schemaName`, case-insensitively.
|
|
316
|
-
*
|
|
317
|
-
* There is no direct index accessor on the schema manager, so this mirrors the
|
|
318
|
-
* owner scan `SchemaManager.dropIndex` performs.
|
|
319
|
-
*
|
|
320
|
-
* NOTE: first-match is unambiguous only because `SchemaManager.createIndex`
|
|
321
|
-
* rejects an index name already taken by a user index elsewhere in the same
|
|
322
|
-
* schema. A replicated `drop index "main"."idx"` carries no table name (the
|
|
323
|
-
* DROP INDEX grammar has no slot for one), so without that invariant each
|
|
324
|
-
* receiver would resolve the owner by its own table-registration order and two
|
|
325
|
-
* devices could drop different indexes while both believing they converged.
|
|
326
|
-
*/
|
|
327
|
-
function findIndexOwner(db, schemaName, indexName) {
|
|
328
|
-
const schema = db.schemaManager.getSchema(schemaName);
|
|
329
|
-
if (!schema)
|
|
330
|
-
return undefined;
|
|
331
|
-
const lowerIndexName = indexName.toLowerCase();
|
|
332
|
-
for (const table of schema.getAllTables()) {
|
|
333
|
-
const index = table.indexes?.find(idx => idx.name.toLowerCase() === lowerIndexName);
|
|
334
|
-
if (index)
|
|
335
|
-
return { table, index };
|
|
336
|
-
}
|
|
337
|
-
return undefined;
|
|
338
|
-
}
|
|
339
315
|
/**
|
|
340
316
|
* The object named by the migration already exists locally: converge silently if
|
|
341
317
|
* its definition matches the replicated one, otherwise throw a conflict naming
|
|
@@ -398,62 +374,309 @@ function decideSchemaChange(db, change) {
|
|
|
398
374
|
}
|
|
399
375
|
case 'drop_table':
|
|
400
376
|
return db.schemaManager.getTable(change.schema, change.table) ? 'execute' : 'already-applied';
|
|
377
|
+
case 'rename_table':
|
|
378
|
+
return decideRenameTable(db, change);
|
|
401
379
|
case 'add_index': {
|
|
402
380
|
// For an index migration `change.table` holds the INDEX name, not the
|
|
403
381
|
// table name (see `mapSchemaMigrationType` / `recordSchemaMigration`).
|
|
404
|
-
|
|
382
|
+
// `findIndexOwner` is the engine's own by-name owner resolver — the same one
|
|
383
|
+
// `DROP INDEX` uses, at the same default scope — so the receiver's verdict
|
|
384
|
+
// here can never disagree with what the replicated DDL would then resolve to.
|
|
385
|
+
const owner = db.schemaManager.findIndexOwner(change.schema, change.table);
|
|
405
386
|
if (!owner)
|
|
406
387
|
return 'execute';
|
|
407
388
|
assertDefinitionMatches(change, generateIndexDDL(owner.index, owner.table));
|
|
408
389
|
return 'already-applied';
|
|
409
390
|
}
|
|
410
391
|
case 'drop_index':
|
|
411
|
-
|
|
392
|
+
// No owner in the default scope ⇒ nothing a `DROP INDEX` could remove, so
|
|
393
|
+
// converge silently rather than exec a statement that would throw
|
|
394
|
+
// `no such index` and abort the admission unit.
|
|
395
|
+
return db.schemaManager.findIndexOwner(change.schema, change.table) ? 'execute' : 'already-applied';
|
|
396
|
+
case 'alter_column':
|
|
397
|
+
// A table alteration (the coarse "table definition changed" migration the
|
|
398
|
+
// origin records for every ALTER TABLE form). Parse the statement and decide
|
|
399
|
+
// per alteration arm whether the local table is already in the wanted state.
|
|
400
|
+
return decideAlterTable(db, change);
|
|
412
401
|
default:
|
|
413
|
-
//
|
|
414
|
-
//
|
|
402
|
+
// add_column / drop_column are legacy wire types no current origin records
|
|
403
|
+
// (mapSchemaMigrationType folds every table alter into alter_column); run
|
|
404
|
+
// them as before.
|
|
415
405
|
return 'execute';
|
|
416
406
|
}
|
|
417
407
|
}
|
|
418
408
|
/**
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
*
|
|
409
|
+
* Idempotency / conflict decision for a replicated `rename_table` migration,
|
|
410
|
+
* read from the local catalog for BOTH names:
|
|
411
|
+
*
|
|
412
|
+
* | old present | new present | verdict |
|
|
413
|
+
* |---|---|---|
|
|
414
|
+
* | yes | no | execute |
|
|
415
|
+
* | no | yes | already-applied — the rename already happened here |
|
|
416
|
+
* | yes | yes | THROW a conflict naming both tables (see below) |
|
|
417
|
+
* | no | no | converge with a warning — nothing to rename (drop won) |
|
|
422
418
|
*
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
*
|
|
426
|
-
*
|
|
427
|
-
*
|
|
428
|
-
*
|
|
419
|
+
* A missing `fromTable` (a peer that omitted it) makes the migration
|
|
420
|
+
* undecidable: converge with a warning rather than exec a statement whose
|
|
421
|
+
* outcome we cannot predict.
|
|
422
|
+
*
|
|
423
|
+
* The yes/yes row throws rather than picking a side: renaming would collide
|
|
424
|
+
* with a table that already exists, and silently keeping either shape would
|
|
425
|
+
* record "converged" for a divergence that is not — the same posture as a
|
|
426
|
+
* divergent `create_table` (see {@link assertDefinitionMatches}'s NOTE).
|
|
427
|
+
*
|
|
428
|
+
* NOTE: sync's per-row bookkeeping (`cv:`/`tb:`/`cl:`) is keyed by table name,
|
|
429
|
+
* so both origin and receiver strand it at the old name and start empty at the
|
|
430
|
+
* new one — later conflict resolution and tombstone blocking lose their history
|
|
431
|
+
* for the renamed table (an old delete no longer blocks a replayed insert).
|
|
432
|
+
* Pre-existing for a purely local rename; replicating the rename makes it
|
|
433
|
+
* happen on every peer. Tracked as
|
|
434
|
+
* `bug-sync-rename-and-pk-change-strand-crdt-metadata` (tickets/backlog).
|
|
429
435
|
*/
|
|
430
|
-
function
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
436
|
+
function decideRenameTable(db, change) {
|
|
437
|
+
if (change.fromTable === undefined) {
|
|
438
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} carries no old table name — `
|
|
439
|
+
+ `undecidable; converging without applying: ${change.ddl}`);
|
|
440
|
+
return 'already-applied';
|
|
441
|
+
}
|
|
442
|
+
const oldPresent = db.schemaManager.getTable(change.schema, change.fromTable) !== undefined;
|
|
443
|
+
const newPresent = db.schemaManager.getTable(change.schema, change.table) !== undefined;
|
|
444
|
+
if (oldPresent && newPresent) {
|
|
445
|
+
throw new Error(`Schema conflict applying remote ${change.type} for ${change.schema}.${change.fromTable}: ` +
|
|
446
|
+
`renaming to ${change.schema}.${change.table} would collide with a table that already exists locally.\n` +
|
|
447
|
+
` remote: ${change.ddl}`);
|
|
448
|
+
}
|
|
449
|
+
if (oldPresent)
|
|
450
|
+
return 'execute';
|
|
451
|
+
if (newPresent)
|
|
452
|
+
return 'already-applied';
|
|
453
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither `
|
|
454
|
+
+ `'${change.fromTable}' nor '${change.table}' exists locally — converging without applying: ${change.ddl}`);
|
|
455
|
+
return 'already-applied';
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Idempotency decision for a replicated `alter_column` migration. The migration
|
|
459
|
+
* carries only the statement text, so parse it with the engine's own parser and
|
|
460
|
+
* compare the parsed alteration against the local {@link TableSchema}.
|
|
461
|
+
*
|
|
462
|
+
* Two peers offline can each run `alter table orders add column sku text`;
|
|
463
|
+
* whichever migration wins the HLC comparison is then delivered to a peer that
|
|
464
|
+
* already has `sku`. Re-executing the raw DDL there throws, aborting the whole
|
|
465
|
+
* admission unit before its CRDT metadata commits — the same permanent re-fail
|
|
466
|
+
* loop `create_table` idempotency exists to prevent.
|
|
467
|
+
*/
|
|
468
|
+
function decideAlterTable(db, change) {
|
|
469
|
+
let stmt;
|
|
470
|
+
try {
|
|
471
|
+
const parsed = new Parser().parse(change.ddl);
|
|
472
|
+
if (parsed.type !== 'alterTable')
|
|
473
|
+
return 'execute';
|
|
474
|
+
stmt = parsed;
|
|
475
|
+
}
|
|
476
|
+
catch (e) {
|
|
477
|
+
// A parse failure must not be swallowed into a skip: execute the DDL so the
|
|
478
|
+
// underlying engine error is what the operator sees, not a parser message.
|
|
479
|
+
console.error(`[Sync] Could not parse replicated ${change.type} DDL for ${change.schema}.${change.table} — executing as-is:`, e);
|
|
480
|
+
return 'execute';
|
|
481
|
+
}
|
|
482
|
+
// NOTE: the decision reads the migration's `(schema, table)` envelope, never
|
|
483
|
+
// `stmt.table` — the origin filed the envelope from the same event that carried
|
|
484
|
+
// this text, so the two agree for anything the pipeline produces. A hand-crafted
|
|
485
|
+
// migration whose DDL names a different table would be decided against the wrong
|
|
486
|
+
// local table; if migrations ever arrive from outside the capture path, compare
|
|
487
|
+
// the two here first.
|
|
488
|
+
const action = stmt.action;
|
|
489
|
+
// The tag/maintained arms have no idempotency arm — execute as before. A
|
|
490
|
+
// renameTable action under `alter_column` can only come from a peer on an older
|
|
491
|
+
// build (a current origin records it as `rename_table`, decided by
|
|
492
|
+
// decideRenameTable above); execute it as those builds always did.
|
|
493
|
+
if (action.type === 'renameTable' || action.type === 'setTags' || action.type === 'dropTags'
|
|
494
|
+
|| action.type === 'setMaintained' || action.type === 'dropMaintained') {
|
|
495
|
+
return 'execute';
|
|
496
|
+
}
|
|
497
|
+
const local = db.schemaManager.getTable(change.schema, change.table);
|
|
498
|
+
if (!local) {
|
|
499
|
+
// Nothing to alter: the receiver dropped the table (drop is the more
|
|
500
|
+
// destructive migration and wins). Converge with a warning rather than exec a
|
|
501
|
+
// statement that would throw `no such table` and abort the admission unit —
|
|
502
|
+
// consistent with drop_index's absent-owner arm.
|
|
503
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} names a table this peer does not have — `
|
|
504
|
+
+ `converging without applying: ${change.ddl}`);
|
|
505
|
+
return 'already-applied';
|
|
506
|
+
}
|
|
507
|
+
switch (action.type) {
|
|
508
|
+
case 'addColumn':
|
|
509
|
+
return decideAddColumn(local, action.column, change);
|
|
510
|
+
case 'dropColumn':
|
|
511
|
+
return localColumn(local, action.name) ? 'execute' : 'already-applied';
|
|
512
|
+
case 'renameColumn': {
|
|
513
|
+
// Old name still present ⇒ the rename has not happened here (if the new name
|
|
514
|
+
// ALSO exists the exec surfaces the engine's own duplicate-name error — a
|
|
515
|
+
// genuine divergence, not one to paper over).
|
|
516
|
+
if (localColumn(local, action.oldName))
|
|
517
|
+
return 'execute';
|
|
518
|
+
if (localColumn(local, action.newName))
|
|
519
|
+
return 'already-applied';
|
|
520
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither column `
|
|
521
|
+
+ `'${action.oldName}' nor '${action.newName}' exists locally — converging without applying`);
|
|
522
|
+
return 'already-applied';
|
|
523
|
+
}
|
|
524
|
+
case 'addConstraint': {
|
|
525
|
+
const constraint = action.constraint;
|
|
526
|
+
// Named: presence of the name is the whole check — see the NOTE on
|
|
527
|
+
// decideAddColumn for why no definition comparison is attempted.
|
|
528
|
+
if (constraint.name) {
|
|
529
|
+
return namedConstraintExists(local, constraint.name) ? 'already-applied' : 'execute';
|
|
530
|
+
}
|
|
531
|
+
// Unnamed UNIQUE: an equivalent UNIQUE over the same column set converges.
|
|
532
|
+
if (constraint.type === 'unique' && constraint.columns) {
|
|
533
|
+
return equivalentUniqueExists(local, constraint.columns.map(c => c.name)) ? 'already-applied' : 'execute';
|
|
534
|
+
}
|
|
535
|
+
// Unnamed CHECK (or other forms): no identity to compare against — execute.
|
|
536
|
+
// NOTE: two peers that concurrently add the SAME unnamed CHECK therefore end
|
|
537
|
+
// up enforcing it twice (the engine auto-names each install separately), which
|
|
538
|
+
// is semantically harmless — same predicate, evaluated twice. If the duplicate
|
|
539
|
+
// ever matters (per-row cost, or a confusing `table_info`), the identity to
|
|
540
|
+
// compare on is the rendered predicate expression, not the constraint name.
|
|
541
|
+
return 'execute';
|
|
542
|
+
}
|
|
543
|
+
case 'dropConstraint':
|
|
544
|
+
return namedConstraintExists(local, action.name) ? 'execute' : 'already-applied';
|
|
545
|
+
case 'renameConstraint': {
|
|
546
|
+
if (namedConstraintExists(local, action.oldName))
|
|
547
|
+
return 'execute';
|
|
548
|
+
if (namedConstraintExists(local, action.newName))
|
|
549
|
+
return 'already-applied';
|
|
550
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: neither constraint `
|
|
551
|
+
+ `'${action.oldName}' nor '${action.newName}' exists locally — converging without applying`);
|
|
552
|
+
return 'already-applied';
|
|
553
|
+
}
|
|
554
|
+
case 'alterColumn': {
|
|
555
|
+
const col = localColumn(local, action.columnName);
|
|
556
|
+
if (!col) {
|
|
557
|
+
// Most-destructive-wins (docs/sync-schema.md § Conflict Resolution): a
|
|
558
|
+
// concurrent local DROP COLUMN beats the alteration, so converge.
|
|
559
|
+
console.warn(`[Sync] Remote ${change.type} for ${change.schema}.${change.table}: column `
|
|
560
|
+
+ `'${action.columnName}' does not exist locally — converging without applying: ${change.ddl}`);
|
|
561
|
+
return 'already-applied';
|
|
562
|
+
}
|
|
563
|
+
if (action.setDataType !== undefined) {
|
|
564
|
+
return inferType(action.setDataType).name === col.logicalType.name ? 'already-applied' : 'execute';
|
|
565
|
+
}
|
|
566
|
+
if (action.setNotNull !== undefined) {
|
|
567
|
+
// A `set not null` executes against the rows this peer currently holds, and
|
|
568
|
+
// schema changes are applied ahead of the same batch's data facts — so the
|
|
569
|
+
// very batch that fills the NULLs fails its own DDL and only succeeds on the
|
|
570
|
+
// next sync round. Whole class (tightening DDL vs. the data that satisfies
|
|
571
|
+
// it); tracked as `bug-sync-tightening-ddl-applied-before-its-data`.
|
|
572
|
+
return col.notNull === action.setNotNull ? 'already-applied' : 'execute';
|
|
573
|
+
}
|
|
574
|
+
if (action.setDefault !== undefined) {
|
|
575
|
+
if (action.setDefault === null) {
|
|
576
|
+
return col.defaultValue === null ? 'already-applied' : 'execute';
|
|
577
|
+
}
|
|
578
|
+
return col.defaultValue !== null
|
|
579
|
+
&& expressionToString(col.defaultValue) === expressionToString(action.setDefault)
|
|
580
|
+
? 'already-applied' : 'execute';
|
|
581
|
+
}
|
|
582
|
+
if (action.setCollation !== undefined) {
|
|
583
|
+
return col.collation.toLowerCase() === action.setCollation.toLowerCase() ? 'already-applied' : 'execute';
|
|
584
|
+
}
|
|
585
|
+
return 'execute';
|
|
586
|
+
}
|
|
587
|
+
case 'alterPrimaryKey': {
|
|
588
|
+
// NOTE: replicating a PK change re-keys the table on EVERY peer, and sync's
|
|
589
|
+
// cv:/tb:/cl: metadata is filed under the row's old pk identity — so conflict
|
|
590
|
+
// resolution for existing rows silently restarts from empty. Pre-existing for
|
|
591
|
+
// a local PK change; tracked as
|
|
592
|
+
// `bug-sync-rename-and-pk-change-strand-crdt-metadata` (tickets/backlog).
|
|
593
|
+
const wanted = action.columns;
|
|
594
|
+
const current = local.primaryKeyDefinition;
|
|
595
|
+
const same = wanted.length === current.length && wanted.every((w, i) => {
|
|
596
|
+
const def = current[i];
|
|
597
|
+
const col = local.columns[def.index];
|
|
598
|
+
return col.name.toLowerCase() === w.name.toLowerCase()
|
|
599
|
+
&& (def.desc === true) === (w.direction === 'desc');
|
|
600
|
+
});
|
|
601
|
+
return same ? 'already-applied' : 'execute';
|
|
602
|
+
}
|
|
603
|
+
default:
|
|
604
|
+
return 'execute';
|
|
442
605
|
}
|
|
443
606
|
}
|
|
607
|
+
/** Position of the local column named `name`, or undefined. */
|
|
608
|
+
function localColumnIndex(table, name) {
|
|
609
|
+
return table.columnIndexMap.get(name.toLowerCase());
|
|
610
|
+
}
|
|
611
|
+
/** The local column named `name`, or undefined. */
|
|
612
|
+
function localColumn(table, name) {
|
|
613
|
+
const idx = localColumnIndex(table, name);
|
|
614
|
+
return idx === undefined ? undefined : table.columns[idx];
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* ADD COLUMN idempotency: absent ⇒ execute; present with the same LOGICAL TYPE ⇒
|
|
618
|
+
* converged; present with a different type ⇒ conflict.
|
|
619
|
+
*
|
|
620
|
+
* NOTE: only the logical type is compared, deliberately. A type difference is the
|
|
621
|
+
* dangerous divergence — two peers would interpret the same rows under different
|
|
622
|
+
* shapes, exactly what the create_table arm refuses to paper over. Anything
|
|
623
|
+
* richer would compare an AST column definition (rendered from the origin's
|
|
624
|
+
* statement) against a ColumnSchema (rendered from the receiver's catalog), and
|
|
625
|
+
* those do not round-trip: an unnamed inline CHECK is auto-named `_check_<col>`
|
|
626
|
+
* on the way into the catalog, session `default_column_nullability` decides
|
|
627
|
+
* whether `not null` is even spelled, and so on. A false conflict permanently
|
|
628
|
+
* blocks the peer — strictly worse than converging on a constraint-level
|
|
629
|
+
* difference. So constraint-level drift between two same-named, same-typed
|
|
630
|
+
* columns converges silently; if that ever bites, the fix is to compare parsed
|
|
631
|
+
* schemas, not rendered text.
|
|
632
|
+
*/
|
|
633
|
+
function decideAddColumn(local, column, change) {
|
|
634
|
+
const existing = localColumn(local, column.name);
|
|
635
|
+
if (!existing)
|
|
636
|
+
return 'execute';
|
|
637
|
+
const wanted = inferType(column.dataType);
|
|
638
|
+
if (wanted.name === existing.logicalType.name)
|
|
639
|
+
return 'already-applied';
|
|
640
|
+
throw new Error(`Schema conflict applying remote ${change.type} for ${change.schema}.${change.table}: ` +
|
|
641
|
+
`column '${column.name}' already exists with type ${existing.logicalType.name}, ` +
|
|
642
|
+
`but the remote alteration adds it as ${wanted.name}.\n` +
|
|
643
|
+
` remote: ${change.ddl}`);
|
|
644
|
+
}
|
|
645
|
+
/**
|
|
646
|
+
* True when the table already has a UNIQUE constraint over exactly this column
|
|
647
|
+
* set (order-insensitive — `unique (a, b)` and `unique (b, a)` enforce the same
|
|
648
|
+
* predicate). A column name the local table lacks ⇒ false, and the exec surfaces
|
|
649
|
+
* the engine's own error.
|
|
650
|
+
*
|
|
651
|
+
* PARTIAL constraints do not count. A table-level `unique (a)` is unconditional,
|
|
652
|
+
* while a `predicate`-carrying constraint (only ever synthesized from a
|
|
653
|
+
* `create unique index … where …`) enforces over a subset of the rows — treating
|
|
654
|
+
* it as equivalent would converge the peer onto WEAKER enforcement than the
|
|
655
|
+
* alteration asked for, and duplicate-but-outside-the-predicate rows would then
|
|
656
|
+
* replicate here and be rejected on the origin.
|
|
657
|
+
*/
|
|
658
|
+
function equivalentUniqueExists(table, columnNames) {
|
|
659
|
+
const wanted = [];
|
|
660
|
+
for (const name of columnNames) {
|
|
661
|
+
const idx = localColumnIndex(table, name);
|
|
662
|
+
if (idx === undefined)
|
|
663
|
+
return false;
|
|
664
|
+
wanted.push(idx);
|
|
665
|
+
}
|
|
666
|
+
const wantedKey = sortedIndexKey(wanted);
|
|
667
|
+
return (table.uniqueConstraints ?? []).some(uc => uc.predicate === undefined && sortedIndexKey(uc.columns) === wantedKey);
|
|
668
|
+
}
|
|
669
|
+
/** Order-insensitive identity of a column-index set. */
|
|
670
|
+
function sortedIndexKey(columns) {
|
|
671
|
+
return [...columns].sort((a, b) => a - b).join(',');
|
|
672
|
+
}
|
|
444
673
|
/**
|
|
445
674
|
* Apply one schema change (DDL) to the database, idempotently.
|
|
446
675
|
*/
|
|
447
676
|
async function applySchemaChange(db, events, change, _options) {
|
|
448
|
-
// A blank `ddl` still
|
|
449
|
-
//
|
|
450
|
-
//
|
|
451
|
-
// drop/index migrations. Such a migration runs nothing, so it also EMITS
|
|
452
|
-
// nothing — registering a remote-event expectation for it would leave that
|
|
453
|
-
// expectation pending forever (the emitter refcounts expectations and never
|
|
454
|
-
// expires them), and the next genuine LOCAL DDL of the same signature would be
|
|
455
|
-
// consumed by it, marked remote, and dropped from the SyncManager's local-fact
|
|
456
|
-
// capture — silently never replicated.
|
|
677
|
+
// A blank `ddl` can still reach here from a peer on an older build (blank
|
|
678
|
+
// drop/index/alter migrations). Such a migration runs nothing; skip it before
|
|
679
|
+
// deciding anything (an empty string is not a parseable statement).
|
|
457
680
|
if (change.ddl.trim() === '') {
|
|
458
681
|
// Deliberately NOT scoped to `alter_column`, unlike the origin-side warning in
|
|
459
682
|
// `recordSchemaMigration` (sync-manager-impl.ts): a peer on an older build can
|
|
@@ -468,60 +691,51 @@ async function applySchemaChange(db, events, change, _options) {
|
|
|
468
691
|
+ `not applied; this peer's schema is unchanged`);
|
|
469
692
|
return;
|
|
470
693
|
}
|
|
471
|
-
// Decide BEFORE registering the remote-event expectation, for the same reason:
|
|
472
|
-
// an expectation for DDL that is then not executed would linger and mis-mark a
|
|
473
|
-
// later genuine LOCAL DDL of the same signature as remote.
|
|
474
694
|
if (decideSchemaChange(db, change) === 'already-applied') {
|
|
475
695
|
console.debug(`[Sync] Remote ${change.type} for ${change.schema}.${change.table} already applied locally — converging without re-executing DDL`);
|
|
476
696
|
return;
|
|
477
697
|
}
|
|
478
|
-
|
|
479
|
-
//
|
|
480
|
-
//
|
|
481
|
-
//
|
|
482
|
-
//
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
698
|
+
// Mark every schema event the replicated DDL emits as remote, so the
|
|
699
|
+
// SyncManager doesn't re-record it as a local change and broadcast it back
|
|
700
|
+
// out. The scope covers zero, one, or several events, and the `finally`
|
|
701
|
+
// releases it whether the exec succeeds or throws — so a statement that emits
|
|
702
|
+
// nothing leaves no residue to swallow the next genuine local DDL. (See
|
|
703
|
+
// `StoreEventEmitter.beginRemoteSchemaScope` for the concurrency tradeoff.)
|
|
704
|
+
//
|
|
705
|
+
// A rename_table scopes BOTH names: the store module's renameTable announces
|
|
706
|
+
// under the NEW name (`change.table`), but scoping the old one too costs
|
|
707
|
+
// nothing and protects against a module that announces under the pre-rename
|
|
708
|
+
// name.
|
|
709
|
+
const scopeNames = change.type === 'rename_table' && change.fromTable !== undefined
|
|
710
|
+
? [change.table, change.fromTable]
|
|
711
|
+
: [change.table];
|
|
712
|
+
for (const name of scopeNames)
|
|
713
|
+
events.beginRemoteSchemaScope(change.schema, name);
|
|
489
714
|
try {
|
|
490
|
-
// Execute the DDL statement
|
|
491
|
-
// The module will emit a schema event, which will be marked as remote
|
|
492
715
|
await db.exec(change.ddl);
|
|
493
716
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
type: eventType,
|
|
498
|
-
objectType,
|
|
499
|
-
schemaName: change.schema,
|
|
500
|
-
objectName: change.table,
|
|
501
|
-
});
|
|
502
|
-
throw e;
|
|
717
|
+
finally {
|
|
718
|
+
for (const name of scopeNames)
|
|
719
|
+
events.endRemoteSchemaScope(change.schema, name);
|
|
503
720
|
}
|
|
504
|
-
// Note: We don't emit a separate event here anymore.
|
|
505
|
-
// The module's event is automatically marked as remote.
|
|
506
721
|
}
|
|
507
722
|
/**
|
|
508
723
|
* Collapse one row group's changes into a single ExternalRowOp — the group's NET
|
|
509
|
-
* effect in
|
|
510
|
-
*
|
|
511
|
-
*
|
|
512
|
-
*
|
|
513
|
-
*
|
|
514
|
-
*
|
|
515
|
-
*
|
|
724
|
+
* effect in list order. A delete resets the row to absent: column updates BEFORE
|
|
725
|
+
* it are discarded (the delete already erased their effect) and updates AFTER it
|
|
726
|
+
* rebuild the row from a PK+nulls base — the same state the changes would leave
|
|
727
|
+
* applied one at a time (a re-creation after a same-batch delete must not
|
|
728
|
+
* resurrect the pre-delete image of columns it does not set). A group whose net
|
|
729
|
+
* effect is the delete collapses to a delete op; updates with no later delete
|
|
730
|
+
* merge onto the pre-read existing row (UPSERT semantics).
|
|
516
731
|
*
|
|
517
|
-
*
|
|
518
|
-
* `
|
|
519
|
-
*
|
|
520
|
-
*
|
|
521
|
-
*
|
|
522
|
-
*
|
|
523
|
-
*
|
|
524
|
-
* `bug-sync-apply-order-splits-data-from-metadata`.
|
|
732
|
+
* "Net effect in order" is only correct on an HLC-ORDERED list, and
|
|
733
|
+
* `DataChangeToApply` carries no HLC for this function to re-sort by. The CALLER
|
|
734
|
+
* establishes that order: `change-applicator.ts`'s `orderDataChangesByHLC` sorts the
|
|
735
|
+
* reconciled batch by HLC — in the one place that still holds the HLCs — before
|
|
736
|
+
* handing it to `applyToStore`, so this collapse decides the same question by the
|
|
737
|
+
* same rule as resolution and the in-batch delete reconciliation, whatever order the
|
|
738
|
+
* batch arrived in. Anything else driving this callback owes it the same ordering.
|
|
525
739
|
*/
|
|
526
740
|
async function buildRowOp(table, changes) {
|
|
527
741
|
const { pk } = changes[0];
|
|
@@ -572,8 +786,14 @@ async function mergeColumnUpdates(table, pk, changes, rowDeletedInGroup = false)
|
|
|
572
786
|
columnsApplied++;
|
|
573
787
|
}
|
|
574
788
|
else {
|
|
575
|
-
//
|
|
576
|
-
|
|
789
|
+
// Now that DROP COLUMN and RENAME COLUMN replicate, the ordinary cause is a
|
|
790
|
+
// change-log fact recorded before the alteration reached this peer — the value
|
|
791
|
+
// is correctly discarded. A name that is neither dropped nor renamed still
|
|
792
|
+
// indicates a genuine source/destination mismatch, so this stays a warning.
|
|
793
|
+
// NOTE: one line per unknown column per change. If a wide table's drop ever
|
|
794
|
+
// makes this drown the log, aggregate per (table, column) instead of demoting.
|
|
795
|
+
console.warn(`[Sync] Column '${colName}' not found in ${tableSchema.schemaName}.${tableSchema.name} — ` +
|
|
796
|
+
`discarding its value (expected if a replicated ALTER TABLE dropped or renamed it). ` +
|
|
577
797
|
`Available columns: ${[...tableSchema.columnIndexMap.keys()].join(', ')}`);
|
|
578
798
|
}
|
|
579
799
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-adapter.js","sourceRoot":"","sources":["../../../src/sync/store-adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store-adapter.js","sourceRoot":"","sources":["../../../src/sync/store-adapter.ts"],"names":[],"mappings":"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"}
|