@quereus/quereus 2.8.0 → 2.9.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/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +0 -3
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/parser/ast.d.ts +3 -2
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +13 -4
- package/dist/src/parser/parser.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 +3 -2
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/select.js +14 -2
- 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 +10 -6
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +3 -1
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +7 -0
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts +22 -1
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +47 -0
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +2 -0
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asof-scan-node.js +223 -0
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +7 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +2 -0
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/function.d.ts +11 -1
- package/dist/src/planner/nodes/function.d.ts.map +1 -1
- package/dist/src/planner/nodes/function.js +94 -1
- package/dist/src/planner/nodes/function.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +2 -0
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +10 -2
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +19 -1
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +46 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +2 -0
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +4 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js +127 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts +2 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +2 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +130 -1
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +49 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +6 -1
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +4 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +16 -0
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +7 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +100 -1
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +9 -0
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +20 -0
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +2 -0
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +37 -2
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +87 -10
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +1 -3
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +3 -9
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +61 -2
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +64 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +9 -0
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +3 -0
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +91 -0
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
- 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 +31 -10
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
- 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 -122
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
- package/dist/src/runtime/context-helpers.d.ts +9 -0
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +5 -0
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/asof-scan.js +467 -0
- package/dist/src/runtime/emit/asof-scan.js.map +1 -0
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +20 -0
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
- package/dist/src/runtime/emit/ordinal-slice.js +89 -0
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +9 -4
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts +19 -3
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +12 -8
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +91 -14
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +732 -37
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +5 -4
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +4 -0
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +10 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +29 -6
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/function.d.ts +24 -0
- 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 +10 -0
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +10 -0
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +18 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +307 -42
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +11 -0
- package/dist/src/types/logical-type.d.ts.map +1 -1
- package/dist/src/types/logical-type.js.map +1 -1
- package/dist/src/util/ast-literal.d.ts +11 -0
- package/dist/src/util/ast-literal.d.ts.map +1 -0
- package/dist/src/util/ast-literal.js +26 -0
- package/dist/src/util/ast-literal.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +41 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +29 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/filter-info.d.ts +14 -0
- package/dist/src/vtab/filter-info.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +39 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +206 -44
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/module.d.ts +24 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
+
import { PlanNode, isRelationalNode } from './plan-node.js';
|
|
3
|
+
import { formatExpression } from '../../util/plan-formatter.js';
|
|
4
|
+
import { quereusError } from '../../common/errors.js';
|
|
5
|
+
import { StatusCode } from '../../common/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Physical node representing a monotonic LIMIT/OFFSET pushdown over an
|
|
8
|
+
* access path that advertises `supportsOrdinalSeek`. Replaces the
|
|
9
|
+
* `LimitOffset(over Sort?(over scan))` shape when the optimizer can prove
|
|
10
|
+
* the rewrite is safe.
|
|
11
|
+
*
|
|
12
|
+
* Semantics: emit at most `limitExpr` rows starting at the `offsetExpr`-th
|
|
13
|
+
* row of `source` in the leaf's monotonic emit order. The leaf is expected
|
|
14
|
+
* to honor the offset/limit through `FilterInfo.offset` / `FilterInfo.limit`;
|
|
15
|
+
* the emitter forwards both to the underlying scan and then enforces the
|
|
16
|
+
* row cap as a streaming guard.
|
|
17
|
+
*
|
|
18
|
+
* Children order: `[source, offsetExpr?, limitExpr?]`. Offset is first
|
|
19
|
+
* because it is the field that distinguishes this node from a plain LIMIT.
|
|
20
|
+
*/
|
|
21
|
+
export class OrdinalSliceNode extends PlanNode {
|
|
22
|
+
source;
|
|
23
|
+
attrId;
|
|
24
|
+
offsetExpr;
|
|
25
|
+
limitExpr;
|
|
26
|
+
direction;
|
|
27
|
+
nodeType = PlanNodeType.OrdinalSlice;
|
|
28
|
+
constructor(scope, source,
|
|
29
|
+
/** Attribute the leaf is monotonic on. Stable across plan transformations. */
|
|
30
|
+
attrId,
|
|
31
|
+
/** 0-based first-emitted ordinal. `undefined` ⇒ 0. */
|
|
32
|
+
offsetExpr,
|
|
33
|
+
/** Maximum rows to emit. `undefined` ⇒ unbounded. */
|
|
34
|
+
limitExpr,
|
|
35
|
+
/** Direction inherited from the leaf's `monotonicOn`. */
|
|
36
|
+
direction, estimatedCostOverride) {
|
|
37
|
+
super(scope, estimatedCostOverride ?? source.getTotalCost());
|
|
38
|
+
this.source = source;
|
|
39
|
+
this.attrId = attrId;
|
|
40
|
+
this.offsetExpr = offsetExpr;
|
|
41
|
+
this.limitExpr = limitExpr;
|
|
42
|
+
this.direction = direction;
|
|
43
|
+
}
|
|
44
|
+
getType() {
|
|
45
|
+
return this.source.getType();
|
|
46
|
+
}
|
|
47
|
+
getAttributes() {
|
|
48
|
+
return this.source.getAttributes();
|
|
49
|
+
}
|
|
50
|
+
getChildren() {
|
|
51
|
+
const children = [this.source];
|
|
52
|
+
if (this.offsetExpr)
|
|
53
|
+
children.push(this.offsetExpr);
|
|
54
|
+
if (this.limitExpr)
|
|
55
|
+
children.push(this.limitExpr);
|
|
56
|
+
return children;
|
|
57
|
+
}
|
|
58
|
+
getRelations() {
|
|
59
|
+
return [this.source];
|
|
60
|
+
}
|
|
61
|
+
get estimatedRows() {
|
|
62
|
+
const sourceRows = this.source.estimatedRows;
|
|
63
|
+
if (sourceRows === undefined)
|
|
64
|
+
return undefined;
|
|
65
|
+
// We don't know the literal value of limitExpr here; use a conservative cap.
|
|
66
|
+
return this.limitExpr ? Math.min(sourceRows, 100) : sourceRows;
|
|
67
|
+
}
|
|
68
|
+
computePhysical(childrenPhysical) {
|
|
69
|
+
const sourcePhysical = childrenPhysical[0];
|
|
70
|
+
// Slicing a sorted prefix preserves ordering, uniqueKeys, and monotonicOn.
|
|
71
|
+
// accessCapabilities are NOT propagated past the slice — the slice consumed
|
|
72
|
+
// the ordinal-seek capability.
|
|
73
|
+
return {
|
|
74
|
+
estimatedRows: this.estimatedRows,
|
|
75
|
+
ordering: sourcePhysical?.ordering,
|
|
76
|
+
uniqueKeys: sourcePhysical?.uniqueKeys,
|
|
77
|
+
monotonicOn: sourcePhysical?.monotonicOn,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
toString() {
|
|
81
|
+
const parts = ['ORDINAL SLICE'];
|
|
82
|
+
if (this.offsetExpr)
|
|
83
|
+
parts.push(`OFFSET ${formatExpression(this.offsetExpr)}`);
|
|
84
|
+
if (this.limitExpr)
|
|
85
|
+
parts.push(`LIMIT ${formatExpression(this.limitExpr)}`);
|
|
86
|
+
parts.push(`(attr=${this.attrId} ${this.direction})`);
|
|
87
|
+
return parts.join(' ');
|
|
88
|
+
}
|
|
89
|
+
getLogicalAttributes() {
|
|
90
|
+
const props = {
|
|
91
|
+
attrId: this.attrId,
|
|
92
|
+
direction: this.direction,
|
|
93
|
+
};
|
|
94
|
+
if (this.offsetExpr)
|
|
95
|
+
props.offset = formatExpression(this.offsetExpr);
|
|
96
|
+
if (this.limitExpr)
|
|
97
|
+
props.limit = formatExpression(this.limitExpr);
|
|
98
|
+
return props;
|
|
99
|
+
}
|
|
100
|
+
withChildren(newChildren) {
|
|
101
|
+
const expectedLength = 1 + (this.offsetExpr ? 1 : 0) + (this.limitExpr ? 1 : 0);
|
|
102
|
+
if (newChildren.length !== expectedLength) {
|
|
103
|
+
quereusError(`OrdinalSliceNode expects ${expectedLength} children, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
104
|
+
}
|
|
105
|
+
const [newSource, ...rest] = newChildren;
|
|
106
|
+
if (!isRelationalNode(newSource)) {
|
|
107
|
+
quereusError('OrdinalSliceNode: first child must be a RelationalPlanNode', StatusCode.INTERNAL);
|
|
108
|
+
}
|
|
109
|
+
let newOffset;
|
|
110
|
+
let newLimit;
|
|
111
|
+
let idx = 0;
|
|
112
|
+
if (this.offsetExpr) {
|
|
113
|
+
newOffset = rest[idx++];
|
|
114
|
+
}
|
|
115
|
+
if (this.limitExpr) {
|
|
116
|
+
newLimit = rest[idx++];
|
|
117
|
+
}
|
|
118
|
+
const sourceChanged = newSource !== this.source;
|
|
119
|
+
const offsetChanged = newOffset !== this.offsetExpr;
|
|
120
|
+
const limitChanged = newLimit !== this.limitExpr;
|
|
121
|
+
if (!sourceChanged && !offsetChanged && !limitChanged) {
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
return new OrdinalSliceNode(this.scope, newSource, this.attrId, newOffset, newLimit, this.direction);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=ordinal-slice-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ordinal-slice-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/ordinal-slice-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,8 @@ export declare enum PlanNodeType {
|
|
|
44
44
|
NestedLoopJoin = "NestedLoopJoin",
|
|
45
45
|
HashJoin = "HashJoin",
|
|
46
46
|
MergeJoin = "MergeJoin",
|
|
47
|
+
AsofScan = "AsofScan",// Streaming asof join: per left row, latest right with key ≤ left's
|
|
48
|
+
OrdinalSlice = "OrdinalSlice",// O(log N) seek to kth row over a monotonic, ordinal-seek-capable leaf
|
|
47
49
|
Materialize = "Materialize",// Materialize intermediate results
|
|
48
50
|
Literal = "Literal",
|
|
49
51
|
ColumnReference = "ColumnReference",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-node-type.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node-type.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IAEtB,KAAK,UAAU;IACf,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,YAAY,iBAAiB;IAC7B,GAAG,QAAQ;IACX,YAAY,iBAAiB;IAC7B,uBAAuB,4BAA4B;IACnD,EAAE,OAAO;IACT,MAAM,WAAW;IACjB,UAAU,eAAe;IAGzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAG/B,OAAO,YAAY,CAAe,2BAA2B;IAC7D,SAAS,cAAc,CAAW,sBAAsB;IACxD,SAAS,cAAc,CAAW,sBAAsB;IACxD,WAAW,gBAAgB,CAAO,+CAA+C;IACjF,WAAW,gBAAgB,CAAO,kCAAkC;IACpE,eAAe,oBAAoB,CAAG,6BAA6B;IACnE,aAAa,kBAAkB,CAAO,0BAA0B;IAChE,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,WAAW,gBAAgB,CAAO,mCAAmC;IAGrE,OAAO,YAAY;IACnB,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,cAAc,mBAAmB;IACjC,sBAAsB,2BAA2B;IACjD,iBAAiB,sBAAsB;IAGvC,KAAK,UAAU,CAAG,kDAAkD;IACpE,MAAM,WAAW;IAClB,YAAY,iBAAiB;IAC5B,SAAS,cAAc,CAAG,0BAA0B;IACpD,iBAAiB,sBAAsB;IAGvC,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IAGvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAG/B,KAAK,UAAU;IACf,IAAI,SAAS;IAGb,SAAS,cAAc;CACxB"}
|
|
1
|
+
{"version":3,"file":"plan-node-type.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node-type.ts"],"names":[],"mappings":"AAAA,oBAAY,YAAY;IAEtB,KAAK,UAAU;IACf,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,YAAY,iBAAiB;IAC7B,GAAG,QAAQ;IACX,YAAY,iBAAiB;IAC7B,uBAAuB,4BAA4B;IACnD,EAAE,OAAO;IACT,MAAM,WAAW;IACjB,UAAU,eAAe;IAGzB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,cAAc,mBAAmB;IACjC,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAG/B,OAAO,YAAY,CAAe,2BAA2B;IAC7D,SAAS,cAAc,CAAW,sBAAsB;IACxD,SAAS,cAAc,CAAW,sBAAsB;IACxD,WAAW,gBAAgB,CAAO,+CAA+C;IACjF,WAAW,gBAAgB,CAAO,kCAAkC;IACpE,eAAe,oBAAoB,CAAG,6BAA6B;IACnE,aAAa,kBAAkB,CAAO,0BAA0B;IAChE,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,QAAQ,aAAa,CAAa,oEAAoE;IACtG,YAAY,iBAAiB,CAAK,uEAAuE;IACzG,WAAW,gBAAgB,CAAO,mCAAmC;IAGrE,OAAO,YAAY;IACnB,eAAe,oBAAoB;IACnC,kBAAkB,uBAAuB;IACzC,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,OAAO,YAAY;IACnB,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,SAAS,cAAc;IACvB,IAAI,SAAS;IACb,cAAc,mBAAmB;IACjC,sBAAsB,2BAA2B;IACjD,iBAAiB,sBAAsB;IAGvC,KAAK,UAAU,CAAG,kDAAkD;IACpE,MAAM,WAAW;IAClB,YAAY,iBAAiB;IAC5B,SAAS,cAAc,CAAG,0BAA0B;IACpD,iBAAiB,sBAAsB;IAGvC,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IAGvB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;IAG/B,KAAK,UAAU;IACf,IAAI,SAAS;IAGb,SAAS,cAAc;CACxB"}
|
|
@@ -48,6 +48,8 @@ export var PlanNodeType;
|
|
|
48
48
|
PlanNodeType["NestedLoopJoin"] = "NestedLoopJoin";
|
|
49
49
|
PlanNodeType["HashJoin"] = "HashJoin";
|
|
50
50
|
PlanNodeType["MergeJoin"] = "MergeJoin";
|
|
51
|
+
PlanNodeType["AsofScan"] = "AsofScan";
|
|
52
|
+
PlanNodeType["OrdinalSlice"] = "OrdinalSlice";
|
|
51
53
|
PlanNodeType["Materialize"] = "Materialize";
|
|
52
54
|
// Scalar expression nodes
|
|
53
55
|
PlanNodeType["Literal"] = "Literal";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-node-type.js","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node-type.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"plan-node-type.js","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node-type.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,YAoGX;AApGD,WAAY,YAAY;IACtB,+BAA+B;IAC/B,+BAAe,CAAA;IACf,iDAAiC,CAAA;IACjC,qCAAqB,CAAA;IACrB,6CAA6B,CAAA;IAC7B,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,uCAAuB,CAAA;IACvB,iCAAiB,CAAA;IACjB,6BAAa,CAAA;IACb,2CAA2B,CAAA;IAC3B,6BAAa,CAAA;IACb,6CAA6B,CAAA;IAC7B,2BAAW,CAAA;IACX,6CAA6B,CAAA;IAC7B,mEAAmD,CAAA;IACnD,yBAAS,CAAA;IACT,iCAAiB,CAAA;IACjB,yCAAyB,CAAA;IAEzB,gBAAgB;IAChB,iCAAiB,CAAA;IACjB,iCAAiB,CAAA;IACjB,iDAAiC,CAAA;IACjC,iCAAiB,CAAA;IACjB,mDAAmC,CAAA;IACnC,2CAA2B,CAAA;IAC3B,uCAAuB,CAAA;IACvB,2CAA2B,CAAA;IAC3B,uCAAuB,CAAA;IACvB,yCAAyB,CAAA;IACzB,qCAAqB,CAAA;IACrB,mDAAmC,CAAA;IACnC,+CAA+B,CAAA;IAC/B,yCAAyB,CAAA;IACzB,+CAA+B,CAAA;IAE/B,kCAAkC;IAClC,mCAAmB,CAAA;IACnB,uCAAuB,CAAA;IACvB,uCAAuB,CAAA;IACvB,2CAA2B,CAAA;IAC3B,2CAA2B,CAAA;IAC3B,mDAAmC,CAAA;IACnC,+CAA+B,CAAA;IAC/B,iDAAiC,CAAA;IACjC,qCAAqB,CAAA;IACrB,uCAAuB,CAAA;IACvB,qCAAqB,CAAA;IACrB,6CAA6B,CAAA;IAC7B,2CAA2B,CAAA;IAE3B,0BAA0B;IAC1B,mCAAmB,CAAA;IACnB,mDAAmC,CAAA;IACnC,yDAAyC,CAAA;IACzC,yCAAyB,CAAA;IACzB,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,qCAAqB,CAAA;IACrB,6BAAa,CAAA;IACb,mCAAmB,CAAA;IACnB,yDAAyC,CAAA;IACzC,yDAAyC,CAAA;IACzC,mCAAmB,CAAA;IACnB,iCAAiB,CAAA;IACjB,uCAAuB,CAAA;IACvB,6BAAa,CAAA;IACb,iDAAiC,CAAA;IACjC,iEAAiD,CAAA;IACjD,uDAAuC,CAAA;IAEvC,2BAA2B;IAC3B,+BAAe,CAAA;IACf,iCAAiB,CAAA;IAClB,6CAA6B,CAAA;IAC5B,uCAAuB,CAAA;IACvB,uDAAuC,CAAA;IAEvC,sBAAsB;IACtB,2CAA2B,CAAA;IAC3B,uCAAuB,CAAA;IAEvB,UAAU;IACV,iCAAiB,CAAA;IACjB,mCAAmB,CAAA;IACnB,+CAA+B,CAAA;IAC/B,yCAAyB,CAAA;IACzB,2CAA2B,CAAA;IAC3B,+CAA+B,CAAA;IAE/B,kBAAkB;IAClB,+BAAe,CAAA;IACf,6BAAa,CAAA;IAEb,oBAAoB;IACpB,uCAAuB,CAAA;AACzB,CAAC,EApGW,YAAY,KAAZ,YAAY,QAoGvB"}
|
|
@@ -2,7 +2,21 @@ import { PlanNodeType } from './plan-node-type.js';
|
|
|
2
2
|
import type { Scope } from '../scopes/scope.js';
|
|
3
3
|
import type { BaseType, RelationType, ScalarType } from '../../common/datatype.js';
|
|
4
4
|
import type { Expression } from '../../parser/ast.js';
|
|
5
|
-
import type { OutputValue, Row } from '../../common/types.js';
|
|
5
|
+
import type { OutputValue, Row, SqlValue } from '../../common/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Information about an attribute the relation is monotonically ordered on.
|
|
8
|
+
* Stronger than `ordering`: meaningful only for total-order-preserving sources
|
|
9
|
+
* (vtab access plans that advertise it; sort nodes; certain merge operators)
|
|
10
|
+
* and survives only the propagation rules documented in characteristics.ts.
|
|
11
|
+
*/
|
|
12
|
+
export interface MonotonicOnInfo {
|
|
13
|
+
/** Attribute over which the relation is ordered. Stable across plan transformations. */
|
|
14
|
+
readonly attrId: number;
|
|
15
|
+
/** True iff the relation guarantees no two rows share the value of attrId. */
|
|
16
|
+
readonly strict: boolean;
|
|
17
|
+
/** Direction; default 'asc'. */
|
|
18
|
+
readonly direction: 'asc' | 'desc';
|
|
19
|
+
}
|
|
6
20
|
/**
|
|
7
21
|
* Physical properties that execution nodes can provide or require
|
|
8
22
|
*/
|
|
@@ -20,6 +34,54 @@ export interface PhysicalProperties {
|
|
|
20
34
|
* the operation (e.g., DISTINCT creates a unique key on all columns)
|
|
21
35
|
*/
|
|
22
36
|
uniqueKeys?: number[][];
|
|
37
|
+
/**
|
|
38
|
+
* Attributes the relation is monotonically ordered on. Stronger than `ordering`:
|
|
39
|
+
* meaningful only for total-order-preserving sources (vtab access plans that
|
|
40
|
+
* advertise it; sort nodes; certain merge operators) and survives only the
|
|
41
|
+
* propagation rules documented in characteristics.ts.
|
|
42
|
+
*
|
|
43
|
+
* `monotonicOn` strictly implies `ordering` on the same attribute in the same
|
|
44
|
+
* direction; nodes are permitted (not required) to populate one from the other.
|
|
45
|
+
*/
|
|
46
|
+
monotonicOn?: readonly MonotonicOnInfo[];
|
|
47
|
+
/**
|
|
48
|
+
* Capability flags advertised by the underlying access path. Unlike
|
|
49
|
+
* `monotonicOn`, these are not relational characteristics — they describe
|
|
50
|
+
* what the access path's iterator can be driven to do (ordinal seek for
|
|
51
|
+
* pushed-down LIMIT/OFFSET, forward-only repositioning for asof joins).
|
|
52
|
+
*
|
|
53
|
+
* These survive only on the physical leaf node where the access plan was
|
|
54
|
+
* resolved. Single-input pass-through nodes (Filter, LimitOffset, Alias,
|
|
55
|
+
* etc.) MUST NOT propagate these — once another operator sits between the
|
|
56
|
+
* vtab leaf and the consumer, the leaf's iterator is no longer the
|
|
57
|
+
* consumer's iterator.
|
|
58
|
+
*/
|
|
59
|
+
accessCapabilities?: {
|
|
60
|
+
/** Path supports O(log N) seek to the kth monotonic row. Implies monotonicOn. */
|
|
61
|
+
ordinalSeek?: boolean;
|
|
62
|
+
/** Path can be driven as the right side of a streaming asof join. Implies monotonicOn. */
|
|
63
|
+
asofRight?: boolean;
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* Symbolic range bound that downstream rules / EXPLAIN can read off. Set by
|
|
67
|
+
* rule-monotonic-range-access on physical leaves whose access plan walks a
|
|
68
|
+
* MonotonicOn(x) path bounded by a recognized range predicate on x. The
|
|
69
|
+
* lower/upper fields are absent for unbounded sides (half-open ranges).
|
|
70
|
+
*
|
|
71
|
+
* Non-relational: lives on the physical leaf where the access plan was
|
|
72
|
+
* resolved. Pass-through nodes do NOT propagate it.
|
|
73
|
+
*/
|
|
74
|
+
rangeBoundedOn?: {
|
|
75
|
+
attrId: number;
|
|
76
|
+
lower?: {
|
|
77
|
+
op: '>=' | '>';
|
|
78
|
+
valueLiteral?: SqlValue;
|
|
79
|
+
};
|
|
80
|
+
upper?: {
|
|
81
|
+
op: '<=' | '<';
|
|
82
|
+
valueLiteral?: SqlValue;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
23
85
|
/**
|
|
24
86
|
* Whether this node is read-only (does not mutate external state).
|
|
25
87
|
* false = has side effects, true = pure/read-only
|
|
@@ -46,6 +108,47 @@ export interface PhysicalProperties {
|
|
|
46
108
|
* Default physical properties for plan nodes
|
|
47
109
|
*/
|
|
48
110
|
export declare const DEFAULT_PHYSICAL: PhysicalProperties;
|
|
111
|
+
/**
|
|
112
|
+
* Monotonicity of a scalar expression with respect to a given input attribute.
|
|
113
|
+
* Direction is "as the attribute's value increases, what happens to the expression":
|
|
114
|
+
* - 'increasing' — strictly non-decreasing (compatible with `asc` ordering)
|
|
115
|
+
* - 'decreasing' — strictly non-increasing
|
|
116
|
+
* - 'constant' — does not depend on the attribute (flat in attrId)
|
|
117
|
+
* - 'non_monotone' — depends on the attribute but provably not monotone
|
|
118
|
+
* - 'unknown' — cannot prove a property; safe default
|
|
119
|
+
*
|
|
120
|
+
* Other inputs are held constant when reasoning about monotonicity in attrId.
|
|
121
|
+
*/
|
|
122
|
+
export type Monotonicity = 'increasing' | 'decreasing' | 'constant' | 'non_monotone' | 'unknown';
|
|
123
|
+
export interface InjectivityResult {
|
|
124
|
+
/** True iff distinct values of the input attribute always produce distinct expression values
|
|
125
|
+
* (with all other inputs held constant). */
|
|
126
|
+
readonly injective: boolean;
|
|
127
|
+
/** Optional explanation for diagnostics. */
|
|
128
|
+
readonly reason?: string;
|
|
129
|
+
}
|
|
130
|
+
export interface MonotonicityResult {
|
|
131
|
+
readonly monotonicity: Monotonicity;
|
|
132
|
+
readonly reason?: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Equivalent half-open range on input x for a predicate `f(x) op c` where f is
|
|
136
|
+
* monotone but lossy (e.g. `f(x) = date(x); f(x) = D` corresponds to a
|
|
137
|
+
* one-day half-open range on x). `lowerInclusive ≤ x < upperExclusive`.
|
|
138
|
+
*
|
|
139
|
+
* The boundary computation is type-driven; see LogicalType.bucketBounds.
|
|
140
|
+
*/
|
|
141
|
+
export interface RangeRewrite {
|
|
142
|
+
readonly lowerInclusive: SqlValue;
|
|
143
|
+
readonly upperExclusive: SqlValue;
|
|
144
|
+
}
|
|
145
|
+
/** Conservative defaults for the scalar property surface. Exposed for tests / consumers. */
|
|
146
|
+
export declare const DEFAULT_INJECTIVITY: InjectivityResult;
|
|
147
|
+
export declare const DEFAULT_MONOTONICITY: MonotonicityResult;
|
|
148
|
+
/** Negate (flip) a monotonicity direction; constant/non_monotone/unknown pass through unchanged. */
|
|
149
|
+
export declare function negateMonotonicity(m: Monotonicity): Monotonicity;
|
|
150
|
+
/** Combine monotonicities for `a + b` (addition rules). */
|
|
151
|
+
export declare function addMonotonicity(a: Monotonicity, b: Monotonicity): Monotonicity;
|
|
49
152
|
/**
|
|
50
153
|
* Represents a column with a unique identifier that persists across plan transformations
|
|
51
154
|
*/
|
|
@@ -131,6 +234,24 @@ export declare abstract class PlanNode {
|
|
|
131
234
|
* Override to provide node-specific logical information.
|
|
132
235
|
*/
|
|
133
236
|
getLogicalAttributes(): Record<string, unknown>;
|
|
237
|
+
/**
|
|
238
|
+
* Is this scalar expression injective in the given input attribute?
|
|
239
|
+
* Default is the conservative "no" — only meaningful for ScalarPlanNode subclasses
|
|
240
|
+
* that override. Other inputs are assumed held constant when reasoning.
|
|
241
|
+
*/
|
|
242
|
+
isInjectiveIn(_inputAttrId: number): InjectivityResult;
|
|
243
|
+
/**
|
|
244
|
+
* Monotonicity of this scalar expression in the given input attribute, with
|
|
245
|
+
* other inputs held constant. Default is the conservative 'unknown'.
|
|
246
|
+
*/
|
|
247
|
+
monotonicityIn(_inputAttrId: number): MonotonicityResult;
|
|
248
|
+
/**
|
|
249
|
+
* For monotone-but-lossy scalar transforms only: given a constant `c` from a
|
|
250
|
+
* predicate `f(x) op c`, return the equivalent half-open range on x. Return
|
|
251
|
+
* undefined when not applicable / unsafe. Implementations must be consistent
|
|
252
|
+
* with `monotonicityIn`.
|
|
253
|
+
*/
|
|
254
|
+
rangeRewriteIn(_inputAttrId: number, _constant: SqlValue): RangeRewrite | undefined;
|
|
134
255
|
/** Infer and cache the physical properties of this node */
|
|
135
256
|
get physical(): PhysicalProperties;
|
|
136
257
|
/** Helper to generate unique attribute IDs */
|
|
@@ -176,10 +297,18 @@ export declare function isRelationalNode(node: PlanNode): node is RelationalPlan
|
|
|
176
297
|
/**
|
|
177
298
|
* Base interface for PlanNodes that produce a scalar value (Expression Nodes).
|
|
178
299
|
* Note: this is an interface that concrete ScalarNode classes will implement.
|
|
300
|
+
*
|
|
301
|
+
* The injectivity / monotonicity / rangeRewrite methods all have safe defaults
|
|
302
|
+
* on `PlanNode`, so concrete classes opt in by overriding only the cases they
|
|
303
|
+
* can prove. Conservatively defaulting to "unknown / not injective" is critical:
|
|
304
|
+
* downstream optimizer rules treat these as load-bearing correctness claims.
|
|
179
305
|
*/
|
|
180
306
|
export interface ScalarPlanNode extends PlanNode {
|
|
181
307
|
readonly expression: Expression;
|
|
182
308
|
getType(): ScalarType;
|
|
309
|
+
isInjectiveIn(inputAttrId: number): InjectivityResult;
|
|
310
|
+
monotonicityIn(inputAttrId: number): MonotonicityResult;
|
|
311
|
+
rangeRewriteIn(inputAttrId: number, constant: SqlValue): RangeRewrite | undefined;
|
|
183
312
|
}
|
|
184
313
|
/**
|
|
185
314
|
* Characteristically check if a node is a scalar node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,31 @@ export const DEFAULT_PHYSICAL = {
|
|
|
11
11
|
idempotent: true, // Default true for readonly nodes
|
|
12
12
|
constant: false,
|
|
13
13
|
};
|
|
14
|
+
/** Conservative defaults for the scalar property surface. Exposed for tests / consumers. */
|
|
15
|
+
export const DEFAULT_INJECTIVITY = { injective: false };
|
|
16
|
+
export const DEFAULT_MONOTONICITY = { monotonicity: 'unknown' };
|
|
17
|
+
/** Negate (flip) a monotonicity direction; constant/non_monotone/unknown pass through unchanged. */
|
|
18
|
+
export function negateMonotonicity(m) {
|
|
19
|
+
switch (m) {
|
|
20
|
+
case 'increasing': return 'decreasing';
|
|
21
|
+
case 'decreasing': return 'increasing';
|
|
22
|
+
default: return m;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Combine monotonicities for `a + b` (addition rules). */
|
|
26
|
+
export function addMonotonicity(a, b) {
|
|
27
|
+
if (a === 'unknown' || b === 'unknown')
|
|
28
|
+
return 'unknown';
|
|
29
|
+
if (a === 'non_monotone' || b === 'non_monotone')
|
|
30
|
+
return 'non_monotone';
|
|
31
|
+
if (a === 'constant')
|
|
32
|
+
return b;
|
|
33
|
+
if (b === 'constant')
|
|
34
|
+
return a;
|
|
35
|
+
if (a === b)
|
|
36
|
+
return a; // both increasing or both decreasing
|
|
37
|
+
return 'unknown'; // mixed directions
|
|
38
|
+
}
|
|
14
39
|
/**
|
|
15
40
|
* Base class for all nodes in the logical query plan.
|
|
16
41
|
* PlanNodes are immutable once constructed.
|
|
@@ -57,6 +82,30 @@ export class PlanNode {
|
|
|
57
82
|
getLogicalAttributes() {
|
|
58
83
|
return {};
|
|
59
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Is this scalar expression injective in the given input attribute?
|
|
87
|
+
* Default is the conservative "no" — only meaningful for ScalarPlanNode subclasses
|
|
88
|
+
* that override. Other inputs are assumed held constant when reasoning.
|
|
89
|
+
*/
|
|
90
|
+
isInjectiveIn(_inputAttrId) {
|
|
91
|
+
return DEFAULT_INJECTIVITY;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Monotonicity of this scalar expression in the given input attribute, with
|
|
95
|
+
* other inputs held constant. Default is the conservative 'unknown'.
|
|
96
|
+
*/
|
|
97
|
+
monotonicityIn(_inputAttrId) {
|
|
98
|
+
return DEFAULT_MONOTONICITY;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* For monotone-but-lossy scalar transforms only: given a constant `c` from a
|
|
102
|
+
* predicate `f(x) op c`, return the equivalent half-open range on x. Return
|
|
103
|
+
* undefined when not applicable / unsafe. Implementations must be consistent
|
|
104
|
+
* with `monotonicityIn`.
|
|
105
|
+
*/
|
|
106
|
+
rangeRewriteIn(_inputAttrId, _constant) {
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
60
109
|
/** Infer and cache the physical properties of this node */
|
|
61
110
|
get physical() {
|
|
62
111
|
if (!this._physical) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"plan-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/plan-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/project-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AACpJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,QAAS,YAAW,mBAAmB,EAAE,iBAAiB;aAQzE,MAAM,EAAE,kBAAkB;aAC1B,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC;IAItD,sEAAsE;aACtD,oBAAoB,EAAE,OAAO;IAb9C,SAAkB,QAAQ,wBAAwB;IAElD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA+B;gBAGrD,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,EACtD,qBAAqB,CAAC,EAAE,MAAM;IAC9B,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAC3C,sEAAsE;IACtD,oBAAoB,GAAE,OAAc;IA4HrD,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"project-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/project-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AACpJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,QAAS,YAAW,mBAAmB,EAAE,iBAAiB;aAQzE,MAAM,EAAE,kBAAkB;aAC1B,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC;IAItD,sEAAsE;aACtD,oBAAoB,EAAE,OAAO;IAb9C,SAAkB,QAAQ,wBAAwB;IAElD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,eAAe,CAA+B;gBAGrD,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,EACtD,qBAAqB,CAAC,EAAE,MAAM;IAC9B,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAC3C,sEAAsE;IACtD,oBAAoB,GAAE,OAAc;IA4HrD,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmCpF,OAAO,IAAI,YAAY;IAIvB,aAAa,IAAI,SAAS,SAAS,EAAE;IAIrC,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;IAehD,WAAW,IAAI,SAAS,QAAQ,EAAE;IAIlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAOlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWxD,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IA0CxD,cAAc,IAAI,SAAS;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;IASzF,eAAe,CAAC,WAAW,EAAE,SAAS;QAAE,IAAI,EAAE,cAAc,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,QAAQ;CAsC/G"}
|
|
@@ -7,7 +7,7 @@ import { formatProjection } from '../../util/plan-formatter.js';
|
|
|
7
7
|
import { ColumnReferenceNode } from './reference.js';
|
|
8
8
|
import { quereusError } from '../../common/errors.js';
|
|
9
9
|
import { StatusCode } from '../../common/types.js';
|
|
10
|
-
import { projectOrdering } from '../framework/physical-utils.js';
|
|
10
|
+
import { projectMonotonicOnByAttrId, projectOrdering } from '../framework/physical-utils.js';
|
|
11
11
|
/**
|
|
12
12
|
* Represents a projection operation (SELECT list) without DISTINCT.
|
|
13
13
|
* It takes an input relation and outputs a new relation with specified columns/expressions.
|
|
@@ -145,12 +145,16 @@ export class ProjectNode extends PlanNode {
|
|
|
145
145
|
// Build mapping from source index -> projected index for ColumnReferences
|
|
146
146
|
const map = new Map();
|
|
147
147
|
const sourceAttrs = this.source.getAttributes();
|
|
148
|
+
const preservedAttrIds = new Set();
|
|
148
149
|
this.projections.forEach((proj, outIdx) => {
|
|
149
150
|
if (proj.node instanceof ColumnReferenceNode) {
|
|
150
151
|
const colRef = proj.node;
|
|
151
152
|
const srcIndex = sourceAttrs.findIndex(a => a.id === colRef.attributeId);
|
|
152
153
|
if (srcIndex >= 0 && !map.has(srcIndex))
|
|
153
154
|
map.set(srcIndex, outIdx);
|
|
155
|
+
// Track attrIds preserved by trivial column-reference projections.
|
|
156
|
+
// Until expression-properties land, only these survive monotonicOn.
|
|
157
|
+
preservedAttrIds.add(colRef.attributeId);
|
|
154
158
|
}
|
|
155
159
|
});
|
|
156
160
|
const uniqueKeys = (sourcePhysical?.uniqueKeys || [])
|
|
@@ -169,6 +173,7 @@ export class ProjectNode extends PlanNode {
|
|
|
169
173
|
estimatedRows: this.source.estimatedRows,
|
|
170
174
|
ordering: projectOrdering(sourcePhysical?.ordering, map),
|
|
171
175
|
uniqueKeys,
|
|
176
|
+
monotonicOn: projectMonotonicOnByAttrId(sourcePhysical?.monotonicOn, preservedAttrIds),
|
|
172
177
|
};
|
|
173
178
|
}
|
|
174
179
|
getType() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/project-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAA0F,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGpJ,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"project-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/project-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BaseType, ScalarType, RelationType } from '../../common/datatype.js';
|
|
2
|
-
import { PlanNode, type ZeroAryRelationalNode, type ZeroAryScalarNode, type Attribute } from './plan-node.js';
|
|
2
|
+
import { PlanNode, type ZeroAryRelationalNode, type ZeroAryScalarNode, type Attribute, type InjectivityResult, type MonotonicityResult } from './plan-node.js';
|
|
3
3
|
import { PlanNodeType } from './plan-node-type.js';
|
|
4
4
|
import type { TableSchema } from '../../schema/table.js';
|
|
5
5
|
import type { Scope } from '../scopes/scope.js';
|
|
@@ -67,6 +67,8 @@ export declare class ColumnReferenceNode extends PlanNode implements ZeroAryScal
|
|
|
67
67
|
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
68
68
|
toString(): string;
|
|
69
69
|
getLogicalAttributes(): Record<string, unknown>;
|
|
70
|
+
isInjectiveIn(inputAttrId: number): InjectivityResult;
|
|
71
|
+
monotonicityIn(inputAttrId: number): MonotonicityResult;
|
|
70
72
|
}
|
|
71
73
|
/**
|
|
72
74
|
* Represents a reference to a parameter (placeholder in a prepared statement).
|
|
@@ -86,6 +88,7 @@ export declare class ParameterReferenceNode extends PlanNode implements ZeroAryS
|
|
|
86
88
|
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
87
89
|
toString(): string;
|
|
88
90
|
getLogicalAttributes(): Record<string, unknown>;
|
|
91
|
+
monotonicityIn(_inputAttrId: number): MonotonicityResult;
|
|
89
92
|
}
|
|
90
93
|
export declare class FunctionReferenceNode extends PlanNode {
|
|
91
94
|
readonly functionSchema: FunctionSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/reference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,KAAK,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/reference.ts"],"names":[],"mappings":"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"}
|