@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.
Files changed (142) hide show
  1. package/dist/src/core/database-assertions.js +3 -3
  2. package/dist/src/core/database-assertions.js.map +1 -1
  3. package/dist/src/core/database.js +3 -3
  4. package/dist/src/core/database.js.map +1 -1
  5. package/dist/src/core/statement.js +3 -3
  6. package/dist/src/core/statement.js.map +1 -1
  7. package/dist/src/index.d.ts +2 -1
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +1 -0
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/parser/visitor.js +1 -1
  12. package/dist/src/parser/visitor.js.map +1 -1
  13. package/dist/src/planner/analysis/attribute-provenance.d.ts +45 -0
  14. package/dist/src/planner/analysis/attribute-provenance.d.ts.map +1 -0
  15. package/dist/src/planner/analysis/attribute-provenance.js +81 -0
  16. package/dist/src/planner/analysis/attribute-provenance.js.map +1 -0
  17. package/dist/src/planner/analysis/const-evaluator.js +5 -5
  18. package/dist/src/planner/analysis/const-evaluator.js.map +1 -1
  19. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  20. package/dist/src/planner/building/select-window.js +54 -21
  21. package/dist/src/planner/building/select-window.js.map +1 -1
  22. package/dist/src/planner/cache/correlation-detector.d.ts +7 -0
  23. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
  24. package/dist/src/planner/cache/correlation-detector.js +34 -2
  25. package/dist/src/planner/cache/correlation-detector.js.map +1 -1
  26. package/dist/src/planner/nodes/async-gather-node.d.ts +169 -0
  27. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -0
  28. package/dist/src/planner/nodes/async-gather-node.js +488 -0
  29. package/dist/src/planner/nodes/async-gather-node.js.map +1 -0
  30. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  31. package/dist/src/planner/nodes/bloom-join-node.js +8 -7
  32. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  33. package/dist/src/planner/nodes/eager-prefetch-node.d.ts +47 -0
  34. package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -0
  35. package/dist/src/planner/nodes/eager-prefetch-node.js +96 -0
  36. package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -0
  37. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +150 -0
  38. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -0
  39. package/dist/src/planner/nodes/fanout-lookup-join-node.js +265 -0
  40. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -0
  41. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  42. package/dist/src/planner/nodes/merge-join-node.js +8 -7
  43. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  44. package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
  45. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  46. package/dist/src/planner/nodes/plan-node-type.js +3 -0
  47. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  48. package/dist/src/planner/nodes/plan-node.d.ts +36 -0
  49. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  50. package/dist/src/planner/nodes/plan-node.js +26 -0
  51. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  52. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  53. package/dist/src/planner/nodes/reference.js +13 -0
  54. package/dist/src/planner/nodes/reference.js.map +1 -1
  55. package/dist/src/planner/optimizer-tuning.d.ts +107 -0
  56. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  57. package/dist/src/planner/optimizer-tuning.js +43 -0
  58. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  59. package/dist/src/planner/optimizer.d.ts.map +1 -1
  60. package/dist/src/planner/optimizer.js +91 -0
  61. package/dist/src/planner/optimizer.js.map +1 -1
  62. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  63. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +1 -6
  64. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  65. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +74 -0
  66. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -0
  67. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +139 -0
  68. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -0
  69. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +58 -0
  70. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -0
  71. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +592 -0
  72. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -0
  73. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts +43 -0
  74. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -0
  75. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +115 -0
  76. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -0
  77. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts +102 -0
  78. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -0
  79. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +545 -0
  80. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -0
  81. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts +45 -0
  82. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -0
  83. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +78 -0
  84. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -0
  85. package/dist/src/planner/scopes/param.d.ts.map +1 -1
  86. package/dist/src/planner/scopes/param.js +13 -11
  87. package/dist/src/planner/scopes/param.js.map +1 -1
  88. package/dist/src/planner/type-utils.js +1 -1
  89. package/dist/src/planner/type-utils.js.map +1 -1
  90. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  91. package/dist/src/planner/validation/plan-validator.js +17 -19
  92. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  93. package/dist/src/runtime/async-semaphore.d.ts +36 -0
  94. package/dist/src/runtime/async-semaphore.d.ts.map +1 -0
  95. package/dist/src/runtime/async-semaphore.js +72 -0
  96. package/dist/src/runtime/async-semaphore.js.map +1 -0
  97. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  98. package/dist/src/runtime/deferred-constraint-queue.js +4 -3
  99. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  100. package/dist/src/runtime/emit/async-gather.d.ts +77 -0
  101. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -0
  102. package/dist/src/runtime/emit/async-gather.js +234 -0
  103. package/dist/src/runtime/emit/async-gather.js.map +1 -0
  104. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  105. package/dist/src/runtime/emit/bloom-join.js +38 -17
  106. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  107. package/dist/src/runtime/emit/eager-prefetch.d.ts +77 -0
  108. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -0
  109. package/dist/src/runtime/emit/eager-prefetch.js +223 -0
  110. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -0
  111. package/dist/src/runtime/emit/fanout-lookup-join.d.ts +130 -0
  112. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -0
  113. package/dist/src/runtime/emit/fanout-lookup-join.js +521 -0
  114. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -0
  115. package/dist/src/runtime/parallel-driver.d.ts +68 -0
  116. package/dist/src/runtime/parallel-driver.d.ts.map +1 -0
  117. package/dist/src/runtime/parallel-driver.js +233 -0
  118. package/dist/src/runtime/parallel-driver.js.map +1 -0
  119. package/dist/src/runtime/register.d.ts.map +1 -1
  120. package/dist/src/runtime/register.js +9 -0
  121. package/dist/src/runtime/register.js.map +1 -1
  122. package/dist/src/runtime/strict-fork.d.ts +36 -0
  123. package/dist/src/runtime/strict-fork.d.ts.map +1 -0
  124. package/dist/src/runtime/strict-fork.js +125 -0
  125. package/dist/src/runtime/strict-fork.js.map +1 -0
  126. package/dist/src/util/comparison.d.ts.map +1 -1
  127. package/dist/src/util/comparison.js +11 -1
  128. package/dist/src/util/comparison.js.map +1 -1
  129. package/dist/src/vtab/concurrency.d.ts +29 -0
  130. package/dist/src/vtab/concurrency.d.ts.map +1 -0
  131. package/dist/src/vtab/concurrency.js +47 -0
  132. package/dist/src/vtab/concurrency.js.map +1 -0
  133. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  134. package/dist/src/vtab/memory/layer/scan-layer.js +67 -29
  135. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  136. package/dist/src/vtab/memory/module.d.ts +21 -0
  137. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  138. package/dist/src/vtab/memory/module.js +21 -0
  139. package/dist/src/vtab/memory/module.js.map +1 -1
  140. package/dist/src/vtab/module.d.ts +47 -0
  141. package/dist/src/vtab/module.d.ts.map +1 -1
  142. 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;IAkCpF,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"}
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 leftAttrs = this.left.getAttributes();
60
- const rightAttrs = this.right.getAttributes();
59
+ const leftIndex = this.left.getAttributeIndex();
60
+ const rightIndex = this.right.getAttributeIndex();
61
61
  const indexPairs = this.equiPairs.map(p => ({
62
- left: leftAttrs.findIndex(a => a.id === p.leftAttrId),
63
- right: rightAttrs.findIndex(a => a.id === p.rightAttrId),
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 rightAttrs = this.right.getAttributes();
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: leftAttrs.findIndex(a => a.id === p.leftAttrId),
76
- right: rightAttrs.findIndex(a => a.id === p.rightAttrId),
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":"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"}
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"}