@quereus/quereus 2.7.0 → 2.8.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/dist/src/common/errors.d.ts +21 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +29 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +20 -7
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +15 -5
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +0 -1
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +39 -36
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/json-helpers.d.ts +1 -1
- package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
- package/dist/src/func/builtins/json-helpers.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +5 -7
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +17 -2
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/string.d.ts.map +1 -1
- package/dist/src/func/builtins/string.js +4 -2
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/parser/ast.d.ts +1 -1
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +8 -48
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +30 -7
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/utils.d.ts +10 -1
- package/dist/src/parser/utils.d.ts.map +1 -1
- package/dist/src/parser/utils.js +23 -0
- package/dist/src/parser/utils.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +0 -1
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +12 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +60 -1
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +16 -0
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +13 -7
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +24 -15
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +51 -43
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +4 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +122 -21
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +6 -2
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +20 -5
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +20 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -0
- package/dist/src/planner/building/select-ordinal.js +62 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -0
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +64 -17
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +34 -27
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +25 -2
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +22 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +36 -6
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +6 -2
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts +5 -3
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +24 -8
- package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +5 -12
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +22 -26
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +2 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +7 -3
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-merge.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +161 -9
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +2 -2
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +286 -7
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +12 -7
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +125 -62
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-assertion.js +6 -6
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +133 -76
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +61 -10
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/scalar-function.js +2 -1
- package/dist/src/runtime/emit/scalar-function.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.js +4 -2
- package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +8 -5
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +2 -2
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +2 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +18 -0
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column.d.ts +7 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/function.d.ts +4 -3
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +32 -6
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +165 -23
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +4 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -0
- package/dist/src/schema/rename-rewriter.js +506 -0
- package/dist/src/schema/rename-rewriter.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +41 -4
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +65 -2
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +144 -0
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/util/async-iterator.d.ts +2 -1
- package/dist/src/util/async-iterator.d.ts.map +1 -1
- package/dist/src/util/async-iterator.js +4 -4
- package/dist/src/util/async-iterator.js.map +1 -1
- package/dist/src/util/patterns.d.ts.map +1 -1
- package/dist/src/util/patterns.js +58 -10
- package/dist/src/util/patterns.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +7 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/memory/index.d.ts +8 -0
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +11 -0
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +8 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +36 -2
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +5 -1
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +63 -13
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +21 -2
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +6 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +93 -14
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +27 -0
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/predicate.js +182 -0
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"best-access-plan.js","sourceRoot":"","sources":["../../../src/vtab/best-access-plan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAA2B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"best-access-plan.js","sourceRoot":"","sources":["../../../src/vtab/best-access-plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,13 @@ import { type Row } from '../../common/types.js';
|
|
|
3
3
|
import type { BTreeKeyForPrimary, BTreeKeyForIndex, MemoryIndexEntry } from './types.js';
|
|
4
4
|
import type { IndexColumnSchema as IndexColumnSpec } from '../../schema/table.js';
|
|
5
5
|
import type { ColumnSchema } from '../../schema/column.js';
|
|
6
|
+
import type { Expression } from '../../parser/ast.js';
|
|
7
|
+
import { type CompiledPredicate } from './utils/predicate.js';
|
|
6
8
|
/** Definition for creating a memory index (matches IndexSchema columns usually) */
|
|
7
9
|
export interface IndexSpec {
|
|
8
10
|
name?: string;
|
|
9
11
|
columns: ReadonlyArray<IndexColumnSpec>;
|
|
12
|
+
predicate?: Expression;
|
|
10
13
|
}
|
|
11
14
|
/** Represents a secondary index within a MemoryTable */
|
|
12
15
|
export declare class MemoryIndex {
|
|
@@ -15,8 +18,13 @@ export declare class MemoryIndex {
|
|
|
15
18
|
readonly keyFromRow: (row: Row) => BTreeKeyForIndex;
|
|
16
19
|
readonly compareKeys: (a: BTreeKeyForIndex, b: BTreeKeyForIndex) => number;
|
|
17
20
|
data: BTree<BTreeKeyForIndex, MemoryIndexEntry>;
|
|
21
|
+
/** Compiled partial-index predicate. When present, only rows for which
|
|
22
|
+
* `evaluate(row) === true` participate in the index. */
|
|
23
|
+
readonly predicate: CompiledPredicate | undefined;
|
|
18
24
|
private readonly allTableColumnsSchema;
|
|
19
25
|
constructor(spec: IndexSpec, allTableColumnsSchema: ReadonlyArray<ColumnSchema>, baseInheritreeTable?: BTree<BTreeKeyForIndex, MemoryIndexEntry>);
|
|
26
|
+
/** True when the partial-index predicate is satisfied by `row` (or there is no predicate). */
|
|
27
|
+
rowMatchesPredicate(row: Row): boolean;
|
|
20
28
|
private validateColumnIndexes;
|
|
21
29
|
private createIndexKeyFunctions;
|
|
22
30
|
private createSingleColumnKeyFunctions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAc,KAAK,GAAG,EAAiB,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAc,KAAK,GAAG,EAAiB,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,UAAU,CAAC;CACvB;AAQD,wDAAwD;AACxD,qBAAa,WAAW;IACvB,SAAgB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,SAAgB,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5D,SAAgB,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,gBAAgB,CAAC;IAC3D,SAAgB,WAAW,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC3E,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACvD;6DACyD;IACzD,SAAgB,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8B;gBAExD,IAAI,EAAE,SAAS,EAAE,qBAAqB,EAAE,aAAa,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,EAAE,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAgBhJ,8FAA8F;IAC9F,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;IAKtC,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,8BAA8B;IAsBtC,OAAO,CAAC,iCAAiC;IAuCzC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,WAAW;IAQnB,mDAAmD;IACnD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAgB1E,sDAAsD;IACtD,WAAW,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAa7E,qDAAqD;IACrD,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,kBAAkB,EAAE;IAKhE,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,sEAAsE;IACtE,KAAK,IAAI,IAAI;IAIb,yFAAyF;IACzF,SAAS,IAAI,IAAI;CAGjB"}
|
|
@@ -2,6 +2,7 @@ import { BTree } from 'inheritree';
|
|
|
2
2
|
import { StatusCode } from '../../common/types.js';
|
|
3
3
|
import { createTypedComparator, resolveCollation } from '../../util/comparison.js';
|
|
4
4
|
import { quereusError } from '../../common/errors.js';
|
|
5
|
+
import { compilePredicate } from './utils/predicate.js';
|
|
5
6
|
/** Represents a secondary index within a MemoryTable */
|
|
6
7
|
export class MemoryIndex {
|
|
7
8
|
name;
|
|
@@ -9,6 +10,9 @@ export class MemoryIndex {
|
|
|
9
10
|
keyFromRow;
|
|
10
11
|
compareKeys;
|
|
11
12
|
data;
|
|
13
|
+
/** Compiled partial-index predicate. When present, only rows for which
|
|
14
|
+
* `evaluate(row) === true` participate in the index. */
|
|
15
|
+
predicate;
|
|
12
16
|
allTableColumnsSchema;
|
|
13
17
|
constructor(spec, allTableColumnsSchema, baseInheritreeTable) {
|
|
14
18
|
this.name = spec.name;
|
|
@@ -18,8 +22,15 @@ export class MemoryIndex {
|
|
|
18
22
|
const keyFunctions = this.createIndexKeyFunctions();
|
|
19
23
|
this.keyFromRow = keyFunctions.keyFromRow;
|
|
20
24
|
this.compareKeys = keyFunctions.compareKeys;
|
|
25
|
+
this.predicate = spec.predicate ? compilePredicate(spec.predicate, allTableColumnsSchema) : undefined;
|
|
21
26
|
this.data = this.createBTree(baseInheritreeTable);
|
|
22
27
|
}
|
|
28
|
+
/** True when the partial-index predicate is satisfied by `row` (or there is no predicate). */
|
|
29
|
+
rowMatchesPredicate(row) {
|
|
30
|
+
if (!this.predicate)
|
|
31
|
+
return true;
|
|
32
|
+
return this.predicate.evaluate(row) === true;
|
|
33
|
+
}
|
|
23
34
|
validateColumnIndexes(allTableColumnsSchema) {
|
|
24
35
|
const hasInvalidIndex = this.specColumns.some(sc => sc.index < 0 || sc.index >= allTableColumnsSchema.length);
|
|
25
36
|
if (hasInvalidIndex) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAA2B,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { TableSchema } from '../../../schema/table.js';
|
|
|
3
3
|
import type { BTreeKeyForPrimary, BTreeKeyForIndex, MemoryIndexEntry } from '../types.js';
|
|
4
4
|
import type { Layer } from './interface.js';
|
|
5
5
|
import { MemoryIndex } from '../index.js';
|
|
6
|
-
import type
|
|
6
|
+
import { type Row, type SqlValue } from '../../../common/types.js';
|
|
7
7
|
import { type ColumnSchema } from '../../../schema/column.js';
|
|
8
8
|
import type { IndexSchema } from '../../../schema/table.js';
|
|
9
9
|
export declare class BaseLayer implements Layer {
|
|
@@ -40,6 +40,13 @@ export declare class BaseLayer implements Layer {
|
|
|
40
40
|
private recreatePrimaryTreeWithoutColumn;
|
|
41
41
|
handleColumnRename(): Promise<void>;
|
|
42
42
|
addIndexToBase(indexSchema: IndexSchema): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Populates a freshly-created secondary index from the primary tree,
|
|
45
|
+
* honoring the index's partial-WHERE predicate (rows for which the
|
|
46
|
+
* predicate is not TRUE are skipped). For UNIQUE indexes, raises a
|
|
47
|
+
* CONSTRAINT error on the first duplicate index key among in-scope rows;
|
|
48
|
+
* the caller is expected to roll back the schema change in that case.
|
|
49
|
+
*/
|
|
43
50
|
private populateNewIndex;
|
|
44
51
|
dropIndexFromBase(indexName: string): Promise<void>;
|
|
45
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAQ5D,qBAAa,SAAU,YAAW,KAAK;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAC1B,WAAW,EAAE,WAAW,CAAC;IAChC,OAAO,CAAC,mBAAmB,CAAuB;IAC3C,WAAW,EAAE,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACnD,SAAgB,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAE/C,MAAM,EAAE,WAAW;IAiBxB,YAAY,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IASjD,OAAO,CAAC,6BAA6B;IAI9B,0BAA0B,IAAI,IAAI;IAYzC,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,wBAAwB;IAOhC,OAAO,CAAC,wBAAwB;IAehC,OAAO,CAAC,uBAAuB;IAK/B,UAAU,QAAO,MAAM,CAAiB;IACxC,SAAS,QAAO,KAAK,GAAG,IAAI,CAAS;IACrC,SAAS,QAAO,WAAW,CAAqB;IAChD,WAAW,QAAO,OAAO,CAAS;IAElC,mBAAmB,GAAI,WAAW,MAAM,GAAG,SAAS,KAAG,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,GAAG,IAAI,CACzC;IAEnD,qBAAqB,GAAI,WAAW,MAAM,KAAG,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,IAAI,CACzC;IAEpD,iBAAiB,GAAI,WAAW,MAAM,KAAG,WAAW,GAAG,SAAS,CAC1B;IAE/B,6BAA6B,CAAC,MAAM,EAAE,WAAW,GAAG;QAC1D,0BAA0B,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,kBAAkB,CAAC;QAC7D,oBAAoB,EAAE,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,KAAK,MAAM,CAAA;KAC9E;IAUD,GAAG,GAAI,KAAK,kBAAkB,KAAG,OAAO,CAGtC;IAEI,eAAe,CAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB3F,OAAO,CAAC,gCAAgC;IAoBlC,kBAAkB,CAAC,sBAAsB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUvE,OAAO,CAAC,gCAAgC;IAgBlC,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnC,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAsClB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzD"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { BTree } from 'inheritree';
|
|
2
2
|
import { MemoryIndex } from '../index.js';
|
|
3
|
+
import { StatusCode } from '../../../common/types.js';
|
|
3
4
|
import { createPrimaryKeyFunctions } from '../utils/primary-key.js';
|
|
4
5
|
import { createMemoryTableLoggers } from '../utils/logging.js';
|
|
6
|
+
import { QuereusError } from '../../../common/errors.js';
|
|
5
7
|
let baseLayerCounter = 0;
|
|
6
8
|
const logger = createMemoryTableLoggers('layer:base');
|
|
7
9
|
export class BaseLayer {
|
|
@@ -70,6 +72,8 @@ export class BaseLayer {
|
|
|
70
72
|
const primaryKey = this.primaryKeyFunctions.extractFromRow(row);
|
|
71
73
|
indexes.forEach(index => {
|
|
72
74
|
try {
|
|
75
|
+
if (!index.rowMatchesPredicate(row))
|
|
76
|
+
return;
|
|
73
77
|
const indexKey = index.keyFromRow(row);
|
|
74
78
|
index.addEntry(indexKey, primaryKey);
|
|
75
79
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -151,14 +155,44 @@ export class BaseLayer {
|
|
|
151
155
|
indexName: indexSchema.name
|
|
152
156
|
});
|
|
153
157
|
const newMemoryIndex = new MemoryIndex(indexSchema, this.tableSchema.columns);
|
|
154
|
-
this.populateNewIndex(newMemoryIndex);
|
|
158
|
+
this.populateNewIndex(newMemoryIndex, indexSchema);
|
|
155
159
|
this.secondaryIndexes.set(indexSchema.name, newMemoryIndex);
|
|
156
160
|
}
|
|
157
|
-
|
|
161
|
+
/**
|
|
162
|
+
* Populates a freshly-created secondary index from the primary tree,
|
|
163
|
+
* honoring the index's partial-WHERE predicate (rows for which the
|
|
164
|
+
* predicate is not TRUE are skipped). For UNIQUE indexes, raises a
|
|
165
|
+
* CONSTRAINT error on the first duplicate index key among in-scope rows;
|
|
166
|
+
* the caller is expected to roll back the schema change in that case.
|
|
167
|
+
*/
|
|
168
|
+
populateNewIndex(newIndex, indexSchema) {
|
|
169
|
+
// Track index keys we've already inserted so we can detect duplicates
|
|
170
|
+
// without doing a get() per row (the BTree merges duplicates by primaryKey
|
|
171
|
+
// set; we want the first duplicate to surface as a CONSTRAINT error).
|
|
172
|
+
const seen = indexSchema.unique
|
|
173
|
+
? new Map()
|
|
174
|
+
: undefined;
|
|
158
175
|
for (const path of this.primaryTree.ascending(this.primaryTree.first())) {
|
|
159
176
|
const currentRow = this.primaryTree.at(path);
|
|
177
|
+
if (!newIndex.rowMatchesPredicate(currentRow))
|
|
178
|
+
continue;
|
|
160
179
|
const indexKey = newIndex.keyFromRow(currentRow);
|
|
161
180
|
const primaryKey = this.primaryKeyFunctions.extractFromRow(currentRow);
|
|
181
|
+
if (seen) {
|
|
182
|
+
const cols = newIndex.specColumns.map(c => currentRow[c.index]);
|
|
183
|
+
// SQL UNIQUE allows multiple NULLs: skip dup detection if any key value is NULL.
|
|
184
|
+
const hasNull = cols.some(v => v === null);
|
|
185
|
+
if (!hasNull) {
|
|
186
|
+
const keySig = JSON.stringify(cols);
|
|
187
|
+
if (seen.has(keySig)) {
|
|
188
|
+
const colNames = newIndex.specColumns
|
|
189
|
+
.map(c => this.tableSchema.columns[c.index]?.name ?? String(c.index))
|
|
190
|
+
.join(', ');
|
|
191
|
+
throw new QuereusError(`UNIQUE constraint failed: ${this.tableSchema.name} (${colNames})`, StatusCode.CONSTRAINT);
|
|
192
|
+
}
|
|
193
|
+
seen.set(keySig, true);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
162
196
|
newIndex.addEntry(indexKey, primaryKey);
|
|
163
197
|
}
|
|
164
198
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -80,7 +80,11 @@ export declare class MemoryTableManager {
|
|
|
80
80
|
private performUpdate;
|
|
81
81
|
private performUpdateWithPrimaryKeyChange;
|
|
82
82
|
private performDelete;
|
|
83
|
-
/**
|
|
83
|
+
/**
|
|
84
|
+
* Returns true if any column covered by a UNIQUE constraint changed between
|
|
85
|
+
* old and new rows, or if any column referenced by a partial-UNIQUE predicate
|
|
86
|
+
* changed (which may transition the row into or out of the predicate's scope).
|
|
87
|
+
*/
|
|
84
88
|
private uniqueColumnsChanged;
|
|
85
89
|
/**
|
|
86
90
|
* Checks all UNIQUE constraints for a new/updated row. Returns an UpdateResult
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAuE,MAAM,0BAA0B,CAAC;AACnJ,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAc,KAAK,QAAQ,EAAE,KAAK,GAAG,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAGlG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,IAAI,YAAY,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,10 @@ import { compareSqlValues } from '../../../util/comparison.js';
|
|
|
10
10
|
import { scanLayer as scanLayerImpl } from './scan-layer.js';
|
|
11
11
|
import { createPrimaryKeyFunctions, buildPrimaryKeyFromValues } from '../utils/primary-key.js';
|
|
12
12
|
import { createMemoryTableLoggers } from '../utils/logging.js';
|
|
13
|
-
import {
|
|
13
|
+
import { tryFoldLiteral } from '../../../parser/utils.js';
|
|
14
14
|
import { validateAndParse } from '../../../types/validation.js';
|
|
15
15
|
import { inferType } from '../../../types/registry.js';
|
|
16
|
+
import { compilePredicate } from '../utils/predicate.js';
|
|
16
17
|
let tableManagerCounter = 0;
|
|
17
18
|
const logger = createMemoryTableLoggers('layer:manager');
|
|
18
19
|
export class MemoryTableManager {
|
|
@@ -66,6 +67,7 @@ export class MemoryTableManager {
|
|
|
66
67
|
newIndexes.push({
|
|
67
68
|
name: indexName,
|
|
68
69
|
columns: uc.columns.map(colIdx => ({ index: colIdx })),
|
|
70
|
+
predicate: uc.predicate,
|
|
69
71
|
});
|
|
70
72
|
added = true;
|
|
71
73
|
}
|
|
@@ -403,7 +405,7 @@ export class MemoryTableManager {
|
|
|
403
405
|
const result = primaryTree.get(key);
|
|
404
406
|
return result === undefined ? null : result;
|
|
405
407
|
}
|
|
406
|
-
async performMutation(connection, operation, values, oldKeyValues, onConflict
|
|
408
|
+
async performMutation(connection, operation, values, oldKeyValues, onConflict) {
|
|
407
409
|
this.validateMutationPermissions(operation);
|
|
408
410
|
const wasExplicitTransaction = connection.explicitTransaction;
|
|
409
411
|
this.ensureTransactionLayer(connection);
|
|
@@ -465,10 +467,12 @@ export class MemoryTableManager {
|
|
|
465
467
|
const primaryKey = this.primaryKeyFromRow(newRowData);
|
|
466
468
|
const existingRow = this.lookupEffectiveRow(primaryKey, targetLayer);
|
|
467
469
|
if (existingRow !== null) {
|
|
468
|
-
|
|
470
|
+
// Resolve PK-conflict action: statement OR > column-level default > ABORT.
|
|
471
|
+
const pkAction = onConflict ?? resolvePkDefaultConflict(schema) ?? ConflictResolution.ABORT;
|
|
472
|
+
if (pkAction === ConflictResolution.IGNORE) {
|
|
469
473
|
return { status: 'ok', row: undefined };
|
|
470
474
|
}
|
|
471
|
-
if (
|
|
475
|
+
if (pkAction === ConflictResolution.REPLACE) {
|
|
472
476
|
targetLayer.recordUpsert(primaryKey, newRowData, existingRow);
|
|
473
477
|
return { status: 'ok', row: newRowData, replacedRow: existingRow };
|
|
474
478
|
}
|
|
@@ -530,7 +534,8 @@ export class MemoryTableManager {
|
|
|
530
534
|
performUpdateWithPrimaryKeyChange(targetLayer, schema, oldPrimaryKey, newPrimaryKey, oldRowData, newRowData, onConflict) {
|
|
531
535
|
const existingRowAtNewKey = this.lookupEffectiveRow(newPrimaryKey, targetLayer);
|
|
532
536
|
if (existingRowAtNewKey !== null) {
|
|
533
|
-
|
|
537
|
+
const pkAction = onConflict ?? resolvePkDefaultConflict(schema) ?? ConflictResolution.ABORT;
|
|
538
|
+
if (pkAction === ConflictResolution.IGNORE) {
|
|
534
539
|
return { status: 'ok', row: undefined };
|
|
535
540
|
}
|
|
536
541
|
// Return constraint violation with existing row
|
|
@@ -565,7 +570,11 @@ export class MemoryTableManager {
|
|
|
565
570
|
targetLayer.recordDelete(targetPrimaryKey, oldRowData);
|
|
566
571
|
return { status: 'ok', row: oldRowData };
|
|
567
572
|
}
|
|
568
|
-
/**
|
|
573
|
+
/**
|
|
574
|
+
* Returns true if any column covered by a UNIQUE constraint changed between
|
|
575
|
+
* old and new rows, or if any column referenced by a partial-UNIQUE predicate
|
|
576
|
+
* changed (which may transition the row into or out of the predicate's scope).
|
|
577
|
+
*/
|
|
569
578
|
uniqueColumnsChanged(schema, oldRow, newRow) {
|
|
570
579
|
if (!schema.uniqueConstraints)
|
|
571
580
|
return false;
|
|
@@ -574,6 +583,16 @@ export class MemoryTableManager {
|
|
|
574
583
|
if (compareSqlValues(oldRow[colIdx], newRow[colIdx]) !== 0)
|
|
575
584
|
return true;
|
|
576
585
|
}
|
|
586
|
+
if (uc.predicate) {
|
|
587
|
+
const idx = this.findIndexForConstraint(this._currentCommittedLayer, uc);
|
|
588
|
+
const referenced = idx?.predicate?.referencedColumns;
|
|
589
|
+
if (referenced) {
|
|
590
|
+
for (const colIdx of referenced) {
|
|
591
|
+
if (compareSqlValues(oldRow[colIdx], newRow[colIdx]) !== 0)
|
|
592
|
+
return true;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
577
596
|
}
|
|
578
597
|
return false;
|
|
579
598
|
}
|
|
@@ -598,11 +617,18 @@ export class MemoryTableManager {
|
|
|
598
617
|
return null;
|
|
599
618
|
// Find the matching secondary index for this constraint
|
|
600
619
|
const index = this.findIndexForConstraint(targetLayer, uc);
|
|
620
|
+
// Partial UNIQUE: a row whose predicate is not unambiguously TRUE is
|
|
621
|
+
// outside the index's scope and contributes nothing to uniqueness.
|
|
622
|
+
if (index?.predicate && !index.rowMatchesPredicate(newRowData)) {
|
|
623
|
+
return null;
|
|
624
|
+
}
|
|
625
|
+
// Resolve effective action: statement OR > constraint default > ABORT.
|
|
626
|
+
const effective = onConflict ?? uc.defaultConflict ?? ConflictResolution.ABORT;
|
|
601
627
|
if (index) {
|
|
602
|
-
return this.checkUniqueViaIndex(targetLayer, schema, uc, index, newRowData, newPrimaryKey,
|
|
628
|
+
return this.checkUniqueViaIndex(targetLayer, schema, uc, index, newRowData, newPrimaryKey, effective);
|
|
603
629
|
}
|
|
604
630
|
// Fallback: scan primary tree
|
|
605
|
-
return this.checkUniqueByScanning(targetLayer, schema, uc, newRowData, newPrimaryKey,
|
|
631
|
+
return this.checkUniqueByScanning(targetLayer, schema, uc, newRowData, newPrimaryKey, effective);
|
|
606
632
|
}
|
|
607
633
|
findIndexForConstraint(targetLayer, uc) {
|
|
608
634
|
const schema = targetLayer.getSchema();
|
|
@@ -648,11 +674,18 @@ export class MemoryTableManager {
|
|
|
648
674
|
const primaryTree = targetLayer.getModificationTree('primary');
|
|
649
675
|
if (!primaryTree)
|
|
650
676
|
return null;
|
|
677
|
+
// Compile partial-UNIQUE predicate ad-hoc (cold path: an auto-index normally
|
|
678
|
+
// services this check, so this branch fires only for pathological schemas).
|
|
679
|
+
const predicate = uc.predicate
|
|
680
|
+
? compilePredicate(uc.predicate, schema.columns)
|
|
681
|
+
: undefined;
|
|
651
682
|
for (const path of primaryTree.ascending(primaryTree.first())) {
|
|
652
683
|
const existingRow = primaryTree.at(path);
|
|
653
684
|
const existingPK = this.primaryKeyFromRow(existingRow);
|
|
654
685
|
if (this.comparePrimaryKeys(newPrimaryKey, existingPK) === 0)
|
|
655
686
|
continue;
|
|
687
|
+
if (predicate && predicate.evaluate(existingRow) !== true)
|
|
688
|
+
continue;
|
|
656
689
|
const allMatch = uc.columns.every(colIdx => compareSqlValues(newRowData[colIdx], existingRow[colIdx]) === 0);
|
|
657
690
|
if (!allMatch)
|
|
658
691
|
continue;
|
|
@@ -725,10 +758,13 @@ export class MemoryTableManager {
|
|
|
725
758
|
throw new QuereusError(`Duplicate column name: ${newColumnSchema.name}`, StatusCode.ERROR);
|
|
726
759
|
}
|
|
727
760
|
let defaultValue = null;
|
|
761
|
+
let defaultIsLiteral = false;
|
|
728
762
|
const defaultConstraint = columnDefAst.constraints.find(c => c.type === 'default');
|
|
729
763
|
if (defaultConstraint && defaultConstraint.expr) {
|
|
730
|
-
|
|
731
|
-
|
|
764
|
+
const folded = tryFoldLiteral(defaultConstraint.expr);
|
|
765
|
+
if (folded !== undefined) {
|
|
766
|
+
defaultValue = folded;
|
|
767
|
+
defaultIsLiteral = true;
|
|
732
768
|
}
|
|
733
769
|
else {
|
|
734
770
|
logger.warn('Add Column', this._tableName, 'Default for new col is expr; existing rows get NULL.', { columnName: newColumnSchema.name });
|
|
@@ -737,7 +773,7 @@ export class MemoryTableManager {
|
|
|
737
773
|
// Check for NOT NULL constraint (could be explicit or from default behavior)
|
|
738
774
|
// Allow NOT NULL without DEFAULT if table is empty (SQLite-compatible)
|
|
739
775
|
const tableHasRows = this.baseLayer.primaryTree.at(this.baseLayer.primaryTree.first()) !== undefined;
|
|
740
|
-
if (newColumnSchema.notNull && defaultValue === null && !
|
|
776
|
+
if (newColumnSchema.notNull && defaultValue === null && !defaultIsLiteral && tableHasRows) {
|
|
741
777
|
throw new QuereusError(`Cannot add NOT NULL column '${newColumnSchema.name}' to non-empty table `
|
|
742
778
|
+ `'${this.schemaName}.${this._tableName}' without a DEFAULT value`, StatusCode.CONSTRAINT);
|
|
743
779
|
}
|
|
@@ -915,8 +951,8 @@ export class MemoryTableManager {
|
|
|
915
951
|
// Tightening: scan for NULLs. If DEFAULT present, backfill first.
|
|
916
952
|
const defaultExpr = oldCol.defaultValue;
|
|
917
953
|
let defaultLiteral;
|
|
918
|
-
if (defaultExpr
|
|
919
|
-
defaultLiteral =
|
|
954
|
+
if (defaultExpr) {
|
|
955
|
+
defaultLiteral = tryFoldLiteral(defaultExpr);
|
|
920
956
|
}
|
|
921
957
|
const tree = this.baseLayer.primaryTree;
|
|
922
958
|
const nullRows = [];
|
|
@@ -1042,6 +1078,7 @@ export class MemoryTableManager {
|
|
|
1042
1078
|
const newConstraint = {
|
|
1043
1079
|
name: newIndexSchemaEntry.name,
|
|
1044
1080
|
columns: Object.freeze(newIndexSchemaEntry.columns.map(c => c.index)),
|
|
1081
|
+
predicate: newIndexSchemaEntry.predicate,
|
|
1045
1082
|
};
|
|
1046
1083
|
updatedUniqueConstraints = Object.freeze([
|
|
1047
1084
|
...(this.tableSchema.uniqueConstraints ?? []),
|
|
@@ -1220,4 +1257,17 @@ export class MemoryTableManager {
|
|
|
1220
1257
|
yield* scanLayerImpl(layer, plan);
|
|
1221
1258
|
}
|
|
1222
1259
|
}
|
|
1260
|
+
/**
|
|
1261
|
+
* Returns the first non-undefined `defaultConflict` declared on a primary-key
|
|
1262
|
+
* column. PK conflicts conceptually point at the table's PK; if any PK column
|
|
1263
|
+
* had `ON CONFLICT <action>` declared at column level, use that.
|
|
1264
|
+
*/
|
|
1265
|
+
function resolvePkDefaultConflict(schema) {
|
|
1266
|
+
for (const def of schema.primaryKeyDefinition) {
|
|
1267
|
+
const col = schema.columns[def.index];
|
|
1268
|
+
if (col && col.defaultConflict !== undefined)
|
|
1269
|
+
return col.defaultConflict;
|
|
1270
|
+
}
|
|
1271
|
+
return undefined;
|
|
1272
|
+
}
|
|
1223
1273
|
//# sourceMappingURL=manager.js.map
|