@quereus/quereus 2.6.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/README.md +222 -439
- 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 +10 -4
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +58 -18
- 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/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +3 -2
- package/dist/src/func/builtins/index.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-tvf.js +2 -2
- package/dist/src/func/builtins/json-tvf.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 +2 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +33 -16
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +14 -21
- package/dist/src/func/builtins/schema.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 +17 -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 +55 -104
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +5 -2
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +184 -26
- 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 +32 -2
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/validation/returning-qualifier-validator.d.ts +8 -0
- package/dist/src/planner/validation/returning-qualifier-validator.d.ts.map +1 -0
- package/dist/src/planner/validation/returning-qualifier-validator.js +63 -0
- package/dist/src/planner/validation/returning-qualifier-validator.js.map +1 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +3 -0
- package/dist/src/runtime/deferred-constraint-queue.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/pragma.d.ts.map +1 -1
- package/dist/src/runtime/emit/pragma.js +3 -4
- package/dist/src/runtime/emit/pragma.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 +6 -4
- 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 +39 -3
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +219 -20
- 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 +67 -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/key-serializer.d.ts +3 -0
- package/dist/src/util/key-serializer.d.ts.map +1 -1
- package/dist/src/util/key-serializer.js +19 -2
- package/dist/src/util/key-serializer.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/util/plugin-helper.js +1 -1
- package/dist/src/util/plugin-helper.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/connection.d.ts +7 -0
- package/dist/src/vtab/connection.d.ts.map +1 -1
- package/dist/src/vtab/manifest.d.ts +4 -0
- package/dist/src/vtab/manifest.d.ts.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 +77 -14
- 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 +28 -3
- 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
|
@@ -15,10 +15,14 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
15
15
|
mutationContextValues;
|
|
16
16
|
contextAttributes;
|
|
17
17
|
contextDescriptor;
|
|
18
|
+
onConflict;
|
|
19
|
+
notNullDefaults;
|
|
18
20
|
nodeType = PlanNodeType.ConstraintCheck;
|
|
19
21
|
constructor(scope, source, table, operation, oldRowDescriptor, newRowDescriptor, flatRowDescriptor, constraintChecks, mutationContextValues, // Mutation context value expressions
|
|
20
22
|
contextAttributes, // Mutation context attributes
|
|
21
|
-
contextDescriptor
|
|
23
|
+
contextDescriptor, // Mutation context row descriptor
|
|
24
|
+
onConflict, // Statement-level OR clause; resolves IGNORE/REPLACE/FAIL/ROLLBACK
|
|
25
|
+
notNullDefaults) {
|
|
22
26
|
super(scope);
|
|
23
27
|
this.source = source;
|
|
24
28
|
this.table = table;
|
|
@@ -30,6 +34,8 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
30
34
|
this.mutationContextValues = mutationContextValues;
|
|
31
35
|
this.contextAttributes = contextAttributes;
|
|
32
36
|
this.contextDescriptor = contextDescriptor;
|
|
37
|
+
this.onConflict = onConflict;
|
|
38
|
+
this.notNullDefaults = notNullDefaults;
|
|
33
39
|
}
|
|
34
40
|
getType() {
|
|
35
41
|
return this.source.getType();
|
|
@@ -47,14 +53,22 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
47
53
|
this.constraintChecks.forEach(check => {
|
|
48
54
|
children.push(check.expression);
|
|
49
55
|
});
|
|
56
|
+
// Add NOT NULL DEFAULT evaluators so they participate in optimization too.
|
|
57
|
+
if (this.notNullDefaults) {
|
|
58
|
+
this.notNullDefaults.forEach(d => children.push(d.defaultNode));
|
|
59
|
+
}
|
|
50
60
|
return children;
|
|
51
61
|
}
|
|
52
62
|
withChildren(newChildren) {
|
|
53
|
-
const
|
|
63
|
+
const constraintCount = this.constraintChecks.length;
|
|
64
|
+
const defaultCount = this.notNullDefaults?.length ?? 0;
|
|
65
|
+
const expectedChildren = 1 + constraintCount + defaultCount;
|
|
54
66
|
if (newChildren.length !== expectedChildren) {
|
|
55
67
|
throw new Error(`ConstraintCheckNode expects ${expectedChildren} children, got ${newChildren.length}`);
|
|
56
68
|
}
|
|
57
|
-
const
|
|
69
|
+
const newSource = newChildren[0];
|
|
70
|
+
const newConstraintExprs = newChildren.slice(1, 1 + constraintCount);
|
|
71
|
+
const newDefaultExprs = newChildren.slice(1 + constraintCount);
|
|
58
72
|
// Type check the source
|
|
59
73
|
if (!isRelationalNode(newSource)) {
|
|
60
74
|
throw new Error('ConstraintCheckNode: first child must be a RelationalPlanNode');
|
|
@@ -66,9 +80,17 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
66
80
|
throw new Error(`ConstraintCheckNode: constraint child ${i + 1} must be a ScalarPlanNode`);
|
|
67
81
|
}
|
|
68
82
|
}
|
|
83
|
+
for (let i = 0; i < newDefaultExprs.length; i++) {
|
|
84
|
+
const expr = newDefaultExprs[i];
|
|
85
|
+
if (!isScalarNode(expr)) {
|
|
86
|
+
throw new Error(`ConstraintCheckNode: default child ${i + 1} must be a ScalarPlanNode`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
69
89
|
// Return same instance if nothing changed
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
const constraintsUnchanged = newConstraintExprs.every((expr, i) => expr === this.constraintChecks[i].expression);
|
|
91
|
+
const defaultsUnchanged = !this.notNullDefaults
|
|
92
|
+
|| newDefaultExprs.every((expr, i) => expr === this.notNullDefaults[i].defaultNode);
|
|
93
|
+
if (newSource === this.source && constraintsUnchanged && defaultsUnchanged) {
|
|
72
94
|
return this;
|
|
73
95
|
}
|
|
74
96
|
// Rebuild constraint checks with new expressions
|
|
@@ -76,8 +98,14 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
76
98
|
...check,
|
|
77
99
|
expression: newConstraintExprs[i]
|
|
78
100
|
}));
|
|
101
|
+
const newNotNullDefaults = this.notNullDefaults
|
|
102
|
+
? this.notNullDefaults.map((d, i) => ({
|
|
103
|
+
...d,
|
|
104
|
+
defaultNode: newDefaultExprs[i],
|
|
105
|
+
}))
|
|
106
|
+
: undefined;
|
|
79
107
|
// Create new instance
|
|
80
|
-
return new ConstraintCheckNode(this.scope, newSource, this.table, this.operation, this.oldRowDescriptor, this.newRowDescriptor, this.flatRowDescriptor, newConstraintChecks, this.mutationContextValues, this.contextAttributes, this.contextDescriptor);
|
|
108
|
+
return new ConstraintCheckNode(this.scope, newSource, this.table, this.operation, this.oldRowDescriptor, this.newRowDescriptor, this.flatRowDescriptor, newConstraintChecks, this.mutationContextValues, this.contextAttributes, this.contextDescriptor, this.onConflict, newNotNullDefaults);
|
|
81
109
|
}
|
|
82
110
|
get estimatedRows() {
|
|
83
111
|
return this.source.estimatedRows;
|
|
@@ -101,6 +129,8 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
101
129
|
constraintNames: this.constraintChecks.map(c => c.constraint.name || '_unnamed'),
|
|
102
130
|
hasOldDescriptor: !!this.oldRowDescriptor,
|
|
103
131
|
hasNewDescriptor: !!this.newRowDescriptor,
|
|
132
|
+
onConflict: this.onConflict,
|
|
133
|
+
notNullDefaults: this.notNullDefaults?.length ?? 0,
|
|
104
134
|
};
|
|
105
135
|
}
|
|
106
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint-check-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/constraint-check-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAoF,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5J,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"constraint-check-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/constraint-check-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAkC,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3L,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAkC,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3L,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAIhG;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,QAAS,YAAW,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB;aAK/F,MAAM,EAAE,kBAAkB;aAC1B,SAAS,EAAE,cAAc;IAL1C,SAAkB,QAAQ,uBAAuB;gBAGhD,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAE,cAAc,EACzC,qBAAqB,CAAC,EAAE,MAAM;IAM/B,OAAO,IAAI,YAAY;IAKvB,aAAa,IAAI,SAAS,SAAS,EAAE;IAKrC,WAAW,IAAI,SAAS,CAAC,kBAAkB,EAAE,cAAc,CAAC;IAI5D,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAOtC;IAED,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4B3E,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAMxD,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IA6BxD,YAAY,IAAI,cAAc,GAAG,IAAI;IAIrC,aAAa,CAAC,YAAY,EAAE,cAAc,GAAG,IAAI,GAAG,QAAQ;IAiB5D,aAAa,IAAI,SAAS,cAAc,EAAE;CAG1C"}
|
|
@@ -4,6 +4,7 @@ import { formatExpression } from '../../util/plan-formatter.js';
|
|
|
4
4
|
import { quereusError } from '../../common/errors.js';
|
|
5
5
|
import { StatusCode } from '../../common/types.js';
|
|
6
6
|
import { createTableInfoFromNode, extractConstraints } from '../analysis/constraint-extractor.js';
|
|
7
|
+
import { normalizePredicate } from '../analysis/predicate-normalizer.js';
|
|
7
8
|
/**
|
|
8
9
|
* Represents a filter operation (WHERE clause).
|
|
9
10
|
* It takes an input relation and a predicate expression,
|
|
@@ -108,9 +109,12 @@ export class FilterNode extends PlanNode {
|
|
|
108
109
|
}
|
|
109
110
|
return new FilterNode(this.scope, this.source, newPredicate);
|
|
110
111
|
}
|
|
111
|
-
// PredicateSourceCapable interface implementation
|
|
112
|
+
// PredicateSourceCapable interface implementation:
|
|
113
|
+
// expose a normalized form so plan-walk callers (constraint extractor, etc.)
|
|
114
|
+
// see canonical predicates regardless of NOT-wrapping in the source AST.
|
|
115
|
+
// Mirrors JoinNode.getPredicates().
|
|
112
116
|
getPredicates() {
|
|
113
|
-
return [this.predicate];
|
|
117
|
+
return [normalizePredicate(this.predicate)];
|
|
114
118
|
}
|
|
115
119
|
}
|
|
116
120
|
//# sourceMappingURL=filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/planner/nodes/filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAA0F,gBAAgB,EAAE,YAAY,EAA2B,MAAM,gBAAgB,CAAC;AAG3L,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../../src/planner/nodes/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlanNode, type RelationalPlanNode, type Attribute, type TableDescriptor } from './plan-node.js';
|
|
1
|
+
import { PlanNode, type RelationalPlanNode, type ScalarPlanNode, type Attribute, type TableDescriptor } from './plan-node.js';
|
|
2
2
|
import type { RelationType } from '../../common/datatype.js';
|
|
3
3
|
import { PlanNodeType } from './plan-node-type.js';
|
|
4
4
|
import type { Scope } from '../scopes/scope.js';
|
|
@@ -14,13 +14,15 @@ export declare class RecursiveCTENode extends PlanNode implements CTEPlanNode, C
|
|
|
14
14
|
readonly isUnionAll: boolean;
|
|
15
15
|
readonly materializationHint: 'materialized' | 'not_materialized' | undefined;
|
|
16
16
|
readonly maxRecursion?: number | undefined;
|
|
17
|
+
readonly limitExpr?: ScalarPlanNode | undefined;
|
|
18
|
+
readonly offsetExpr?: ScalarPlanNode | undefined;
|
|
17
19
|
readonly nodeType = PlanNodeType.RecursiveCTE;
|
|
18
20
|
readonly isRecursive = true;
|
|
19
21
|
readonly tableDescriptor: TableDescriptor;
|
|
20
22
|
private attributesCache;
|
|
21
23
|
private typeCache;
|
|
22
24
|
private _recursiveCaseQuery;
|
|
23
|
-
constructor(scope: Scope, cteName: string, columns: string[] | undefined, baseCaseQuery: RelationalPlanNode, recursiveCaseQuery: RelationalPlanNode, isUnionAll: boolean, materializationHint?: 'materialized' | 'not_materialized' | undefined, maxRecursion?: number | undefined, tableDescriptor?: TableDescriptor);
|
|
25
|
+
constructor(scope: Scope, cteName: string, columns: string[] | undefined, baseCaseQuery: RelationalPlanNode, recursiveCaseQuery: RelationalPlanNode, isUnionAll: boolean, materializationHint?: 'materialized' | 'not_materialized' | undefined, maxRecursion?: number | undefined, tableDescriptor?: TableDescriptor, limitExpr?: ScalarPlanNode | undefined, offsetExpr?: ScalarPlanNode | undefined);
|
|
24
26
|
get recursiveCaseQuery(): RelationalPlanNode;
|
|
25
27
|
/**
|
|
26
28
|
* Sets the recursive case query after construction.
|
|
@@ -31,7 +33,7 @@ export declare class RecursiveCTENode extends PlanNode implements CTEPlanNode, C
|
|
|
31
33
|
private buildType;
|
|
32
34
|
getAttributes(): Attribute[];
|
|
33
35
|
getType(): RelationType;
|
|
34
|
-
getChildren(): readonly [
|
|
36
|
+
getChildren(): readonly PlanNode[];
|
|
35
37
|
get source(): RelationalPlanNode;
|
|
36
38
|
getRelations(): readonly [RelationalPlanNode];
|
|
37
39
|
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recursive-cte-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/recursive-cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAoB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"recursive-cte-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/recursive-cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAoB,MAAM,gBAAgB,CAAC;AAChJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,QAAS,YAAW,WAAW,EAAE,YAAY;aAWjE,OAAO,EAAE,MAAM;aACf,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;aAC7B,aAAa,EAAE,kBAAkB;aAEjC,UAAU,EAAE,OAAO;aACnB,mBAAmB,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS;aACpE,YAAY,CAAC,EAAE,MAAM;aAErB,SAAS,CAAC,EAAE,cAAc;aAC1B,UAAU,CAAC,EAAE,cAAc;IAnB5C,QAAQ,CAAC,QAAQ,6BAA6B;IAC9C,QAAQ,CAAC,WAAW,QAAQ;IAC5B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAE1C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,mBAAmB,CAAqB;gBAG/C,KAAK,EAAE,KAAK,EACI,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,aAAa,EAAE,kBAAkB,EACjD,kBAAkB,EAAE,kBAAkB,EACtB,UAAU,EAAE,OAAO,EACnB,mBAAmB,GAAE,cAAc,GAAG,kBAAkB,GAAG,SAA0B,EACrF,YAAY,CAAC,EAAE,MAAM,YAAA,EACrC,eAAe,CAAC,EAAE,eAAe,EACjB,SAAS,CAAC,EAAE,cAAc,YAAA,EAC1B,UAAU,CAAC,EAAE,cAAc,YAAA;IAS5C,IAAI,kBAAkB,IAAI,kBAAkB,CAE3C;IAED;;;OAGG;IACH,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAOtD,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,SAAS;IAcjB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAIvB,WAAW,IAAI,SAAS,QAAQ,EAAE;IAQlC,IAAI,MAAM,IAAI,kBAAkB,CAE/B;IAED,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IA6C/C,QAAQ,IAAI,MAAM;IAQlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYxD"}
|
|
@@ -12,13 +12,15 @@ export class RecursiveCTENode extends PlanNode {
|
|
|
12
12
|
isUnionAll;
|
|
13
13
|
materializationHint;
|
|
14
14
|
maxRecursion;
|
|
15
|
+
limitExpr;
|
|
16
|
+
offsetExpr;
|
|
15
17
|
nodeType = PlanNodeType.RecursiveCTE;
|
|
16
18
|
isRecursive = true; // Always true for recursive CTEs
|
|
17
19
|
tableDescriptor;
|
|
18
20
|
attributesCache;
|
|
19
21
|
typeCache;
|
|
20
22
|
_recursiveCaseQuery;
|
|
21
|
-
constructor(scope, cteName, columns, baseCaseQuery, recursiveCaseQuery, isUnionAll, materializationHint = 'materialized', maxRecursion, tableDescriptor) {
|
|
23
|
+
constructor(scope, cteName, columns, baseCaseQuery, recursiveCaseQuery, isUnionAll, materializationHint = 'materialized', maxRecursion, tableDescriptor, limitExpr, offsetExpr) {
|
|
22
24
|
super(scope, baseCaseQuery.getTotalCost() + recursiveCaseQuery.getTotalCost() + 50); // Higher cost for recursion
|
|
23
25
|
this.cteName = cteName;
|
|
24
26
|
this.columns = columns;
|
|
@@ -26,6 +28,8 @@ export class RecursiveCTENode extends PlanNode {
|
|
|
26
28
|
this.isUnionAll = isUnionAll;
|
|
27
29
|
this.materializationHint = materializationHint;
|
|
28
30
|
this.maxRecursion = maxRecursion;
|
|
31
|
+
this.limitExpr = limitExpr;
|
|
32
|
+
this.offsetExpr = offsetExpr;
|
|
29
33
|
this._recursiveCaseQuery = recursiveCaseQuery;
|
|
30
34
|
this.tableDescriptor = tableDescriptor || {}; // Identity object for table context lookup
|
|
31
35
|
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
@@ -77,7 +81,12 @@ export class RecursiveCTENode extends PlanNode {
|
|
|
77
81
|
return this.typeCache.value;
|
|
78
82
|
}
|
|
79
83
|
getChildren() {
|
|
80
|
-
|
|
84
|
+
const children = [this.baseCaseQuery, this.recursiveCaseQuery];
|
|
85
|
+
if (this.limitExpr)
|
|
86
|
+
children.push(this.limitExpr);
|
|
87
|
+
if (this.offsetExpr)
|
|
88
|
+
children.push(this.offsetExpr);
|
|
89
|
+
return children;
|
|
81
90
|
}
|
|
82
91
|
// For recursive CTEs, we consider the base case as the primary source
|
|
83
92
|
get source() {
|
|
@@ -87,20 +96,27 @@ export class RecursiveCTENode extends PlanNode {
|
|
|
87
96
|
return [this.baseCaseQuery];
|
|
88
97
|
}
|
|
89
98
|
withChildren(newChildren) {
|
|
90
|
-
|
|
91
|
-
|
|
99
|
+
const expectedLength = 2 + (this.limitExpr ? 1 : 0) + (this.offsetExpr ? 1 : 0);
|
|
100
|
+
if (newChildren.length !== expectedLength) {
|
|
101
|
+
throw new Error(`RecursiveCTENode expects ${expectedLength} children, got ${newChildren.length}`);
|
|
92
102
|
}
|
|
93
|
-
const [newBaseCaseQuery, newRecursiveCaseQuery] = newChildren;
|
|
103
|
+
const [newBaseCaseQuery, newRecursiveCaseQuery, ...rest] = newChildren;
|
|
94
104
|
// Type check
|
|
95
105
|
if (!isRelationalNode(newBaseCaseQuery) || !isRelationalNode(newRecursiveCaseQuery)) {
|
|
96
|
-
throw new Error('RecursiveCTENode: children must be RelationalPlanNodes');
|
|
106
|
+
throw new Error('RecursiveCTENode: first two children must be RelationalPlanNodes');
|
|
97
107
|
}
|
|
108
|
+
let restIndex = 0;
|
|
109
|
+
const newLimitExpr = this.limitExpr ? rest[restIndex++] : undefined;
|
|
110
|
+
const newOffsetExpr = this.offsetExpr ? rest[restIndex++] : undefined;
|
|
98
111
|
// Return same instance if nothing changed
|
|
99
|
-
if (newBaseCaseQuery === this.baseCaseQuery
|
|
112
|
+
if (newBaseCaseQuery === this.baseCaseQuery
|
|
113
|
+
&& newRecursiveCaseQuery === this.recursiveCaseQuery
|
|
114
|
+
&& newLimitExpr === this.limitExpr
|
|
115
|
+
&& newOffsetExpr === this.offsetExpr) {
|
|
100
116
|
return this;
|
|
101
117
|
}
|
|
102
118
|
// Create new instance with updated children
|
|
103
|
-
const newNode = new RecursiveCTENode(this.scope, this.cteName, this.columns, newBaseCaseQuery, newRecursiveCaseQuery, this.isUnionAll, this.materializationHint, this.maxRecursion, this.tableDescriptor);
|
|
119
|
+
const newNode = new RecursiveCTENode(this.scope, this.cteName, this.columns, newBaseCaseQuery, newRecursiveCaseQuery, this.isUnionAll, this.materializationHint, this.maxRecursion, this.tableDescriptor, newLimitExpr, newOffsetExpr);
|
|
104
120
|
return newNode;
|
|
105
121
|
}
|
|
106
122
|
toString() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recursive-cte-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/recursive-cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"recursive-cte-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/recursive-cte-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"returning-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/returning-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO7D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,kBAAkB;aAQrD,QAAQ,EAAE,kBAAkB;aAC5B,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC;IARjE,SAAkB,QAAQ,0BAA0B;IAEpD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA+B;gBAGpD,KAAK,EAAE,KAAK,EACI,QAAQ,EAAE,kBAAkB,EAAE,8CAA8C;IAC5E,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAC/D,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAe7C,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"returning-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/returning-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO7D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,kBAAkB;aAQrD,QAAQ,EAAE,kBAAkB;aAC5B,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC;IARjE,SAAkB,QAAQ,0BAA0B;IAEpD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA+B;gBAGpD,KAAK,EAAE,KAAK,EACI,QAAQ,EAAE,kBAAkB,EAAE,8CAA8C;IAC5E,WAAW,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAC/D,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAe7C,OAAO,CAAC,eAAe;IA6DvB,OAAO,CAAC,eAAe;IAqCvB,OAAO,IAAI,YAAY;IAIvB,aAAa,IAAI,SAAS,SAAS,EAAE;IAIrC,YAAY,IAAI,SAAS,kBAAkB,EAAE;IAK7C,WAAW,IAAI,SAAS,QAAQ,EAAE;IAKlC,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAgDxD,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8B3E,QAAQ,IAAI,MAAM;IAOlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUzD"}
|
|
@@ -37,25 +37,18 @@ export class ReturningNode extends PlanNode {
|
|
|
37
37
|
const columnNames = [];
|
|
38
38
|
const nameCount = new Map();
|
|
39
39
|
const columns = this.projections.map((proj) => {
|
|
40
|
-
// Determine base column name
|
|
40
|
+
// Determine base column name; preserve the spelling supplied by the user
|
|
41
|
+
// (matches ProjectNode behaviour for SELECT — case-insensitive matching is
|
|
42
|
+
// a resolution concern, not an output-name concern).
|
|
41
43
|
let baseName;
|
|
42
44
|
if (proj.alias) {
|
|
43
|
-
baseName = proj.alias
|
|
45
|
+
baseName = proj.alias;
|
|
44
46
|
}
|
|
45
47
|
else if (proj.node instanceof ColumnReferenceNode) {
|
|
46
|
-
// For column references, check if there's a table qualifier (like NEW or OLD)
|
|
47
48
|
const expr = proj.node.expression;
|
|
48
|
-
|
|
49
|
-
// Use qualified name for NEW.id, OLD.id, etc., normalized to lowercase
|
|
50
|
-
baseName = `${expr.table.toLowerCase()}.${expr.name.toLowerCase()}`;
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// Use the unqualified column name, normalized to lowercase
|
|
54
|
-
baseName = expr.name.toLowerCase();
|
|
55
|
-
}
|
|
49
|
+
baseName = expr.table ? `${expr.table}.${expr.name}` : expr.name;
|
|
56
50
|
}
|
|
57
51
|
else {
|
|
58
|
-
// For expressions, use the string representation
|
|
59
52
|
baseName = expressionToString(proj.node.expression);
|
|
60
53
|
}
|
|
61
54
|
// Handle duplicate names
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"returning-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/returning-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2C,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AASjE;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAQvB;IACA;IARA,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC;IAE5C,eAAe,CAAuB;IACtC,eAAe,CAA+B;IAEtD,YACE,KAAY,EACI,QAA4B,EAAE,8CAA8C;IAC5E,WAA+C;IAC/D,4EAA4E;IAC5E,oBAA2C;QAE3C,KAAK,CAAC,KAAK,CAAC,CAAC;QALG,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,gBAAW,GAAX,WAAW,CAAoC;QAM/D,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE;YACrC,qEAAqE;YACrE,IAAI,oBAAoB,EAAE,CAAC;gBACzB,OAAO,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,gBAAgB;YACvD,CAAC;YAED,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,kEAAkE;QAClE,oDAAoD;QACpD,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5C,
|
|
1
|
+
{"version":3,"file":"returning-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/returning-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-select-access-path.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-select-access-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAmB7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA0DzF"}
|
|
@@ -73,16 +73,15 @@ function createIndexBasedAccess(retrieveNode, context) {
|
|
|
73
73
|
const tableSchema = retrieveNode.tableRef.tableSchema;
|
|
74
74
|
const vtabModule = retrieveNode.vtabModule;
|
|
75
75
|
// Check if we have pre-computed access plan from ruleGrowRetrieve
|
|
76
|
-
const indexCtx = retrieveNode.moduleCtx; // IndexStyleContext from grow rule
|
|
77
76
|
let accessPlan;
|
|
78
77
|
let constraints;
|
|
79
78
|
let residualPredicate;
|
|
80
|
-
if (
|
|
79
|
+
if (isIndexStyleContext(retrieveNode.moduleCtx)) {
|
|
81
80
|
// Use pre-computed access plan from grow rule
|
|
82
81
|
log('Using pre-computed access plan from grow rule');
|
|
83
|
-
accessPlan =
|
|
84
|
-
constraints =
|
|
85
|
-
residualPredicate =
|
|
82
|
+
accessPlan = retrieveNode.moduleCtx.accessPlan;
|
|
83
|
+
constraints = retrieveNode.moduleCtx.originalConstraints || [];
|
|
84
|
+
residualPredicate = retrieveNode.moduleCtx.residualPredicate;
|
|
86
85
|
}
|
|
87
86
|
else {
|
|
88
87
|
// Extract constraints from grown pipeline in source using table instance key
|
|
@@ -249,10 +248,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
249
248
|
// otherwise construct literal nodes from values
|
|
250
249
|
const seekKeys = Array.isArray(inConstraint.valueExpr)
|
|
251
250
|
? inConstraint.valueExpr
|
|
252
|
-
: inValues.map(v =>
|
|
253
|
-
const lit = { type: 'literal', value: v };
|
|
254
|
-
return new LiteralNode(tableRef.scope, lit);
|
|
255
|
-
});
|
|
251
|
+
: inValues.map(v => literalFromValue(tableRef.scope, v));
|
|
256
252
|
const inConstraints = inValues.map((_v, i) => ({
|
|
257
253
|
constraint: { iColumn: colIdx, op: IndexConstraintOp.EQ, usable: true },
|
|
258
254
|
argvIndex: i + 1,
|
|
@@ -292,9 +288,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
292
288
|
if (cv.exprs && cv.exprs[valueIdx]) {
|
|
293
289
|
return cv.exprs[valueIdx];
|
|
294
290
|
}
|
|
295
|
-
|
|
296
|
-
const lit = { type: 'literal', value: v };
|
|
297
|
-
return new LiteralNode(tableRef.scope, lit);
|
|
291
|
+
return literalFromValue(tableRef.scope, cv.values[valueIdx]);
|
|
298
292
|
}));
|
|
299
293
|
// Build seek constraints: one EQ constraint per value in the flattened args
|
|
300
294
|
const seekConstraints = seekKeys.map((_sk, i) => ({
|
|
@@ -315,8 +309,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
315
309
|
if (c.valueExpr && !Array.isArray(c.valueExpr))
|
|
316
310
|
return c.valueExpr;
|
|
317
311
|
const val = c.op === 'IN' && Array.isArray(c.value) ? c.value[0] : c.value;
|
|
318
|
-
|
|
319
|
-
return new LiteralNode(tableRef.scope, lit);
|
|
312
|
+
return literalFromValue(tableRef.scope, val);
|
|
320
313
|
});
|
|
321
314
|
const eqConstraints = seekCols.map((colIdx, i) => ({
|
|
322
315
|
constraint: { iColumn: colIdx, op: IndexConstraintOp.EQ, usable: true },
|
|
@@ -359,7 +352,7 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
359
352
|
const val = c.op === 'IN' && Array.isArray(c.value) ? c.value[0] : c.value;
|
|
360
353
|
seekKeys.push(c.valueExpr && !Array.isArray(c.valueExpr)
|
|
361
354
|
? c.valueExpr
|
|
362
|
-
:
|
|
355
|
+
: literalFromValue(tableRef.scope, val));
|
|
363
356
|
allConstraints.push({ constraint: { iColumn: colIdx, op: IndexConstraintOp.EQ, usable: true }, argvIndex: argv });
|
|
364
357
|
argv++;
|
|
365
358
|
}
|
|
@@ -369,12 +362,12 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
369
362
|
const upper = trailingConstraints.find(c => (c.op === '<' || c.op === '<=') && handledByCol.has(c.columnIndex));
|
|
370
363
|
if (lower) {
|
|
371
364
|
allConstraints.push({ constraint: { iColumn: trailingRangeCol, op: opToIndexOp(lower.op), usable: true }, argvIndex: argv });
|
|
372
|
-
seekKeys.push(lower.valueExpr && !Array.isArray(lower.valueExpr) ? lower.valueExpr :
|
|
365
|
+
seekKeys.push(lower.valueExpr && !Array.isArray(lower.valueExpr) ? lower.valueExpr : literalFromValue(tableRef.scope, lower.value));
|
|
373
366
|
argv++;
|
|
374
367
|
}
|
|
375
368
|
if (upper) {
|
|
376
369
|
allConstraints.push({ constraint: { iColumn: trailingRangeCol, op: opToIndexOp(upper.op), usable: true }, argvIndex: argv });
|
|
377
|
-
seekKeys.push(upper.valueExpr && !Array.isArray(upper.valueExpr) ? upper.valueExpr :
|
|
370
|
+
seekKeys.push(upper.valueExpr && !Array.isArray(upper.valueExpr) ? upper.valueExpr : literalFromValue(tableRef.scope, upper.value));
|
|
378
371
|
argv++;
|
|
379
372
|
}
|
|
380
373
|
const fi = {
|
|
@@ -401,12 +394,12 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
401
394
|
let argv = 1;
|
|
402
395
|
if (lower) {
|
|
403
396
|
rangeConstraints.push({ constraint: { iColumn: rangeCol, op: opToIndexOp(lower.op), usable: true }, argvIndex: argv });
|
|
404
|
-
seekKeys.push(lower.valueExpr && !Array.isArray(lower.valueExpr) ? lower.valueExpr :
|
|
397
|
+
seekKeys.push(lower.valueExpr && !Array.isArray(lower.valueExpr) ? lower.valueExpr : literalFromValue(tableRef.scope, lower.value));
|
|
405
398
|
argv++;
|
|
406
399
|
}
|
|
407
400
|
if (upper) {
|
|
408
401
|
rangeConstraints.push({ constraint: { iColumn: rangeCol, op: opToIndexOp(upper.op), usable: true }, argvIndex: argv });
|
|
409
|
-
seekKeys.push(upper.valueExpr && !Array.isArray(upper.valueExpr) ? upper.valueExpr :
|
|
402
|
+
seekKeys.push(upper.valueExpr && !Array.isArray(upper.valueExpr) ? upper.valueExpr : literalFromValue(tableRef.scope, upper.value));
|
|
410
403
|
argv++;
|
|
411
404
|
}
|
|
412
405
|
const fi = {
|
|
@@ -432,13 +425,13 @@ function selectPhysicalNodeFromPlan(tableRef, accessPlan, constraints, filterInf
|
|
|
432
425
|
const opStr = range.lower.op === '>=' ? 'ge' : 'gt';
|
|
433
426
|
parts.push(opStr);
|
|
434
427
|
seekKeys.push(range.lower.valueExpr
|
|
435
|
-
??
|
|
428
|
+
?? literalFromValue(tableRef.scope, range.lower.value));
|
|
436
429
|
}
|
|
437
430
|
if (range.upper) {
|
|
438
431
|
const opStr = range.upper.op === '<=' ? 'le' : 'lt';
|
|
439
432
|
parts.push(opStr);
|
|
440
433
|
seekKeys.push(range.upper.valueExpr
|
|
441
|
-
??
|
|
434
|
+
?? literalFromValue(tableRef.scope, range.upper.value));
|
|
442
435
|
}
|
|
443
436
|
rangeOps.push(parts.join(':'));
|
|
444
437
|
}
|
|
@@ -498,10 +491,9 @@ function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo,
|
|
|
498
491
|
if ((hasEqualityConstraints && coversPk || treatAsHandledPk) && maybeRows <= 10) {
|
|
499
492
|
const seekKeys = pkCols.map(pk => {
|
|
500
493
|
const c = eqByCol.get(pk.index);
|
|
501
|
-
if (c.valueExpr)
|
|
494
|
+
if (c.valueExpr && !Array.isArray(c.valueExpr))
|
|
502
495
|
return c.valueExpr;
|
|
503
|
-
|
|
504
|
-
return new LiteralNode(tableRef.scope, lit);
|
|
496
|
+
return literalFromValue(tableRef.scope, c.value);
|
|
505
497
|
});
|
|
506
498
|
const eqConstraints = pkCols.map((pk, i) => ({
|
|
507
499
|
constraint: { iColumn: pk.index, op: IndexConstraintOp.EQ, usable: true },
|
|
@@ -527,12 +519,12 @@ function selectPhysicalNodeLegacy(tableRef, accessPlan, constraints, filterInfo,
|
|
|
527
519
|
let argv = 1;
|
|
528
520
|
if (lower) {
|
|
529
521
|
rangeConstraints.push({ constraint: { iColumn: primaryFirstCol, op: opToIndexOp(lower.op), usable: true }, argvIndex: argv });
|
|
530
|
-
seekKeys.push(lower.valueExpr ? lower.valueExpr :
|
|
522
|
+
seekKeys.push(lower.valueExpr && !Array.isArray(lower.valueExpr) ? lower.valueExpr : literalFromValue(tableRef.scope, lower.value));
|
|
531
523
|
argv++;
|
|
532
524
|
}
|
|
533
525
|
if (upper) {
|
|
534
526
|
rangeConstraints.push({ constraint: { iColumn: primaryFirstCol, op: opToIndexOp(upper.op), usable: true }, argvIndex: argv });
|
|
535
|
-
seekKeys.push(upper.valueExpr ? upper.valueExpr :
|
|
527
|
+
seekKeys.push(upper.valueExpr && !Array.isArray(upper.valueExpr) ? upper.valueExpr : literalFromValue(tableRef.scope, upper.value));
|
|
536
528
|
argv++;
|
|
537
529
|
}
|
|
538
530
|
const fi = {
|
|
@@ -607,4 +599,8 @@ function opToIndexOp(op) {
|
|
|
607
599
|
case '<=': return IndexConstraintOp.LE;
|
|
608
600
|
}
|
|
609
601
|
}
|
|
602
|
+
function literalFromValue(scope, value) {
|
|
603
|
+
const lit = { type: 'literal', value };
|
|
604
|
+
return new LiteralNode(scope, lit);
|
|
605
|
+
}
|
|
610
606
|
//# sourceMappingURL=rule-select-access-path.js.map
|