@quereus/isolation 4.4.1 → 4.6.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.
@@ -1,6 +1,7 @@
1
- import type { Database, VirtualTableModule, BaseModuleConfig, TableSchema, TableIndexSchema as IndexSchema, ModuleCapabilities, VirtualTable, BestAccessPlanRequest, BestAccessPlanResult, SchemaChangeInfo, Schema, MappingAdvertisement, LensDeploymentSnapshot, VtabConcurrencyMode, VirtualTableConnection, BackingHost, EffectiveRowSource, CatalogObjectKind, ViewSchema } from '@quereus/quereus';
2
- import type { IsolationModuleConfig } from './isolation-types.js';
1
+ import type { Database, VirtualTableModule, BaseModuleConfig, TableSchema, TableIndexSchema as IndexSchema, ModuleCapabilities, BestAccessPlanRequest, BestAccessPlanResult, SchemaChangeInfo, Schema, MappingAdvertisement, LensDeploymentSnapshot, VtabConcurrencyMode, VirtualTableConnection, BackingHost, EffectiveRowSource, CatalogObjectKind, ViewSchema } from '@quereus/quereus';
2
+ import type { ConnectionOverlayState, IsolationModuleConfig, Predicate, UnderlyingTableState } from './isolation-types.js';
3
3
  import { IsolatedTable } from './isolated-table.js';
4
+ import type { AlterMigrationHost } from './alter-migration.js';
4
5
  /**
5
6
  * Generates a unique overlay ID for each overlay table instance.
6
7
  * Used to avoid name conflicts when multiple overlays exist.
@@ -21,44 +22,6 @@ export declare function weakerMode(a: VtabConcurrencyMode, b: VtabConcurrencyMod
21
22
  * invariant is enforced.
22
23
  */
23
24
  export declare function clampToReentrantReads(mode: VtabConcurrencyMode): VtabConcurrencyMode;
24
- /**
25
- * Per-table state tracking the underlying table (shared across all connections).
26
- */
27
- export interface UnderlyingTableState {
28
- underlyingTable: VirtualTable;
29
- }
30
- /**
31
- * Per-connection overlay state for a specific table.
32
- * Each connection gets its own overlay that persists across IsolatedTable instances.
33
- */
34
- export interface ConnectionOverlayState {
35
- overlayTable: VirtualTable;
36
- hasChanges: boolean;
37
- /**
38
- * The `Database` this overlay was created against — carried so
39
- * {@link IsolationModule.releaseOverlayTable} can free the overlay's staging
40
- * table on ANY discard path, including {@link IsolationModule.destroy} and
41
- * {@link IsolationModule.closeAll}, which sweep overlays across multiple db ids
42
- * and so have no single ambient `db` to hand the overlay module's `destroy`.
43
- * Set at every real creation site (`ensureOverlay`, and the ALTER PRIMARY KEY
44
- * clean-overlay swap in `replaceOverlayForPrimaryKeyChange`); the default
45
- * `MemoryTableModule` overlay ignores it, but a host-injected `config.overlay`
46
- * keyed per-db needs the overlay's OWN db, not the sweeper's.
47
- */
48
- db: Database;
49
- /**
50
- * Set by a cross-connection DDL that left this (foreign) overlay unflushable:
51
- * an ALTER that could not migrate it to the post-alter column layout (the overlay
52
- * still holds PRE-alter rows, structurally inconsistent with the now-committed
53
- * schema), or a DROP TABLE that removed the table it stages rows for. Either way
54
- * any data op that would merge or flush it must throw this message. Undefined =
55
- * healthy. Cleared only by discarding the overlay (rollback / commit-failure →
56
- * rollback).
57
- */
58
- poison?: {
59
- message: string;
60
- };
61
- }
62
25
  /**
63
26
  * A module wrapper that adds transaction isolation to any underlying module.
64
27
  *
@@ -81,7 +44,7 @@ export interface ConnectionOverlayState {
81
44
  * detection). A stable snapshot, if needed, is the underlying module's job.
82
45
  * - Savepoint support via overlay module's transaction support
83
46
  */
