@quereus/quereus 3.1.2 → 3.2.1
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/core/database-assertions.js +3 -3
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database.js +3 -3
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.js +3 -3
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/index.d.ts +2 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/visitor.js +1 -1
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/attribute-provenance.d.ts +45 -0
- package/dist/src/planner/analysis/attribute-provenance.d.ts.map +1 -0
- package/dist/src/planner/analysis/attribute-provenance.js +81 -0
- package/dist/src/planner/analysis/attribute-provenance.js.map +1 -0
- package/dist/src/planner/analysis/const-evaluator.js +5 -5
- package/dist/src/planner/analysis/const-evaluator.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +54 -21
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts +7 -0
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
- package/dist/src/planner/cache/correlation-detector.js +34 -2
- package/dist/src/planner/cache/correlation-detector.js.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.d.ts +169 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.js +488 -0
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -0
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +8 -7
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts +47 -0
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js +96 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +150 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +265 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +8 -7
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +3 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +36 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +26 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +13 -0
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +107 -0
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +43 -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-monotonic-range-access.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +1 -6
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +74 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +139 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +58 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +592 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts +43 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +115 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts +102 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +545 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts +45 -0
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -0
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +78 -0
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -0
- package/dist/src/planner/scopes/param.d.ts.map +1 -1
- package/dist/src/planner/scopes/param.js +13 -11
- package/dist/src/planner/scopes/param.js.map +1 -1
- package/dist/src/planner/type-utils.js +1 -1
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +17 -19
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/async-semaphore.d.ts +36 -0
- package/dist/src/runtime/async-semaphore.d.ts.map +1 -0
- package/dist/src/runtime/async-semaphore.js +72 -0
- package/dist/src/runtime/async-semaphore.js.map +1 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +4 -3
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emit/async-gather.d.ts +77 -0
- package/dist/src/runtime/emit/async-gather.d.ts.map +1 -0
- package/dist/src/runtime/emit/async-gather.js +234 -0
- package/dist/src/runtime/emit/async-gather.js.map +1 -0
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +38 -17
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/eager-prefetch.d.ts +77 -0
- package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -0
- package/dist/src/runtime/emit/eager-prefetch.js +223 -0
- package/dist/src/runtime/emit/eager-prefetch.js.map +1 -0
- package/dist/src/runtime/emit/fanout-lookup-join.d.ts +130 -0
- package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -0
- package/dist/src/runtime/emit/fanout-lookup-join.js +521 -0
- package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -0
- package/dist/src/runtime/parallel-driver.d.ts +68 -0
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -0
- package/dist/src/runtime/parallel-driver.js +233 -0
- package/dist/src/runtime/parallel-driver.js.map +1 -0
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +9 -0
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/strict-fork.d.ts +36 -0
- package/dist/src/runtime/strict-fork.d.ts.map +1 -0
- package/dist/src/runtime/strict-fork.js +125 -0
- package/dist/src/runtime/strict-fork.js.map +1 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +11 -1
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/vtab/concurrency.d.ts +29 -0
- package/dist/src/vtab/concurrency.d.ts.map +1 -0
- package/dist/src/vtab/concurrency.js +47 -0
- package/dist/src/vtab/concurrency.js.map +1 -0
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +67 -29
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +21 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +21 -0
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/module.d.ts +47 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
import { isRelationalNode, PlanNode } from './plan-node.js';
|
|
2
|
+
import { PlanNodeType } from './plan-node-type.js';
|
|
3
|
+
import { Cached } from '../../util/cached.js';
|
|
4
|
+
import { quereusError } from '../../common/errors.js';
|
|
5
|
+
import { StatusCode } from '../../common/types.js';
|
|
6
|
+
import { closeConstantBindingsOverEcs, mergeConstantBindings, mergeDomainConstraints, mergeEquivClasses, mergeFds, shiftConstantBindings, shiftDomainConstraints, shiftEquivClasses, shiftFds, } from '../util/fd-utils.js';
|
|
7
|
+
/**
|
|
8
|
+
* Physical N-ary relational node that drives ≥ 2 independent (uncorrelated)
|
|
9
|
+
* child relations concurrently via {@link ParallelDriver.drive} and combines
|
|
10
|
+
* their outputs with the configured {@link AsyncGatherCombinator}.
|
|
11
|
+
*
|
|
12
|
+
* Properties:
|
|
13
|
+
*
|
|
14
|
+
* - `unionAll`: ordering is dropped (arrival-order interleave is
|
|
15
|
+
* non-deterministic); FDs / ECs / constant bindings / domain constraints
|
|
16
|
+
* are dropped (same conservatism `SetOperationNode.computePhysical` already
|
|
17
|
+
* applies); attribute IDs mirror `children[0]` to preserve downstream
|
|
18
|
+
* `ORDER BY` references; `isSet` is `false` (duplicates allowed); per-column
|
|
19
|
+
* nullability is the OR across children.
|
|
20
|
+
*
|
|
21
|
+
* - `crossProduct`: ordering is dropped; FDs / ECs / bindings / domain
|
|
22
|
+
* constraints are the pairwise N-ary fold of the children (the same fold
|
|
23
|
+
* `JoinNode(cross)` does, repeated); attribute IDs are the verbatim
|
|
24
|
+
* concatenation of children; per-column nullability flows through
|
|
25
|
+
* unchanged. Cartesian product order is deterministic-but-unspecified
|
|
26
|
+
* (a function of the per-branch arrival order). **Buffers all branches
|
|
27
|
+
* before yielding** — not suitable for large branches.
|
|
28
|
+
*
|
|
29
|
+
* `concurrencySafe` and `expectedLatencyMs` are NOT propagated by this node:
|
|
30
|
+
* those fields are not yet defined on {@link PhysicalProperties} (the parallel
|
|
31
|
+
* track has not landed them). Once a successor ticket (5.5 or later) adds
|
|
32
|
+
* them, the intended merge is `AND` across children for `concurrencySafe` and
|
|
33
|
+
* `max` across children for `expectedLatencyMs`; update this node's
|
|
34
|
+
* `computePhysical` at that time. The fields currently inherited from
|
|
35
|
+
* `PlanNode.physical`'s default child-merge are `deterministic`,
|
|
36
|
+
* `idempotent`, and `readonly` (AND across children).
|
|
37
|
+
*/
|
|
38
|
+
export class AsyncGatherNode extends PlanNode {
|
|
39
|
+
children;
|
|
40
|
+
combinator;
|
|
41
|
+
concurrencyCap;
|
|
42
|
+
preserveAttributeIds;
|
|
43
|
+
nodeType = PlanNodeType.AsyncGather;
|
|
44
|
+
attributesCache;
|
|
45
|
+
zipIndicesCache;
|
|
46
|
+
constructor(scope, children, combinator, concurrencyCap, preserveAttributeIds) {
|
|
47
|
+
AsyncGatherNode.validateConstruction(children, combinator, concurrencyCap);
|
|
48
|
+
super(scope, children.reduce((acc, c) => acc + c.getTotalCost(), 0));
|
|
49
|
+
this.children = children;
|
|
50
|
+
this.combinator = combinator;
|
|
51
|
+
this.concurrencyCap = concurrencyCap;
|
|
52
|
+
this.preserveAttributeIds = preserveAttributeIds;
|
|
53
|
+
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
54
|
+
this.zipIndicesCache = new Cached(() => this.computeZipByKeyIndices());
|
|
55
|
+
}
|
|
56
|
+
static validateConstruction(children, combinator, concurrencyCap) {
|
|
57
|
+
if (children.length < 2) {
|
|
58
|
+
quereusError(`AsyncGatherNode requires >= 2 children, got ${children.length}`, StatusCode.INTERNAL);
|
|
59
|
+
}
|
|
60
|
+
if (!Number.isInteger(concurrencyCap) || concurrencyCap < 1) {
|
|
61
|
+
quereusError(`AsyncGatherNode concurrencyCap must be a positive integer, got ${concurrencyCap}`, StatusCode.INTERNAL);
|
|
62
|
+
}
|
|
63
|
+
if (combinator.kind === 'unionAll') {
|
|
64
|
+
const firstColCount = children[0].getType().columns.length;
|
|
65
|
+
for (let i = 1; i < children.length; i++) {
|
|
66
|
+
const colCount = children[i].getType().columns.length;
|
|
67
|
+
if (colCount !== firstColCount) {
|
|
68
|
+
quereusError(`AsyncGatherNode(unionAll) column count mismatch: child 0 has ${firstColCount}, child ${i} has ${colCount}`, StatusCode.ERROR);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else if (combinator.kind === 'zipByKey') {
|
|
73
|
+
AsyncGatherNode.validateZipByKey(children, combinator.branchKeyAttrs, combinator.outputKeyAttrs);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate a `zipByKey` combinator under the per-branch-refs representation:
|
|
78
|
+
*
|
|
79
|
+
* - `branchKeyAttrs` has one list per branch, all of the same non-empty
|
|
80
|
+
* length K.
|
|
81
|
+
* - `outputKeyAttrs` has length K, its ids are pairwise distinct AND disjoint
|
|
82
|
+
* from every child attribute id (load-bearing: a collision would let the
|
|
83
|
+
* provenance walk treat an output key id as forwarded, breaking the
|
|
84
|
+
* origination contract this design relies on).
|
|
85
|
+
* - each `branchKeyAttrs[b][k]` resolves in branch b.
|
|
86
|
+
* - per key position, affinity (physical storage class) agrees across all
|
|
87
|
+
* branches (the codebase has no distinct affinity field). Nullability may
|
|
88
|
+
* differ between branches; it gets OR'd in {@link getType}.
|
|
89
|
+
* - per key position, the declared collation agrees across all branches. The
|
|
90
|
+
* runtime key comparator derives solely from branch 0's key-column
|
|
91
|
+
* collations, so a disagreement would let branch 0 win silently and merge
|
|
92
|
+
* (or fail to merge) rows under the wrong collation. Guarding it here means
|
|
93
|
+
* both the recognition rule and manual construction are protected. An
|
|
94
|
+
* absent `collationName` normalizes to the binary collation.
|
|
95
|
+
*/
|
|
96
|
+
static validateZipByKey(children, branchKeyAttrs, outputKeyAttrs) {
|
|
97
|
+
if (branchKeyAttrs.length !== children.length) {
|
|
98
|
+
quereusError(`AsyncGatherNode(zipByKey): branchKeyAttrs has ${branchKeyAttrs.length} lists but there are ${children.length} branches`, StatusCode.INTERNAL);
|
|
99
|
+
}
|
|
100
|
+
const k = branchKeyAttrs.length > 0 ? branchKeyAttrs[0].length : 0;
|
|
101
|
+
if (k === 0) {
|
|
102
|
+
quereusError('AsyncGatherNode(zipByKey) requires >= 1 key column', StatusCode.ERROR);
|
|
103
|
+
}
|
|
104
|
+
for (let i = 0; i < branchKeyAttrs.length; i++) {
|
|
105
|
+
if (branchKeyAttrs[i].length !== k) {
|
|
106
|
+
quereusError(`AsyncGatherNode(zipByKey): branch ${i} has ${branchKeyAttrs[i].length} key columns, expected ${k}`, StatusCode.ERROR);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (outputKeyAttrs.length !== k) {
|
|
110
|
+
quereusError(`AsyncGatherNode(zipByKey): outputKeyAttrs has ${outputKeyAttrs.length} ids, expected ${k}`, StatusCode.ERROR);
|
|
111
|
+
}
|
|
112
|
+
// outputKeyAttrs must be pairwise distinct AND disjoint from every child id.
|
|
113
|
+
const allChildIds = new Set();
|
|
114
|
+
for (const child of children) {
|
|
115
|
+
for (const a of child.getAttributes())
|
|
116
|
+
allChildIds.add(a.id);
|
|
117
|
+
}
|
|
118
|
+
const seenOutput = new Set();
|
|
119
|
+
for (const id of outputKeyAttrs) {
|
|
120
|
+
if (seenOutput.has(id)) {
|
|
121
|
+
quereusError(`AsyncGatherNode(zipByKey): outputKeyAttrs contains duplicate id ${id}`, StatusCode.ERROR);
|
|
122
|
+
}
|
|
123
|
+
seenOutput.add(id);
|
|
124
|
+
if (allChildIds.has(id)) {
|
|
125
|
+
quereusError(`AsyncGatherNode(zipByKey): output key id ${id} collides with a child attribute id (the gather must originate it freshly)`, StatusCode.ERROR);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Resolve every per-branch key attribute in its own branch.
|
|
129
|
+
const resolved = [];
|
|
130
|
+
for (let i = 0; i < children.length; i++) {
|
|
131
|
+
const attrs = children[i].getAttributes();
|
|
132
|
+
const idToIndex = new Map();
|
|
133
|
+
attrs.forEach((a, ix) => idToIndex.set(a.id, ix));
|
|
134
|
+
const indices = [];
|
|
135
|
+
for (const id of branchKeyAttrs[i]) {
|
|
136
|
+
const ix = idToIndex.get(id);
|
|
137
|
+
if (ix === undefined) {
|
|
138
|
+
quereusError(`AsyncGatherNode(zipByKey): key attribute ${id} not found in branch ${i}`, StatusCode.ERROR);
|
|
139
|
+
}
|
|
140
|
+
indices.push(ix);
|
|
141
|
+
}
|
|
142
|
+
resolved.push(indices);
|
|
143
|
+
}
|
|
144
|
+
// Key affinities AND collations must agree across branches, per key
|
|
145
|
+
// position. Affinity disagreement breaks the storage-class contract; a
|
|
146
|
+
// collation disagreement would silently defer to branch 0's collation in
|
|
147
|
+
// the runtime comparator (see {@link getZipByKeyType}/emitter).
|
|
148
|
+
const child0Cols = children[0].getType().columns;
|
|
149
|
+
const normCollation = (c) => (c && c.length > 0 ? c.toUpperCase() : 'BINARY');
|
|
150
|
+
for (let pos = 0; pos < k; pos++) {
|
|
151
|
+
const baseCol = child0Cols[resolved[0][pos]];
|
|
152
|
+
const baseAffinity = baseCol.type.logicalType.physicalType;
|
|
153
|
+
const baseCollation = normCollation(baseCol.type.collationName);
|
|
154
|
+
for (let i = 1; i < children.length; i++) {
|
|
155
|
+
const col = children[i].getType().columns[resolved[i][pos]];
|
|
156
|
+
const affinity = col.type.logicalType.physicalType;
|
|
157
|
+
if (affinity !== baseAffinity) {
|
|
158
|
+
quereusError(`AsyncGatherNode(zipByKey): key position ${pos} affinity mismatch: branch 0 has ${baseAffinity}, branch ${i} has ${affinity}`, StatusCode.ERROR);
|
|
159
|
+
}
|
|
160
|
+
const collation = normCollation(col.type.collationName);
|
|
161
|
+
if (collation !== baseCollation) {
|
|
162
|
+
quereusError(`AsyncGatherNode(zipByKey): key position ${pos} collation mismatch: branch 0 has ${baseCollation}, branch ${i} has ${collation}`, StatusCode.ERROR);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Resolve each branch's own `branchKeyAttrs[b]` list against that branch's
|
|
169
|
+
* attribute layout, yielding per-branch key/non-key column indices. Memoised;
|
|
170
|
+
* only valid for a `zipByKey` combinator.
|
|
171
|
+
*/
|
|
172
|
+
computeZipByKeyIndices() {
|
|
173
|
+
if (this.combinator.kind !== 'zipByKey') {
|
|
174
|
+
quereusError('AsyncGatherNode.computeZipByKeyIndices called on a non-zipByKey gather', StatusCode.INTERNAL);
|
|
175
|
+
}
|
|
176
|
+
const branchKeyAttrs = this.combinator.branchKeyAttrs;
|
|
177
|
+
const branchKeyIndices = [];
|
|
178
|
+
const branchNonKeyIndices = [];
|
|
179
|
+
for (let b = 0; b < this.children.length; b++) {
|
|
180
|
+
const attrs = this.children[b].getAttributes();
|
|
181
|
+
const idToIndex = new Map();
|
|
182
|
+
attrs.forEach((a, ix) => idToIndex.set(a.id, ix));
|
|
183
|
+
const keySet = new Set(branchKeyAttrs[b]);
|
|
184
|
+
branchKeyIndices.push(branchKeyAttrs[b].map(id => idToIndex.get(id)));
|
|
185
|
+
const nonKey = [];
|
|
186
|
+
attrs.forEach((a, ix) => { if (!keySet.has(a.id))
|
|
187
|
+
nonKey.push(ix); });
|
|
188
|
+
branchNonKeyIndices.push(nonKey);
|
|
189
|
+
}
|
|
190
|
+
return { branchKeyIndices, branchNonKeyIndices };
|
|
191
|
+
}
|
|
192
|
+
/** Public accessor for the resolved zipByKey index mapping (used by the emitter). */
|
|
193
|
+
getZipByKeyIndices() {
|
|
194
|
+
return this.zipIndicesCache.value;
|
|
195
|
+
}
|
|
196
|
+
buildAttributes() {
|
|
197
|
+
if (this.preserveAttributeIds) {
|
|
198
|
+
return this.preserveAttributeIds.slice();
|
|
199
|
+
}
|
|
200
|
+
if (this.combinator.kind === 'unionAll') {
|
|
201
|
+
// Mirror SetOperationNode.buildAttributes: keep left (children[0])
|
|
202
|
+
// attribute IDs verbatim so ORDER BY references continue to resolve.
|
|
203
|
+
return this.children[0].getAttributes();
|
|
204
|
+
}
|
|
205
|
+
if (this.combinator.kind === 'zipByKey') {
|
|
206
|
+
return this.buildZipByKeyAttributes();
|
|
207
|
+
}
|
|
208
|
+
// crossProduct: concatenate children's attributes verbatim.
|
|
209
|
+
const out = [];
|
|
210
|
+
for (const child of this.children) {
|
|
211
|
+
for (const attr of child.getAttributes()) {
|
|
212
|
+
out.push(attr);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Build the `zipByKey` output attribute layout: the K merged key attributes
|
|
219
|
+
* first (type/nullability/collation derived from branch 0's key column at
|
|
220
|
+
* position k, nullability OR'd across branches because a NULL-keyed row can
|
|
221
|
+
* surface — but **carrying the gather-minted `outputKeyAttrs[k]` id**, since
|
|
222
|
+
* the gather originates these merged columns), then each branch's non-key
|
|
223
|
+
* attributes in declared order, each forced nullable (NULL when the branch is
|
|
224
|
+
* absent for a key). Non-key attribute IDs are unique across branches and the
|
|
225
|
+
* minted key ids are disjoint from all of them, so there is no ID collision.
|
|
226
|
+
*/
|
|
227
|
+
buildZipByKeyAttributes() {
|
|
228
|
+
const { branchKeyIndices, branchNonKeyIndices } = this.getZipByKeyIndices();
|
|
229
|
+
const { outputKeyAttrs } = this.combinator;
|
|
230
|
+
const childAttrs = this.children.map(c => c.getAttributes());
|
|
231
|
+
const out = [];
|
|
232
|
+
// Merged key attributes: type/collation from branch 0, nullability OR'd
|
|
233
|
+
// across branches, id from the gather-minted outputKeyAttrs.
|
|
234
|
+
for (let k = 0; k < outputKeyAttrs.length; k++) {
|
|
235
|
+
const baseAttr = childAttrs[0][branchKeyIndices[0][k]];
|
|
236
|
+
let nullable = baseAttr.type.nullable;
|
|
237
|
+
for (let b = 1; b < this.children.length; b++) {
|
|
238
|
+
nullable = nullable || childAttrs[b][branchKeyIndices[b][k]].type.nullable;
|
|
239
|
+
}
|
|
240
|
+
out.push({
|
|
241
|
+
...baseAttr,
|
|
242
|
+
id: outputKeyAttrs[k],
|
|
243
|
+
type: nullable === baseAttr.type.nullable ? baseAttr.type : { ...baseAttr.type, nullable: true },
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// Non-key attributes per branch, forced nullable.
|
|
247
|
+
for (let b = 0; b < this.children.length; b++) {
|
|
248
|
+
for (const ix of branchNonKeyIndices[b]) {
|
|
249
|
+
const attr = childAttrs[b][ix];
|
|
250
|
+
out.push(attr.type.nullable ? attr : { ...attr, type: { ...attr.type, nullable: true } });
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
return out;
|
|
254
|
+
}
|
|
255
|
+
getAttributes() {
|
|
256
|
+
return this.attributesCache.value;
|
|
257
|
+
}
|
|
258
|
+
getType() {
|
|
259
|
+
if (this.combinator.kind === 'unionAll') {
|
|
260
|
+
// Per-column nullability is the OR across all children; isSet is
|
|
261
|
+
// false (unionAll allows duplicates). Other fields fall through
|
|
262
|
+
// from children[0].
|
|
263
|
+
const types = this.children.map(c => c.getType());
|
|
264
|
+
const baseType = types[0];
|
|
265
|
+
const columns = baseType.columns.map((baseCol, i) => {
|
|
266
|
+
let nullable = baseCol.type.nullable;
|
|
267
|
+
for (let j = 1; j < types.length; j++) {
|
|
268
|
+
nullable = nullable || types[j].columns[i].type.nullable;
|
|
269
|
+
}
|
|
270
|
+
return nullable === baseCol.type.nullable
|
|
271
|
+
? baseCol
|
|
272
|
+
: { ...baseCol, type: { ...baseCol.type, nullable: true } };
|
|
273
|
+
});
|
|
274
|
+
return {
|
|
275
|
+
typeClass: 'relation',
|
|
276
|
+
columns,
|
|
277
|
+
isSet: false,
|
|
278
|
+
isReadOnly: types.every(t => t.isReadOnly),
|
|
279
|
+
keys: [],
|
|
280
|
+
rowConstraints: [],
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
if (this.combinator.kind === 'zipByKey') {
|
|
284
|
+
return this.getZipByKeyType();
|
|
285
|
+
}
|
|
286
|
+
// crossProduct: concatenate columns; keys are the N-ary Cartesian product
|
|
287
|
+
// of per-child keys (each child contributes one key; offsets accumulate).
|
|
288
|
+
const types = this.children.map(c => c.getType());
|
|
289
|
+
const columns = types.flatMap(t => t.columns.map(col => col));
|
|
290
|
+
const isReadOnly = types.every(t => t.isReadOnly);
|
|
291
|
+
const rowConstraints = types.flatMap(t => t.rowConstraints.map(rc => rc));
|
|
292
|
+
// Fold keys pairwise: at each step, combine accumulated keys with the
|
|
293
|
+
// next child's keys, shifting the next child's column indices by the
|
|
294
|
+
// running column count.
|
|
295
|
+
let keys = types[0].keys.map(k => k.map(c => ({ index: c.index, desc: c.desc })));
|
|
296
|
+
let runningCols = types[0].columns.length;
|
|
297
|
+
for (let i = 1; i < types.length; i++) {
|
|
298
|
+
const next = types[i];
|
|
299
|
+
const shiftedNextKeys = next.keys.map(k => k.map(c => ({ index: c.index + runningCols, desc: c.desc })));
|
|
300
|
+
const combined = [];
|
|
301
|
+
if (keys.length === 0) {
|
|
302
|
+
// Accumulated side has no key; result has no key either (we cannot
|
|
303
|
+
// build a Cartesian key without one from every side).
|
|
304
|
+
keys = [];
|
|
305
|
+
}
|
|
306
|
+
else if (shiftedNextKeys.length === 0) {
|
|
307
|
+
keys = [];
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
for (const k1 of keys) {
|
|
311
|
+
for (const k2 of shiftedNextKeys) {
|
|
312
|
+
combined.push([...k1, ...k2]);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
keys = combined;
|
|
316
|
+
}
|
|
317
|
+
runningCols += next.columns.length;
|
|
318
|
+
}
|
|
319
|
+
const isSet = types.every(t => t.isSet);
|
|
320
|
+
return {
|
|
321
|
+
typeClass: 'relation',
|
|
322
|
+
columns,
|
|
323
|
+
isSet,
|
|
324
|
+
isReadOnly,
|
|
325
|
+
keys,
|
|
326
|
+
rowConstraints,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Build the `zipByKey` output relation type. Column layout mirrors
|
|
331
|
+
* {@link buildZipByKeyAttributes}: deduped key columns (nullability OR'd),
|
|
332
|
+
* then each branch's non-key columns forced nullable. The key columns
|
|
333
|
+
* `[0..K-1]` form the output's unique key — multiple NULL-keyed rows do not
|
|
334
|
+
* violate this (SQL UNIQUE permits multiple NULLs). `isSet` is false because
|
|
335
|
+
* NULL-keyed standalone rows can repeat.
|
|
336
|
+
*/
|
|
337
|
+
getZipByKeyType() {
|
|
338
|
+
const { branchKeyIndices, branchNonKeyIndices } = this.getZipByKeyIndices();
|
|
339
|
+
const { outputKeyAttrs } = this.combinator;
|
|
340
|
+
const types = this.children.map(c => c.getType());
|
|
341
|
+
const columns = [];
|
|
342
|
+
// Key columns from children[0], nullability OR'd across branches.
|
|
343
|
+
for (let k = 0; k < outputKeyAttrs.length; k++) {
|
|
344
|
+
const baseCol = types[0].columns[branchKeyIndices[0][k]];
|
|
345
|
+
let nullable = baseCol.type.nullable;
|
|
346
|
+
for (let b = 1; b < this.children.length; b++) {
|
|
347
|
+
nullable = nullable || types[b].columns[branchKeyIndices[b][k]].type.nullable;
|
|
348
|
+
}
|
|
349
|
+
columns.push(nullable === baseCol.type.nullable
|
|
350
|
+
? baseCol
|
|
351
|
+
: { ...baseCol, type: { ...baseCol.type, nullable: true } });
|
|
352
|
+
}
|
|
353
|
+
// Non-key columns per branch, forced nullable.
|
|
354
|
+
for (let b = 0; b < this.children.length; b++) {
|
|
355
|
+
for (const ix of branchNonKeyIndices[b]) {
|
|
356
|
+
const col = types[b].columns[ix];
|
|
357
|
+
columns.push(col.type.nullable ? col : { ...col, type: { ...col.type, nullable: true } });
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
const k = outputKeyAttrs.length;
|
|
361
|
+
const keys = [Array.from({ length: k }, (_v, i) => ({ index: i }))];
|
|
362
|
+
return {
|
|
363
|
+
typeClass: 'relation',
|
|
364
|
+
columns,
|
|
365
|
+
isSet: false,
|
|
366
|
+
isReadOnly: types.every(t => t.isReadOnly),
|
|
367
|
+
keys,
|
|
368
|
+
rowConstraints: [],
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
computePhysical(childrenPhysical) {
|
|
372
|
+
if (this.combinator.kind === 'unionAll' || this.combinator.kind === 'zipByKey') {
|
|
373
|
+
// Same conservatism as SetOperationNode: drop relational invariants
|
|
374
|
+
// that can't be guaranteed across the merge. Ordering is dropped
|
|
375
|
+
// (arrival-order interleave is non-deterministic). For zipByKey the
|
|
376
|
+
// output's key is carried in getType().keys, not in physical FDs;
|
|
377
|
+
// conditional non-key FDs (branch-i FDs hold only when the branch-i
|
|
378
|
+
// row exists) are future work, not implemented here.
|
|
379
|
+
return {
|
|
380
|
+
ordering: undefined,
|
|
381
|
+
monotonicOn: undefined,
|
|
382
|
+
fds: undefined,
|
|
383
|
+
equivClasses: undefined,
|
|
384
|
+
constantBindings: undefined,
|
|
385
|
+
domainConstraints: undefined,
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
// crossProduct: fold pairwise — identical to N applications of
|
|
389
|
+
// JoinNode(cross). Each child's FDs hold on its slice of the output row;
|
|
390
|
+
// concatenation preserves them after shifting column indices.
|
|
391
|
+
let fds = childrenPhysical[0].fds ?? [];
|
|
392
|
+
let equiv = childrenPhysical[0].equivClasses ?? [];
|
|
393
|
+
let bindings = childrenPhysical[0].constantBindings ?? [];
|
|
394
|
+
let domains = childrenPhysical[0].domainConstraints ?? [];
|
|
395
|
+
let runningCols = this.children[0].getType().columns.length;
|
|
396
|
+
for (let i = 1; i < this.children.length; i++) {
|
|
397
|
+
const rightPhys = childrenPhysical[i];
|
|
398
|
+
const rightFds = rightPhys.fds ?? [];
|
|
399
|
+
const rightEC = rightPhys.equivClasses ?? [];
|
|
400
|
+
const rightBindings = rightPhys.constantBindings ?? [];
|
|
401
|
+
const rightDomains = rightPhys.domainConstraints ?? [];
|
|
402
|
+
fds = mergeFds(fds, shiftFds(rightFds, runningCols));
|
|
403
|
+
equiv = mergeEquivClasses(equiv, shiftEquivClasses(rightEC, runningCols));
|
|
404
|
+
const mergedBindings = mergeConstantBindings(bindings, shiftConstantBindings(rightBindings, runningCols));
|
|
405
|
+
bindings = closeConstantBindingsOverEcs(mergedBindings, equiv);
|
|
406
|
+
domains = mergeDomainConstraints(domains, shiftDomainConstraints(rightDomains, runningCols));
|
|
407
|
+
runningCols += this.children[i].getType().columns.length;
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
ordering: undefined,
|
|
411
|
+
monotonicOn: undefined,
|
|
412
|
+
fds: fds.length > 0 ? fds : undefined,
|
|
413
|
+
equivClasses: equiv.length > 0 ? equiv : undefined,
|
|
414
|
+
constantBindings: bindings.length > 0 ? bindings : undefined,
|
|
415
|
+
domainConstraints: domains.length > 0 ? domains : undefined,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
getChildren() {
|
|
419
|
+
return this.children;
|
|
420
|
+
}
|
|
421
|
+
getRelations() {
|
|
422
|
+
return this.children;
|
|
423
|
+
}
|
|
424
|
+
withChildren(newChildren) {
|
|
425
|
+
if (newChildren.length !== this.children.length) {
|
|
426
|
+
quereusError(`AsyncGatherNode expects ${this.children.length} children, got ${newChildren.length}`, StatusCode.INTERNAL);
|
|
427
|
+
}
|
|
428
|
+
let changed = false;
|
|
429
|
+
const typed = [];
|
|
430
|
+
for (let i = 0; i < newChildren.length; i++) {
|
|
431
|
+
const child = newChildren[i];
|
|
432
|
+
if (!isRelationalNode(child)) {
|
|
433
|
+
quereusError(`AsyncGatherNode: child ${i} must be a RelationalPlanNode`, StatusCode.INTERNAL);
|
|
434
|
+
}
|
|
435
|
+
if (child !== this.children[i])
|
|
436
|
+
changed = true;
|
|
437
|
+
typed.push(child);
|
|
438
|
+
}
|
|
439
|
+
if (!changed)
|
|
440
|
+
return this;
|
|
441
|
+
return new AsyncGatherNode(this.scope, typed, this.combinator, this.concurrencyCap, this.preserveAttributeIds);
|
|
442
|
+
}
|
|
443
|
+
get estimatedRows() {
|
|
444
|
+
if (this.combinator.kind === 'unionAll') {
|
|
445
|
+
let total = 0;
|
|
446
|
+
for (const c of this.children) {
|
|
447
|
+
if (c.estimatedRows === undefined)
|
|
448
|
+
return undefined;
|
|
449
|
+
total += c.estimatedRows;
|
|
450
|
+
}
|
|
451
|
+
return total;
|
|
452
|
+
}
|
|
453
|
+
if (this.combinator.kind === 'zipByKey') {
|
|
454
|
+
// Distinct keys across branches is bounded by max(children) <= result
|
|
455
|
+
// <= sum(children). Use max — heavily overlapping keys is the join's
|
|
456
|
+
// normal case. Reviewer may tune toward sum for low-overlap workloads.
|
|
457
|
+
let max = 0;
|
|
458
|
+
for (const c of this.children) {
|
|
459
|
+
if (c.estimatedRows === undefined)
|
|
460
|
+
return undefined;
|
|
461
|
+
max = Math.max(max, c.estimatedRows);
|
|
462
|
+
}
|
|
463
|
+
return max;
|
|
464
|
+
}
|
|
465
|
+
// crossProduct
|
|
466
|
+
let product = 1;
|
|
467
|
+
for (const c of this.children) {
|
|
468
|
+
if (c.estimatedRows === undefined)
|
|
469
|
+
return undefined;
|
|
470
|
+
product *= c.estimatedRows;
|
|
471
|
+
}
|
|
472
|
+
return product;
|
|
473
|
+
}
|
|
474
|
+
toString() {
|
|
475
|
+
return `ASYNC_GATHER(${this.combinator.kind}, N=${this.children.length}, cap=${this.concurrencyCap})`;
|
|
476
|
+
}
|
|
477
|
+
getLogicalAttributes() {
|
|
478
|
+
return {
|
|
479
|
+
combinator: this.combinator.kind,
|
|
480
|
+
branchCount: this.children.length,
|
|
481
|
+
concurrencyCap: this.concurrencyCap,
|
|
482
|
+
...(this.combinator.kind === 'zipByKey'
|
|
483
|
+
? { branchKeyAttrs: this.combinator.branchKeyAttrs, outputKeyAttrs: this.combinator.outputKeyAttrs }
|
|
484
|
+
: {}),
|
|
485
|
+
};
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
//# sourceMappingURL=async-gather-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-gather-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/async-gather-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bloom-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/bloom-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAkF,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpI,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;IAM9G,4BAA4B;aACZ,IAAI,EAAE,kBAAkB;IACxC,8CAA8C;aAC9B,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;aAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;aACrC,iBAAiB,CAAC,EAAE,cAAc;IAClD,wDAAwD;aACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAf5D,SAAkB,QAAQ,yBAAyB;IACnD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK;IACZ,4BAA4B;IACZ,IAAI,EAAE,kBAAkB;IACxC,8CAA8C;IAC9B,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;IAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;IACrC,iBAAiB,CAAC,EAAE,cAAc,YAAA;IAClD,wDAAwD;IACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,YAAA;IAU5D,OAAO,CAAC,eAAe;IAOvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAavB,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bloom-join-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/bloom-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC9K,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAE3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,EAAkF,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpI,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;GAQG;AACH,qBAAa,aAAc,SAAQ,QAAS,YAAW,oBAAoB,EAAE,WAAW,EAAE,sBAAsB;IAM9G,4BAA4B;aACZ,IAAI,EAAE,kBAAkB;IACxC,8CAA8C;aAC9B,KAAK,EAAE,kBAAkB;aACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;aAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;aACrC,iBAAiB,CAAC,EAAE,cAAc;IAClD,wDAAwD;aACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE;IAf5D,SAAkB,QAAQ,yBAAyB;IACnD,OAAO,CAAC,eAAe,CAAsB;gBAG5C,KAAK,EAAE,KAAK;IACZ,4BAA4B;IACZ,IAAI,EAAE,kBAAkB;IACxC,8CAA8C;IAC9B,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,QAAQ;IAClC,2DAA2D;IAC3C,SAAS,EAAE,SAAS,YAAY,EAAE;IAClD,qDAAqD;IACrC,iBAAiB,CAAC,EAAE,cAAc,YAAA;IAClD,wDAAwD;IACxC,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,YAAA;IAU5D,OAAO,CAAC,eAAe;IAOvB,aAAa,IAAI,SAAS,EAAE;IAI5B,OAAO,IAAI,YAAY;IAavB,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmCpF,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,WAAW,IAAI,SAAS,QAAQ,EAAE;IAMlC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAIjE,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAgCxD,WAAW,IAAI,QAAQ;IACvB,gBAAgB,IAAI,cAAc,GAAG,SAAS;IAC9C,aAAa,IAAI,kBAAkB;IACnC,cAAc,IAAI,kBAAkB;IACpC,eAAe,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS;IAGhD,aAAa,IAAI,SAAS,cAAc,EAAE;IAIjC,QAAQ,IAAI,MAAM;IAKlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUxD"}
|
|
@@ -56,11 +56,11 @@ export class BloomJoinNode extends PlanNode {
|
|
|
56
56
|
getType() {
|
|
57
57
|
const leftType = this.left.getType();
|
|
58
58
|
const rightType = this.right.getType();
|
|
59
|
-
const
|
|
60
|
-
const
|
|
59
|
+
const leftIndex = this.left.getAttributeIndex();
|
|
60
|
+
const rightIndex = this.right.getAttributeIndex();
|
|
61
61
|
const indexPairs = this.equiPairs.map(p => ({
|
|
62
|
-
left:
|
|
63
|
-
right:
|
|
62
|
+
left: leftIndex.get(p.leftAttrId) ?? -1,
|
|
63
|
+
right: rightIndex.get(p.rightAttrId) ?? -1,
|
|
64
64
|
})).filter(p => p.left >= 0 && p.right >= 0);
|
|
65
65
|
const keys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length, indexPairs);
|
|
66
66
|
return buildJoinRelationType(leftType, rightType, this.joinType, keys);
|
|
@@ -69,11 +69,12 @@ export class BloomJoinNode extends PlanNode {
|
|
|
69
69
|
const leftPhys = childrenPhysical[0];
|
|
70
70
|
const rightPhys = childrenPhysical[1];
|
|
71
71
|
const leftAttrs = this.left.getAttributes();
|
|
72
|
-
const
|
|
72
|
+
const leftIndex = this.left.getAttributeIndex();
|
|
73
|
+
const rightIndex = this.right.getAttributeIndex();
|
|
73
74
|
// Map attribute-ID-based equi-pairs to column-index-based pairs
|
|
74
75
|
const indexPairs = this.equiPairs.map(p => ({
|
|
75
|
-
left:
|
|
76
|
-
right:
|
|
76
|
+
left: leftIndex.get(p.leftAttrId) ?? -1,
|
|
77
|
+
right: rightIndex.get(p.rightAttrId) ?? -1,
|
|
77
78
|
}));
|
|
78
79
|
const result = analyzeJoinKeyCoverage(this.joinType, leftPhys, rightPhys, this.left.getType(), this.right.getType(), indexPairs, this.left.estimatedRows, this.right.estimatedRows, leftAttrs.length);
|
|
79
80
|
const totalCols = this.getAttributes().length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bloom-join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/bloom-join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAoH,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG9K,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AAIpI;;;;;;;;GAQG;AACH,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAOzB;IAEA;IACA;IAEA;IAEA;IAEA;IAfC,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;IAC3C,eAAe,CAAsB;IAE7C,YACC,KAAY;IACZ,4BAA4B;IACZ,IAAwB;IACxC,8CAA8C;IAC9B,KAAyB,EACzB,QAAkB;IAClC,2DAA2D;IAC3C,SAAkC;IAClD,qDAAqD;IACrC,iBAAkC;IAClD,wDAAwD;IACxC,oBAA2C;QAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,IAAI,GAAG,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5F,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAdH,SAAI,GAAJ,IAAI,CAAoB;QAExB,UAAK,GAAL,KAAK,CAAoB;QACzB,aAAQ,GAAR,QAAQ,CAAU;QAElB,cAAS,GAAT,SAAS,CAAyB;QAElC,sBAAiB,GAAjB,iBAAiB,CAAiB;QAElC,yBAAoB,GAApB,oBAAoB,CAAuB;QAO3D,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,eAAe;QACtB,OAAO,mBAAmB,CACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EACrD,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CACxC,CAAC;IACH,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACnC,CAAC;IAED,OAAO;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"bloom-join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/bloom-join-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
+
import { PlanNode, type RelationalPlanNode, type UnaryRelationalNode, type Attribute, type PhysicalProperties } from './plan-node.js';
|
|
3
|
+
import type { RelationType } from '../../common/datatype.js';
|
|
4
|
+
import type { Scope } from '../scopes/scope.js';
|
|
5
|
+
/**
|
|
6
|
+
* Physical pass-through that forks the runtime context and pumps its child
|
|
7
|
+
* sub-tree into a bounded ring buffer **eagerly on `run()`** (emit / scheduler
|
|
8
|
+
* arg-assembly), not on the consumer's first demand. Inside a hash join this
|
|
9
|
+
* lets the probe's first fetch overlap the build phase's materialization.
|
|
10
|
+
*
|
|
11
|
+
* Rows, order, attribute IDs, keys, FDs, equivClasses, orderings, monotonicity
|
|
12
|
+
* all pass through verbatim. The only effect is timing: the source starts
|
|
13
|
+
* executing the moment the scheduler invokes this node's `run()`, ahead of the
|
|
14
|
+
* consumer's first demand.
|
|
15
|
+
*
|
|
16
|
+
* Iterate-or-close contract: because the fork (and its strict-fork counter) is
|
|
17
|
+
* live from `run()`, any consumer of an EagerPrefetch MUST either iterate the
|
|
18
|
+
* returned stream to completion or call its iterator's `return()` — otherwise
|
|
19
|
+
* the pump leaks (fills the buffer, then blocks on back-pressure forever) and
|
|
20
|
+
* the fork counter stays bumped. `emitBloomJoin` honors this by closing the
|
|
21
|
+
* left iterator in a `finally` that wraps both the build and probe phases.
|
|
22
|
+
*
|
|
23
|
+
* The relational pass-through claims (ordering/fds/equivClasses/
|
|
24
|
+
* constantBindings/domainConstraints/monotonicOn) are propagated explicitly by
|
|
25
|
+
* `computePhysical` — the default child-merge only carries
|
|
26
|
+
* deterministic/idempotent/readonly/expectedLatencyMs/concurrencySafe and would
|
|
27
|
+
* otherwise silently drop them. Access-path-local claims
|
|
28
|
+
* (accessCapabilities/rangeBoundedOn) are NOT propagated: this is a
|
|
29
|
+
* single-input pass-through node, and those live only on the physical leaf
|
|
30
|
+
* where the access plan resolved.
|
|
31
|
+
*/
|
|
32
|
+
export declare class EagerPrefetchNode extends PlanNode implements UnaryRelationalNode {
|
|
33
|
+
readonly source: RelationalPlanNode;
|
|
34
|
+
readonly bufferSize: number;
|
|
35
|
+
readonly nodeType = PlanNodeType.EagerPrefetch;
|
|
36
|
+
constructor(scope: Scope, source: RelationalPlanNode, bufferSize?: number, estimatedCostOverride?: number);
|
|
37
|
+
getAttributes(): readonly Attribute[];
|
|
38
|
+
getType(): RelationType;
|
|
39
|
+
getChildren(): readonly [RelationalPlanNode];
|
|
40
|
+
getRelations(): readonly [RelationalPlanNode];
|
|
41
|
+
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
42
|
+
get estimatedRows(): number | undefined;
|
|
43
|
+
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
44
|
+
toString(): string;
|
|
45
|
+
getLogicalAttributes(): Record<string, unknown>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=eager-prefetch-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eager-prefetch-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/eager-prefetch-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAoB,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACxJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,iBAAkB,SAAQ,QAAS,YAAW,mBAAmB;aAK5D,MAAM,EAAE,kBAAkB;aAC1B,UAAU,EAAE,MAAM;IALnC,SAAkB,QAAQ,8BAA8B;gBAGvD,KAAK,EAAE,KAAK,EACI,MAAM,EAAE,kBAAkB,EAC1B,UAAU,GAAE,MAAW,EACvC,qBAAqB,CAAC,EAAE,MAAM;IAK/B,aAAa,IAAI,SAAS,SAAS,EAAE;IAIrC,OAAO,IAAI,YAAY;IAIvB,WAAW,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI5C,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAsBxD,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,eAAe,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkB3E,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAMxD"}
|