@quereus/quereus 4.19.4 → 4.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.
- package/README.md +257 -257
- package/dist/src/common/errors.d.ts +10 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +14 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/common/types.d.ts +12 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +12 -9
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +28 -19
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database.d.ts +58 -6
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +185 -54
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/param.d.ts +46 -1
- package/dist/src/core/param.d.ts.map +1 -1
- package/dist/src/core/param.js +87 -7
- package/dist/src/core/param.js.map +1 -1
- package/dist/src/core/statement.d.ts +66 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +156 -91
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -3
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +7 -20
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +62 -0
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +19 -5
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +7 -0
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/scalar-param-usage.d.ts +6 -3
- package/dist/src/planner/analysis/scalar-param-usage.d.ts.map +1 -1
- package/dist/src/planner/analysis/scalar-param-usage.js +32 -4
- package/dist/src/planner/analysis/scalar-param-usage.js.map +1 -1
- package/dist/src/planner/building/coercion.js +1 -1
- package/dist/src/planner/building/coercion.js.map +1 -1
- package/dist/src/planner/building/schema-authored-context.d.ts +7 -7
- package/dist/src/planner/building/schema-authored-context.js +7 -7
- package/dist/src/planner/nodes/scalar.d.ts +19 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +13 -2
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +4 -0
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +44 -1
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +20 -32
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/ddl-event-scope.d.ts +20 -13
- package/dist/src/runtime/emit/ddl-event-scope.d.ts.map +1 -1
- package/dist/src/runtime/emit/ddl-event-scope.js +20 -13
- package/dist/src/runtime/emit/ddl-event-scope.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +9 -4
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/parameter.d.ts.map +1 -1
- package/dist/src/runtime/emit/parameter.js +13 -8
- package/dist/src/runtime/emit/parameter.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +17 -6
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +169 -31
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/schema/catalog-rendering.d.ts +26 -0
- package/dist/src/schema/catalog-rendering.d.ts.map +1 -1
- package/dist/src/schema/catalog-rendering.js +41 -4
- package/dist/src/schema/catalog-rendering.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +23 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +6 -4
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +67 -11
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +115 -12
- package/dist/src/schema/constraint-builder.js.map +1 -1
- package/dist/src/schema/ddl-generator.d.ts +21 -0
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +7 -1
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/rename/self-qualifier-strip.d.ts +27 -0
- package/dist/src/schema/rename/self-qualifier-strip.d.ts.map +1 -1
- package/dist/src/schema/rename/self-qualifier-strip.js +73 -0
- package/dist/src/schema/rename/self-qualifier-strip.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +5 -5
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +5 -5
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +41 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +529 -36
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/types/temporal-ops.d.ts.map +1 -1
- package/dist/src/types/temporal-ops.js +16 -10
- package/dist/src/types/temporal-ops.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -2
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +15 -11
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +15 -11
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/module.d.ts +16 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -81,4 +81,77 @@ function stripColumnQualifier(col, stack, state) {
|
|
|
81
81
|
col.schema = undefined;
|
|
82
82
|
state.changed = true;
|
|
83
83
|
}
|
|
84
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
85
|
+
// Own-row requalification (existing-row CHECK scans)
|
|
86
|
+
// ──────────────────────────────────────────────────────────────────────
|
|
87
|
+
/**
|
|
88
|
+
* Rewrite every reference to the OWNING row in a schema-authored CHECK — the
|
|
89
|
+
* `new.<col>` row-image spelling and the self-qualified `<table>.<col>` /
|
|
90
|
+
* `<schema>.<table>.<col>` spellings — to `<alias>.<col>`, so the constraint can
|
|
91
|
+
* be re-planned as an ordinary predicate over `from <table> as <alias>`.
|
|
92
|
+
*
|
|
93
|
+
* The mirror image of {@link stripSelfQualifierInSchemaExpression}: that one
|
|
94
|
+
* folds to the BARE form the row-context scope registers; this one folds to an
|
|
95
|
+
* alias, precisely because a bare name inside a subquery can be captured by the
|
|
96
|
+
* subquery's own FROM sources while a qualified reference cannot — so no
|
|
97
|
+
* catalog lookup (`ResolveColumnInSource`) is needed here. The alias must be one
|
|
98
|
+
* no FROM source the user could write inside the CHECK would rebind. Used by the
|
|
99
|
+
* existing-row CHECK scan (`validateChecksOverExistingRows` in
|
|
100
|
+
* `../constraint-builder.ts`), the one CHECK path that re-prepares the
|
|
101
|
+
* constraint as a whole statement instead of compiling it in a row scope, so
|
|
102
|
+
* `new.` has no scope to resolve against there.
|
|
103
|
+
*
|
|
104
|
+
* Scope rules mirror the enforcement compile: a qualifier rebound by an inner
|
|
105
|
+
* FROM / WITH is left alone (`new` is not a reserved word — `(select max("new".a)
|
|
106
|
+
* from "new")` names a real table, and `from other as t` rebinds `t`), and nothing
|
|
107
|
+
* under a sealed view write-through frame is touched. `old.<col>` is NOT rewritten
|
|
108
|
+
* — the previous row image has no stored-row counterpart, so callers screen those
|
|
109
|
+
* conjuncts out before reaching here (`storedRowPredicate`).
|
|
110
|
+
*
|
|
111
|
+
* Mutates `expr` in place (pass a clone) and returns whether anything changed.
|
|
112
|
+
*/
|
|
113
|
+
export function requalifyOwnRowRefsInSchemaExpression(expr, tableName, defaultSchemaName, alias) {
|
|
114
|
+
if (!expr)
|
|
115
|
+
return false;
|
|
116
|
+
const state = {
|
|
117
|
+
tableName: tableName.toLowerCase(),
|
|
118
|
+
defaultSchema: defaultSchemaName.toLowerCase(),
|
|
119
|
+
alias,
|
|
120
|
+
changed: false,
|
|
121
|
+
};
|
|
122
|
+
walkSchemaExpressionScope(expr, { defaultSchema: state.defaultSchema, seedBindings: [state.tableName] }, { onColumn: (col, stack) => requalifyOwnRowRef(col, stack, state) });
|
|
123
|
+
return state.changed;
|
|
124
|
+
}
|
|
125
|
+
/** `stack[0]` is the walk's seed frame; the rebind scan deliberately skips it. */
|
|
126
|
+
function requalifyOwnRowRef(col, stack, state) {
|
|
127
|
+
if (hasSealedFrame(stack))
|
|
128
|
+
return;
|
|
129
|
+
if (!col.table)
|
|
130
|
+
return;
|
|
131
|
+
const qualifier = col.table.toLowerCase();
|
|
132
|
+
// Innermost-first: a qualifier rebound by any inner FROM / WITH resolves there,
|
|
133
|
+
// whether it is `new` (a real table of that name) or the owning table's own name
|
|
134
|
+
// (a self-join alias).
|
|
135
|
+
for (let i = stack.length - 1; i >= 1; i--) {
|
|
136
|
+
if (stack[i].bound.has(qualifier))
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (qualifier === 'new') {
|
|
140
|
+
// A schema-qualified `main.new.a` is a three-part table reference, never a row
|
|
141
|
+
// image — the same rule the rename walkers apply.
|
|
142
|
+
if (col.schema !== undefined)
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
if (qualifier !== state.tableName)
|
|
147
|
+
return;
|
|
148
|
+
// A qualified self-reference must name the OWNING table's schema exactly
|
|
149
|
+
// (see `stripColumnQualifier`).
|
|
150
|
+
if (!(col.schema === undefined || eq(col.schema, state.defaultSchema)))
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
col.table = state.alias;
|
|
154
|
+
col.schema = undefined;
|
|
155
|
+
state.changed = true;
|
|
156
|
+
}
|
|
84
157
|
//# sourceMappingURL=self-qualifier-strip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-qualifier-strip.js","sourceRoot":"","sources":["../../../../src/schema/rename/self-qualifier-strip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAA8B,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAmB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAelE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,oCAAoC,CACnD,IAA6B,EAC7B,SAAiB,EACjB,iBAAyB,EACzB,qBAA4C;IAE5C,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,KAAK,GAAe;QACzB,SAAS,EAAE,SAAS,CAAC,WAAW,EAAE;QAClC,aAAa,EAAE,iBAAiB,CAAC,WAAW,EAAE;QAC9C,OAAO,EAAE,qBAAqB;QAC9B,OAAO,EAAE,KAAK;KACd,CAAC;IACF,yBAAyB,CACxB,IAAI,EACJ,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EACvE,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CACrE,CAAC;IACF,OAAO,KAAK,CAAC,OAAO,CAAC;AACtB,CAAC;AAED,kFAAkF;AAClF,SAAS,oBAAoB,CAC5B,GAAmB,EACnB,KAAgC,EAChC,KAAiB;IAEjB,kFAAkF;IAClF,mFAAmF;IACnF,IAAI,cAAc,CAAC,KAAK,CAAC;QAAE,OAAO;IAClC,IAAI,CAAC,GAAG,CAAC,KAAK;QAAE,OAAO;IACvB,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAC1C,yEAAyE;IACzE,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO;IAC3C,CAAC;IACD,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS;QAAE,OAAO;IAC1C,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,qDAAqD;IACrD,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;QAAE,OAAO;IAC/E,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,KAAK,CAAC,SAAS;YAAE,OAAO;QAC5B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAAE,OAAO;QAC3D,CAAC;IACF,CAAC;IACD,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;IACtB,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;IACvB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"self-qualifier-strip.js","sourceRoot":"","sources":["../../../../src/schema/rename/self-qualifier-strip.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
* table-qualified self-references (a CHECK's or a GENERATED ALWAYS AS body's)
|
|
7
7
|
* so the row-context scope it is compiled against can resolve them.
|
|
8
8
|
*
|
|
9
|
-
* The
|
|
9
|
+
* The walkers live in `rename/`, split along their seams — table
|
|
10
10
|
* rename (`rename/table-rename.ts`), column rename
|
|
11
|
-
* (`rename/column-rename.ts`), self-qualifier strip
|
|
12
|
-
* (`rename/self-qualifier-strip.ts`) — over the shared
|
|
13
|
-
* `rename/shared.ts`. This module re-exports the public surface so callers
|
|
11
|
+
* (`rename/column-rename.ts`), self-qualifier strip and its own-row
|
|
12
|
+
* requalifying twin (`rename/self-qualifier-strip.ts`) — over the shared
|
|
13
|
+
* vocabulary in `rename/shared.ts`. This module re-exports the public surface so callers
|
|
14
14
|
* keep one import path.
|
|
15
15
|
*/
|
|
16
16
|
export type { ResolveColumnInSource, ResolveObjectRef, RowImageContext, TableRenameTarget } from './rename/shared.js';
|
|
17
17
|
export { objectRefKey, objectRefKeySchema, singleSchemaObjectRefResolver } from './rename/shared.js';
|
|
18
18
|
export { renameTableInAst, tableReferencedInAst, collectTableRefsInAst, renameTableInIndexPredicates, renameTableInCheckConstraints, renameTableInColumnExpressions, type TableRenameOpts, } from './rename/table-rename.js';
|
|
19
19
|
export { PROBE_COLUMN_NAME, renameColumnInAst, renameColumnInCheckExpression, columnReferencedInAst, columnReferencedInCheckExpression, renameColumnInIndexPredicates, renameColumnInCheckConstraints, renameColumnInColumnExpressions, bodyExposesRenamedColumn, bodyPublishesColumnNamed, } from './rename/column-rename.js';
|
|
20
|
-
export { stripSelfQualifierInSchemaExpression } from './rename/self-qualifier-strip.js';
|
|
20
|
+
export { stripSelfQualifierInSchemaExpression, requalifyOwnRowRefsInSchemaExpression } from './rename/self-qualifier-strip.js';
|
|
21
21
|
//# sourceMappingURL=rename-rewriter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename-rewriter.d.ts","sourceRoot":"","sources":["../../../src/schema/rename-rewriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,KAAK,eAAe,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"rename-rewriter.d.ts","sourceRoot":"","sources":["../../../src/schema/rename-rewriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,KAAK,eAAe,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oCAAoC,EAAE,qCAAqC,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
* table-qualified self-references (a CHECK's or a GENERATED ALWAYS AS body's)
|
|
7
7
|
* so the row-context scope it is compiled against can resolve them.
|
|
8
8
|
*
|
|
9
|
-
* The
|
|
9
|
+
* The walkers live in `rename/`, split along their seams — table
|
|
10
10
|
* rename (`rename/table-rename.ts`), column rename
|
|
11
|
-
* (`rename/column-rename.ts`), self-qualifier strip
|
|
12
|
-
* (`rename/self-qualifier-strip.ts`) — over the shared
|
|
13
|
-
* `rename/shared.ts`. This module re-exports the public surface so callers
|
|
11
|
+
* (`rename/column-rename.ts`), self-qualifier strip and its own-row
|
|
12
|
+
* requalifying twin (`rename/self-qualifier-strip.ts`) — over the shared
|
|
13
|
+
* vocabulary in `rename/shared.ts`. This module re-exports the public surface so callers
|
|
14
14
|
* keep one import path.
|
|
15
15
|
*/
|
|
16
16
|
export { objectRefKey, objectRefKeySchema, singleSchemaObjectRefResolver } from './rename/shared.js';
|
|
17
17
|
export { renameTableInAst, tableReferencedInAst, collectTableRefsInAst, renameTableInIndexPredicates, renameTableInCheckConstraints, renameTableInColumnExpressions, } from './rename/table-rename.js';
|
|
18
18
|
export { PROBE_COLUMN_NAME, renameColumnInAst, renameColumnInCheckExpression, columnReferencedInAst, columnReferencedInCheckExpression, renameColumnInIndexPredicates, renameColumnInCheckConstraints, renameColumnInColumnExpressions, bodyExposesRenamedColumn, bodyPublishesColumnNamed, } from './rename/column-rename.js';
|
|
19
|
-
export { stripSelfQualifierInSchemaExpression } from './rename/self-qualifier-strip.js';
|
|
19
|
+
export { stripSelfQualifierInSchemaExpression, requalifyOwnRowRefsInSchemaExpression } from './rename/self-qualifier-strip.js';
|
|
20
20
|
//# sourceMappingURL=rename-rewriter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rename-rewriter.js","sourceRoot":"","sources":["../../../src/schema/rename-rewriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,GAE9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oCAAoC,EAAE,MAAM,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"rename-rewriter.js","sourceRoot":"","sources":["../../../src/schema/rename-rewriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EACN,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,GAE9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,6BAA6B,EAC7B,qBAAqB,EACrB,iCAAiC,EACjC,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,EACxB,wBAAwB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oCAAoC,EAAE,qCAAqC,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -26,10 +26,43 @@ export interface MigrationCreate {
|
|
|
26
26
|
* and the text an error names. `ast` is present when the step was built from a
|
|
27
27
|
* statement AST rather than a template string; the apply path executes it directly
|
|
28
28
|
* and falls back to parsing `sql` when it is absent.
|
|
29
|
+
*
|
|
30
|
+
* `undo` / `irreversible` are present only when {@link generateMigrationPlan} was
|
|
31
|
+
* given the pre-apply catalog. They let an executor unwind a partially applied
|
|
32
|
+
* plan: run the steps that succeeded in reverse, executing each step's `undo`.
|
|
33
|
+
* Two rules make an undo correct, and every arm of the planner honours both:
|
|
34
|
+
*
|
|
35
|
+
* 1. **Spell the target the way the forward step spelled it.** The unwind runs in
|
|
36
|
+
* reverse, so when step K's undo runs every step after K has already been taken
|
|
37
|
+
* back and the catalog is in the state K left it in. Table renames are the plan's
|
|
38
|
+
* first steps, so a later `ALTER TABLE t …` step — and its undo — name the
|
|
39
|
+
* post-rename table.
|
|
40
|
+
* 2. **Forward-apply the renames in force to anything taken from the pre-apply
|
|
41
|
+
* catalog.** A restored constraint / view / assertion / derivation body, a column
|
|
42
|
+
* default or the old primary key is spelled with pre-rename names in the catalog;
|
|
43
|
+
* by rule 1 the renames that precede the step are still in force when its undo
|
|
44
|
+
* runs, so they are applied forward to the body before it is emitted (through the
|
|
45
|
+
* rewriters the live rename propagation uses, so the two cannot drift).
|
|
29
46
|
*/
|
|
30
47
|
export interface MigrationStep {
|
|
31
48
|
readonly sql: string;
|
|
32
49
|
readonly ast?: AST.Statement;
|
|
50
|
+
/**
|
|
51
|
+
* DDL that puts the catalog back the way it was before this step ran, in the
|
|
52
|
+
* order it must be executed. An empty array means the step changed nothing to
|
|
53
|
+
* undo (an `IF EXISTS` drop whose target was already absent). Absent means undo
|
|
54
|
+
* was not requested — no pre-apply catalog was passed.
|
|
55
|
+
*/
|
|
56
|
+
readonly undo?: readonly string[];
|
|
57
|
+
/**
|
|
58
|
+
* Set instead of `undo` when the step destroys something no DDL can put back —
|
|
59
|
+
* `DROP TABLE`, `DROP COLUMN` and `ALTER COLUMN … SET DATA TYPE` discard stored
|
|
60
|
+
* values, and restoring the catalog entry without them would be worse than a
|
|
61
|
+
* partial apply. Also set when the pre-apply catalog lacks what the restore
|
|
62
|
+
* needs. The string is the human-readable reason, used verbatim in the
|
|
63
|
+
* executor's diagnostic.
|
|
64
|
+
*/
|
|
65
|
+
readonly irreversible?: string;
|
|
33
66
|
}
|
|
34
67
|
/**
|
|
35
68
|
* Represents the difference between a declared schema and actual database state
|
|
@@ -288,6 +321,13 @@ export declare function generateMigrationDDL(diff: SchemaDiff, schemaName?: stri
|
|
|
288
321
|
* them without re-lexing the text this function just produced. The remaining steps
|
|
289
322
|
* are short template-built strings (renames, drops, column/constraint alters,
|
|
290
323
|
* `SET TAGS`) and stay text-only.
|
|
324
|
+
*
|
|
325
|
+
* With `actual` — the pre-apply catalog `computeSchemaDiff` was handed — every step
|
|
326
|
+
* also carries its reversal (`undo` / `irreversible`, see {@link MigrationStep}),
|
|
327
|
+
* rendered by {@link UndoRenderer} at the step's own push site so a forward
|
|
328
|
+
* statement and its undo read together. Without it nothing about the undo is
|
|
329
|
+
* computed: `generateMigrationDDL` never passes a catalog, so `diff schema` output
|
|
330
|
+
* and cost are untouched.
|
|
291
331
|
*/
|
|
292
|
-
export declare function generateMigrationPlan(diff: SchemaDiff, schemaName?: string): MigrationStep[];
|
|
332
|
+
export declare function generateMigrationPlan(diff: SchemaDiff, schemaName?: string, actual?: SchemaCatalog): MigrationStep[];
|
|
293
333
|
//# sourceMappingURL=schema-differ.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-differ.d.ts","sourceRoot":"","sources":["../../../src/schema/schema-differ.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAA6D,MAAM,cAAc,CAAC;AAC7G,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"schema-differ.d.ts","sourceRoot":"","sources":["../../../src/schema/schema-differ.ts"],"names":[],"mappings":"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"}
|