84
- export declare class IsolationModule implements VirtualTableModule<IsolatedTable, BaseModuleConfig> {
47
+ export declare class IsolationModule implements VirtualTableModule<IsolatedTable, BaseModuleConfig>, AlterMigrationHost {
85
48
  readonly underlying: VirtualTableModule<any, any>;
86
49
  readonly overlayModule: VirtualTableModule<any, any>;
87
50
  readonly tombstoneColumn: string;
@@ -227,7 +190,8 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
227
190
  * overlay module's table registry rather than leaking there for the life of the
228
191
  * `Database`. This is the single sink every overlay-discard path funnels through —
229
192
  * without it, `MemoryTableModule.tables` accumulates one dead `_overlay_<table>_<id>`
230
- * entry per writing transaction (and one more per rebuild), unbounded.
193
+ * entry per writing transaction (and one more per `alterPrimaryKey` overlay swap — the
194
+ * only DDL path left that replaces an overlay rather than adopting in place), unbounded.
231
195
  *
232
196
  * `MemoryTableManager.destroy` rolls back the overlay's own pending layer and clears its
233
197
  * connections; a later db-side teardown of the (now-detached) `MemoryVirtualTableConnection`
@@ -409,6 +373,19 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
409
373
  * basis module would silently never hear the deployment.
410
374
  */
411
375
  notifyLensDeployment(db: Database, logicalSchemaName: string, snapshot: LensDeploymentSnapshot): Promise<void>;
376
+ /**
377
+ * Forwards module registration to the underlying module.
378
+ *
379
+ * `Database.registerModule` calls `onRegister` on the REGISTERED module, which is this
380
+ * wrapper when a store is isolated. The underlying module uses it to subscribe to the
381
+ * database's schema-change notifier before any statement runs; without this forward an
382
+ * isolation-wrapped store would fall back to subscribing lazily at its first table
383
+ * hook and would silently drop a view created ahead of that.
384
+ *
385
+ * Which `Database` the module serves is isolation-transparent, so a straight delegate
386
+ * is correct; a throw must propagate (it fails the registration by contract).
387
+ */
388
+ onRegister(db: Database, moduleName: string): void;
412
389
  /**
413
390
  * Forwards the view / materialized-view catalog-persistability veto to the underlying
414
391
  * module.
@@ -514,7 +491,7 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
514
491
  * covers the data conditions the pre-validation pass rejects before any overlay is touched;
515
492
  * this one covers a UNIQUE (or any other) violation raised by the in-place adoption itself.
516
493
  */
517
- private buildRebuildPoisonMessage;
494
+ private buildInPlaceAdoptPoisonMessage;
518
495
  /**
519
496
  * Builds the poison message stamped onto a foreign overlay whose table was dropped out
520
497
  * from under it (see {@link destroy}). Names the schema.table so the owning connection's
@@ -594,18 +571,21 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
594
571
  */
595
572
  private createOverlayIndex;
596
573
  /**
597
- * Reads back the underlying table instance's post-`createIndex` schema, asserting it now
598
- * carries the new index.
574
+ * Reads back the underlying table instance's post-`createIndex` schema plus the entry it now
575
+ * carries for the new index — the canonical post-create form each overlay's copy is derived
576
+ * from ({@link createOverlayIndex}).
599
577
  *
600
578
  * Both bundled underlyings refresh the instance's cached `tableSchema` (memory through
601
- * `MemoryTable.createIndex`, the store through `StoreTable.updateSchema`), and the overlay
602
- * rebuild below copies its index/constraint set from it. A third-party underlying that
603
- * refreshed only its module-level schema would silently rebuild overlays under the PRE-index
604
- * schema, re-opening the very hole this method exists to close — so assert rather than assume.
579
+ * `MemoryTable.createIndex`, the store through `StoreTable.updateSchema`). A third-party
580
+ * underlying that refreshed only its module-level schema would leave every overlay without
581
+ * the index — silently re-opening the very hole `createIndex`'s forward exists to close — so
582
+ * assert rather than assume.
605
583
  */
606
584
  private assertIndexPresent;
607
- /** Case-insensitive "does `schema` declare an index named `indexName`". */
608
- private schemaHasIndex;
585
+ /** `schema`'s index named `indexName` (case-insensitively), if it declares one. */
586
+ private findSchemaIndex;
587
+ /** Case-insensitive "does `schema` declare an index named `indexName`". Part of {@link AlterMigrationHost}. */
588
+ schemaHasIndex(schema: TableSchema, indexName: string): boolean;
609
589
  /**
610
590
  * Drops an index on the underlying table, then drops it from every per-connection overlay.
611
591
  *
@@ -614,6 +594,11 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
614
594
  * so MemoryTable.tableSchema stays fresh), prefer that. Otherwise fall back
615
595
  * to the module-level dropIndex (e.g. StoreModule, which refreshes the
616
596
  * StoreTable's cached tableSchema and tears down the index store).
597
+ *
598
+ * Mirrors createIndex's early return when neither hook exists too: an underlying that
599
+ * declares indexes at CREATE TABLE time but cannot drop one still has them, and dropping
600
+ * from the overlays alone would leave each overlay enforcing LESS than the base it flushes
601
+ * into — a silent divergence surfacing only as a commit-time rejection.
617
602
  */
618
603
  dropIndex(db: Database, schemaName: string, tableName: string, indexName: string): Promise<void>;
619
604
  /**
@@ -654,7 +639,7 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
654
639
  * judged by the DDL's own validation pass, so a rejection here means validation and
655
640
  * migration have drifted — {@link issuerOverlayDriftError}); a foreign overlay →
656
641
  * poison and leave it untouched so its owner errors and rolls back
657
- * ({@link buildRebuildPoisonMessage}). Any non-CONSTRAINT failure is a layer-invariant
642
+ * ({@link buildInPlaceAdoptPoisonMessage}). Any non-CONSTRAINT failure is a layer-invariant
658
643
  * violation, not a data condition, and rethrows for everyone.
659
644
  *
660
645
  * Shared by the index paths ({@link applyIndexChangeToOverlays}) and the ALTER TABLE
@@ -665,28 +650,20 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
665
650
  * Delegates ALTER TABLE to the underlying module and carries any per-connection
666
651
  * overlays to the post-alter schema without discarding staged rows.
667
652
  *
668
- * Every change type forwards to each overlay IN PLACE — through the overlay's own
653
+ * The migration machinery itself — deriving the per-change-type constants, dry-running
654
+ * one overlay against them, and reshaping it forward — lives in `alter-migration.ts`;
655
+ * this method owns the surrounding lifecycle. Every change type but one forwards to each
656
+ * overlay IN PLACE via {@link migrateOverlayForward} — through the overlay's own
669
657
  * `alterSchema` / `createIndex` / ordinary writes — so the overlay's layer chain and
670
658
  * savepoint snapshots survive the ALTER and `rollback to savepoint` keeps
671
659
  * distinguishing rows staged before the savepoint from rows staged after it (see
672
660
  * {@link applyIndexChangeToOverlays} for why the old rebuild — copying staged rows
673
- * into a fresh staging table — destroyed that distinction). Per change type:
674
- *
675
- * - ADD / DROP / RENAME COLUMN: {@link forwardColumnShapeToOverlay}. ADD COLUMN
676
- * backfills each staged row exactly as the committed path does (literal default,
677
- * per-row `new.<col>` evaluator, or NULL); tombstone rows get NULL.
678
- * - ALTER COLUMN: {@link forwardAlterColumnToOverlay}. `set data type` / `set collate`
679
- * / `set default` forward straight through (the overlay module converts / re-keys its
680
- * open layers itself); `set not null` is withheld from the overlay and the staged
681
- * live rows' NULLs are backfilled via ordinary overlay writes instead.
682
- * - ADD / DROP / RENAME CONSTRAINT: {@link forwardAddConstraintToOverlay} /
683
- * {@link forwardConstraintNameChangeToOverlay}. A UNIQUE lands as a
684
- * tombstone-narrowed unique index; CHECK forwards verbatim; FOREIGN KEY does not
685
- * forward at all.
686
- * - ALTER PRIMARY KEY: no overlay can follow (its layer trees are keyed by the old
687
- * primary key) — the issuer with staged rows is rejected before the underlying
688
- * mutates, a foreign overlay with staged rows is poisoned, and a clean overlay is
689
- * swapped for a fresh staging table ({@link replaceOverlayForPrimaryKeyChange}).
661
+ * into a fresh staging table — destroyed that distinction).
662
+ *
663
+ * ALTER PRIMARY KEY is the exception: no overlay can follow it (its layer trees are keyed
664
+ * by the old primary key), so the issuer with staged rows is rejected before the underlying
665
+ * mutates, a foreign overlay with staged rows is poisoned, and a clean overlay is swapped
666
+ * for a fresh staging table ({@link replaceOverlayForPrimaryKeyChange}).
690
667
  *
691
668
  * **Atomicity guarantee.** DDL through Quereus is not transaction-scoped and the
692
669
  * underlying (shared, committed) base auto-commits its mutation immediately —
@@ -706,17 +683,6 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
706
683
  * check before it mutates anything, so the atomic-abort guarantee above still holds.
707
684
  */
708
685
  alterTable(db: Database, schemaName: string, tableName: string, change: SchemaChangeInfo, rows?: EffectiveRowSource): Promise<TableSchema>;
709
- /**
710
- * Builds the poison message stamped onto a foreign overlay whose backfill could not
711
- * satisfy a cross-connection ALTER (see {@link alterTable} tier 3). Names the
712
- * schema.table and the offending column so the owning connection's eventual
713
- * read/write/commit error is self-explanatory. Poison arises on the addColumn NOT NULL
714
- * path (a new NOT-NULL column with no usable default), the `set not null` tightening
715
- * path (a staged NULL with no usable default), and the `set data type` path (a staged value
716
- * that cannot be converted to the new type); other change types never reach here but
717
- * are handled defensively.
718
- */
719
- private buildAlterPoisonMessage;
720
686
  /**
721
687
  * Renames a table through the isolation layer.
722
688
  *
@@ -775,242 +741,6 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
775
741
  * Returns how many entries moved.
776
742
  */
777
743
  private rekeyConnectionScopedMap;
778
- /**
779
- * Precomputes the per-ALTER constants an `addColumn` overlay backfill needs:
780
- * the folded literal DEFAULT (the `tryFoldLiteral` of the DEFAULT expr, or `null`
781
- * when there is no DEFAULT or it folds to NULL), the engine-supplied per-row
782
- * evaluator (present only for a non-foldable `new.<col>` default), and whether
783
- * the new column is NOT NULL. Returns undefined for every non-`addColumn` change
784
- * so the row loop appends nothing.
785
- *
786
- * The new column's nullability is resolved exactly as both underlyings resolve it
787
- * (`columnDefToSchema(columnDef, default_column_nullability === 'not_null')`) so the
788
- * pre-validation cannot drift from what the underlying will enforce. Because it is
789
- * derived purely from `change` + the session option — not the post-alter schema,
790
- * which does not exist until `underlying.alterTable` runs — this can be built
791
- * BEFORE the irreversible underlying mutation and reused by the migration after.
792
- */
793
- private deriveAddColumnBackfill;
794
- /**
795
- * Precomputes the per-ALTER constants an `alter column … set not null` overlay migration needs:
796
- * the now-NOT-NULL column's index and the folded literal DEFAULT (with `hasDefault` gating
797
- * backfill vs reject). Returns undefined unless this is a NOT NULL *tightening*
798
- * (`setNotNull: true`) with at least one overlay to migrate — a DROP NOT NULL loosens and
799
- * needs no staged-row work, and with no overlays there is nothing to backfill or reject.
800
- *
801
- * `change` for `set not null` carries no default expression, so the DEFAULT is read from the
802
- * column's PRE-alter schema (via a to-be-migrated overlay — the same layout every migrated
803
- * overlay shares). Folded exactly as
804
- * {@link deriveAddColumnBackfill} folds its DEFAULT, so backfill and reject decisions here
805
- * cannot drift from what the underlying enforces over its committed rows.
806
- */
807
- private deriveSetNotNullBackfill;
808
- /**
809
- * Precomputes the per-ALTER constants an `alter column … set data type` overlay conversion
810
- * needs: the retyped column's index and a per-value `convert`. Returns undefined unless this
811
- * is a retype with at least one overlay to convert, and undefined for an ALIAS retype (the
812
- * new logical type IS the old type object — `inferType` flattens `varchar(50)` to
813
- * `TEXT_TYPE`) — both underlyings gate their value rewrite on that exact identity
814
- * comparison, so mirroring it here keeps overlay and committed rows moving together should
815
- * "what counts as a value-rewriting retype" ever change. A same-storage-class retype between
816
- * different types (text → date) DOES convert: staged values are validated and normalized to
817
- * the new type's canonical spelling, exactly as the underlyings treat their committed rows.
818
- *
819
- * `inferType` never throws (an unknown type name falls through SQLite-style affinity rules),
820
- * so deriving this BEFORE the underlying mutation is safe. `convert` is the literal mirror of
821
- * `MemoryTableManager.alterColumn` / `StoreModule.alterColumnSetDataType`: `validateAndParse`,
822
- * rethrowing failure as the same MISMATCH message, so the two legs cannot drift.
823
- */
824
- private deriveSetDataTypeConvert;
825
- /**
826
- * Dry-runs an overlay's ALTER migration-fallible work without mutating anything,
827
- * so the caller can run it for every affected overlay BEFORE the irreversible
828
- * `underlying.alterTable` (see {@link alterTable}). It exercises the EXACT code
829
- * paths the real migration uses — the tombstone-present guard and, for addColumn,
830
- * `computeAddColumnValue` per staged row — so a dry-run pass and the subsequent
831
- * migrate pass cannot diverge:
832
- *
833
- * - A clean overlay (`!hasChanges`) stages no rows, so there is nothing to validate.
834
- * - A missing tombstone column throws INTERNAL here, before the underlying is touched.
835
- * - For addColumn, each staged row runs through `computeAddColumnValue`: tombstone
836
- * rows short-circuit to `null` (the evaluator never runs), and a NOT-NULL-violating
837
- * evaluated row throws CONSTRAINT here, atomically. Computed values are discarded.
838
- *
839
- * For `set not null` with NO usable DEFAULT (`setNotNullCtx.hasDefault === false`), a staged
840
- * non-tombstone NULL at the now-NOT-NULL column throws CONSTRAINT here — for the issuer this
841
- * aborts atomically before the underlying mutates; for a foreign overlay the caller maps it to
842
- * poison. With a usable DEFAULT the staged NULLs are backfilled by
843
- * {@link backfillStagedNotNull}, so nothing is rejected here.
844
- *
845
- * For `set data type` (`setDataTypeCtx`), every staged non-NULL value is run through the
846
- * conversion and the result discarded, so an unconvertible one throws MISMATCH here. For the
847
- * ISSUER this is belt-and-braces — the underlying's own pre-mutation pass walks the same rows
848
- * via {@link issuerEffectiveRows} — EXCEPT when an outer wrapper supplied `rows`, in which case
849
- * this is the only check. For a FOREIGN overlay it is the only pass that ever sees those rows,
850
- * and it must run before the migration so a failure becomes poison rather than a half-migrated
851
- * overlay.
852
- *
853
- * Non-addColumn / non-tightening / non-retype changes (`addColumnCtx === undefined`, no
854
- * reject-mode `setNotNullCtx`, no `setDataTypeCtx`) only run the tombstone guard; their row
855
- * translation appends/removes nothing fallible on data grounds.
856
- */
857
- private validateOverlayMigration;
858
- /**
859
- * The staged rows an overlay holds that represent LIVE data, i.e. every row except the
860
- * tombstones — those carry placeholder NULLs at every data column and must never be fed to a
861
- * per-value check, which would read a NULL that is not the row's real value.
862
- */
863
- private stagedLiveRows;
864
- /**
865
- * Computes one staged row's value for a freshly added column, mirroring the
866
- * committed-row backfill (see `base.ts` `recreatePrimaryTreeWithNewColumn` and
867
- * `store-module.ts` `migrateRows`):
868
- *
869
- * - Tombstone rows carry NULL placeholders and their appended value is never read,
870
- * so append `null` and never run the evaluator against them (it could reference
871
- * NULL siblings or spuriously trip the NOT NULL check).
872
- * - With a per-row evaluator, derive the value from the existing-columns slice and
873
- * enforce NOT NULL on that path only (a literal/NULL default's nullability is gated
874
- * up-front by the engine, exactly as `base.ts` does).
875
- * - Otherwise use the folded literal default.
876
- */
877
- private computeAddColumnValue;
878
- /**
879
- * Forwards one column-shape change (ADD / DROP / RENAME COLUMN) to an already-open
880
- * overlay IN PLACE via the overlay's optional `alterSchema`. The overlay module (the
881
- * memory module by default) reshapes its open transaction layers with their savepoint
882
- * snapshots intact, so `rollback to savepoint` keeps distinguishing rows staged before
883
- * the savepoint from rows staged after it — the rebuild path destroyed that
884
- * distinction in both directions (see {@link applyIndexChangeToOverlays}).
885
- *
886
- * A missing `alterSchema` is treated as a no-op, the way the index paths treat a
887
- * missing `createIndex` / `dropIndex`.
888
- *
889
- * `dropColumn` / `renameColumn` forward the caller's change unchanged. `addColumn`
890
- * forwards an overlay-flavoured copy — see {@link buildOverlayAddColumnChange}.
891
- */
892
- private forwardColumnShapeToOverlay;
893
- /**
894
- * The overlay-flavoured form of one `addColumn` change:
895
- *
896
- * - `insertAtIndex` = the overlay's current tombstone column index, so the new data
897
- * column lands ahead of the tombstone flag and the flag stays LAST — the layout
898
- * every read/write path of this package assumes. A bare forward would append after
899
- * the flag and every value written to the new column would be dropped on read.
900
- * - The column definition is made NULLABLE. The overlay's ADD re-runs the overlay
901
- * module's own NOT NULL validation against a different row population than the
902
- * base's: tombstone rows carry placeholder NULL in every non-PK column, so a
903
- * NOT NULL column the base already accepted would be rejected here. The base's
904
- * NOT NULL is still enforced where it belongs — by the engine's pre-mutation
905
- * `validateNotNullBackfill` and the underlying's own ADD (both judged the issuer's
906
- * effective rows), and per staged row by {@link computeAddColumnValue}'s
907
- * evaluator-path check.
908
- * - `backfillEvaluator` receives an OVERLAY row (data columns plus the flag) and
909
- * routes through {@link computeAddColumnValue} — the same helper
910
- * {@link validateOverlayMigration} dry-runs, so validation and forward cannot
911
- * drift: NULL for a tombstone row, else the engine's per-row `new.<col>` evaluator
912
- * over the flag-stripped row, or the folded literal default.
913
- */
914
- private buildOverlayAddColumnChange;
915
- /**
916
- * Forwards one ALTER COLUMN attribute change to an already-open overlay IN PLACE, with the
917
- * NOT NULL attribute deliberately withheld.
918
- *
919
- * `set data type` / `set collate` / `set default` forward through the overlay's own
920
- * `alterSchema`: the overlay module converts / re-keys its open transaction layers with
921
- * their savepoint snapshots intact, and NULLs pass a retype untouched, so tombstone rows —
922
- * placeholder NULLs at every non-key data column — ride through unharmed.
923
- *
924
- * `set not null` must NOT forward: the overlay's copy of the column stays nullable.
925
- * Tombstone rows carry NULL at every non-PK data column, so the overlay module's own
926
- * tightening would backfill a deletion marker's placeholder NULL from the DEFAULT
927
- * (corrupting a row that is not a row) or reject it outright when no usable DEFAULT
928
- * exists. The base's NOT NULL is enforced where it belongs — by the underlying over the
929
- * issuer's effective rows, and per overlay by {@link validateOverlayMigration} — and the
930
- * staged LIVE rows' NULLs are filled here via {@link backfillStagedNotNull}. The runtime
931
- * admits exactly one attribute per ALTER COLUMN, so a `setNotNull` change carries nothing
932
- * else to forward. A missing overlay `alterSchema` is a no-op, as in
933
- * {@link forwardColumnShapeToOverlay}.
934
- */
935
- private forwardAlterColumnToOverlay;
936
- /**
937
- * Backfills a `set not null` tightening into an overlay's staged LIVE rows: every
938
- * non-tombstone row holding NULL at the tightened column is rewritten with the column's
939
- * folded literal DEFAULT through the overlay's ordinary write path, so the overlay's layer
940
- * chain and savepoint snapshots stay intact — the overlay-side mirror of the value rewrite
941
- * the underlying applies to its committed rows. Tombstone rows are never touched
942
- * ({@link stagedLiveRows}).
943
- *
944
- * Only called with a usable DEFAULT ({@link SetNotNullBackfillContext.hasDefault}); the
945
- * no-DEFAULT case rejects (issuer) or poisons (foreign) in {@link validateOverlayMigration}
946
- * before any overlay is touched.
947
- *
948
- * NOTE: these rewrites land in the overlay's CURRENT savepoint frame — each is a normal
949
- * staged write. A later `rollback to savepoint` taken BEFORE this ALTER therefore restores
950
- * the pre-backfill NULL while the column stays NOT NULL (DDL is not transactional here).
951
- * That is the same class of divergence as any rolled-back row violating surviving DDL — a
952
- * row un-inserted past an ADD CONSTRAINT, say — tracked by the backlog ticket
953
- * `bug-rolled-back-rows-violate-surviving-ddl`, not a new hole opened by this forward.
954
- */
955
- private backfillStagedNotNull;
956
- /**
957
- * Forwards one ADD CONSTRAINT to an already-open overlay, per constraint class:
958
- *
959
- * - **UNIQUE** is NOT forwarded as a constraint. The AST `TableConstraint` carries no
960
- * partial-predicate field, so a bare forward would enforce uniqueness over tombstone rows
961
- * too — a UNIQUE whose columns sit inside the primary key would see two deleted rows
962
- * (each carrying its PK and placeholder NULLs elsewhere) as duplicates of each other.
963
- * Instead it lands as a tombstone-narrowed **unique index** through the same route CREATE
964
- * INDEX takes ({@link installOverlayUniqueConstraint}).
965
- * - **CHECK** forwards verbatim: the overlay module appends it schema-only (no row scan, no
966
- * physical structure). Enforcement is engine-side at DML plan time against the user
967
- * table; the overlay's copy exists so a later DROP / RENAME CONSTRAINT resolves it.
968
- * - **FOREIGN KEY** is deliberately NOT forwarded. FK enforcement is engine-side
969
- * (planner-synthesized EXISTS checks) — the overlay never enforces it — and the overlay
970
- * module's ADD arm validates existing child rows through a catalog query by table name,
971
- * which the unregistered `_overlay_*` staging table cannot serve. The presence guard in
972
- * {@link forwardConstraintNameChangeToOverlay} keeps a later DROP / RENAME of the
973
- * unforwarded FK a clean no-op on the overlay.
974
- * - **PRIMARY KEY** cannot reach here — both bundled underlyings reject
975
- * `add constraint … primary key` with UNSUPPORTED before any overlay work — so it asserts
976
- * INTERNAL rather than leaving a silent gap for a third-party underlying that accepts it
977
- * (the overlay could not follow; see the alterPrimaryKey handling in {@link alterTable}).
978
- */
979
- private forwardAddConstraintToOverlay;
980
- /**
981
- * Installs one runtime-added UNIQUE constraint on an overlay as a tombstone-narrowed unique
982
- * index (see {@link forwardAddConstraintToOverlay} for why a bare constraint forward is
983
- * wrong). Column indices and per-column collations are read from the post-alter underlying
984
- * schema — the canonical form, positionally identical to the overlay's data columns (the
985
- * tombstone flag is appended last). The index is named `constraint name ?? '_uc_<cols>'`,
986
- * the memory module's own covering-index naming rule (`implicitIndexNameFor`), so the
987
- * derived UNIQUE the overlay module synthesizes from it resolves under the SAME name a
988
- * later DROP / RENAME CONSTRAINT forward carries.
989
- *
990
- * `MemoryTableManager.createIndex` pre-validates the overlay's effective rows against the
991
- * narrowed predicate before any mutation, so a staged duplicate raises CONSTRAINT with the
992
- * overlay untouched — routed by the caller to INTERNAL (the issuer, whose merged rows the
993
- * underlying already judged via {@link issuerEffectiveRows}) or poison (a foreign overlay).
994
- * A missing overlay `createIndex` is a no-op, as in the index paths.
995
- */
996
- private installOverlayUniqueConstraint;
997
- /**
998
- * Forwards DROP / RENAME CONSTRAINT to an already-open overlay, presence-guarded: a
999
- * constraint the overlay never carried is skipped silently rather than letting the overlay
1000
- * module's NOTFOUND abort the issuer's already-applied ALTER. The guard is what makes the
1001
- * unforwarded classes safe ({@link forwardAddConstraintToOverlay}: FOREIGN KEY always, and
1002
- * UNIQUE under an overlay module without `createIndex`) — their DROP / RENAME is simply a
1003
- * no-op on the overlay.
1004
- *
1005
- * For a UNIQUE the overlay module drops/renames the constraint AND its covering index in
1006
- * lock-step — both live under the constraint's name (or the `_uc_<cols>` implicit-name
1007
- * rule), whether copied at overlay creation ({@link createOverlaySchema}) or installed by
1008
- * {@link installOverlayUniqueConstraint} — so the base and overlay representations stay
1009
- * resolvable by one name across the whole constraint lifecycle.
1010
- */
1011
- private forwardConstraintNameChangeToOverlay;
1012
- /** Case-insensitive "does `schema` declare a named constraint of ANY class (CHECK / UNIQUE / FOREIGN KEY)". */
1013
- private schemaHasNamedConstraint;
1014
744
  /**
1015
745
  * Carries one overlay across an ALTER PRIMARY KEY, which no overlay can follow in place:
1016
746
  * its layer BTrees are keyed by the OLD primary key, and a staged tombstone identifies the
@@ -1048,6 +778,16 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
1048
778
  *
1049
779
  * `IsolatedTable.mergedSecondaryIndexQuery` wants exactly the live overlay rows out of
1050
780
  * these indexes, so narrowing them is what it already expects.
781
+ *
782
+ * NOTE: a base column already named {@link tombstoneColumn} lands here as a SECOND column
783
+ * of that name, and `columnIndexMap` resolves the name to the appended flag. Harmless
784
+ * today — every consumer reaches the flag by index, and reads, merged scans, a unique
785
+ * secondary index over that column and a staged deletion all behave exactly as they do
786
+ * for a non-colliding name. If anything ever resolves the overlay's columns BY NAME (a
787
+ * hand-built overlay predicate, a module that re-derives its own index map from the
788
+ * column list), give the overlay a collision-free flag name here instead. ALTER into the
789
+ * name is rejected outright — see {@link assertColumnNameNotTombstone} for why that one
790
+ * cannot be tolerated.
1051
791
  */
1052
792
  createOverlaySchema(baseSchema: TableSchema): TableSchema;
1053
793
  /**
@@ -1073,8 +813,11 @@ export declare class IsolationModule implements VirtualTableModule<IsolatedTable
1073
813
  * self-qualifier to the overlay name so it stays a self-reference. A foreign qualifier
1074
814
  * cannot occur here: `compilePredicate` already rejected one when the base index/UNIQUE
1075
815
  * was created, so every qualifier present is the base name.
816
+ *
817
+ * Part of {@link AlterMigrationHost} — `alter-migration.ts` builds an overlay UNIQUE index
818
+ * through this same seam.
1076
819
  */
1077
- private overlayPredicate;
820
+ overlayPredicate(base: Predicate | undefined, baseName: string, overlayName: string): Predicate;
1078
821
  /**
1079
822
  * `<tombstoneColumn> = 0` — the partial-structure predicate that scopes an overlay index
1080
823
  * or UNIQUE constraint to live rows. Built as an AST rather than parsed from text because
@@ -1 +1 @@
1
- {"version":3,"file":"isolation-module.d.ts","sourceRoot":"","sources":["../../src/isolation-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"isolation-module.d.ts","sourceRoot":"","sources":["../../src/isolation-module.ts"],"names":[],"mappings":"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"}