@quereus/quereus 3.1.1 → 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 (177) 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.d.ts +17 -3
  4. package/dist/src/core/database.d.ts.map +1 -1
  5. package/dist/src/core/database.js +79 -6
  6. package/dist/src/core/database.js.map +1 -1
  7. package/dist/src/core/statement.js +3 -3
  8. package/dist/src/core/statement.js.map +1 -1
  9. package/dist/src/emit/ast-stringify.d.ts +0 -1
  10. package/dist/src/emit/ast-stringify.d.ts.map +1 -1
  11. package/dist/src/emit/ast-stringify.js +187 -78
  12. package/dist/src/emit/ast-stringify.js.map +1 -1
  13. package/dist/src/index.d.ts +2 -1
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +1 -0
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/parser/ast.d.ts +0 -4
  18. package/dist/src/parser/ast.d.ts.map +1 -1
  19. package/dist/src/parser/parser.d.ts +9 -1
  20. package/dist/src/parser/parser.d.ts.map +1 -1
  21. package/dist/src/parser/parser.js +33 -20
  22. package/dist/src/parser/parser.js.map +1 -1
  23. package/dist/src/parser/visitor.js +1 -1
  24. package/dist/src/parser/visitor.js.map +1 -1
  25. package/dist/src/planner/analysis/attribute-provenance.d.ts +45 -0
  26. package/dist/src/planner/analysis/attribute-provenance.d.ts.map +1 -0
  27. package/dist/src/planner/analysis/attribute-provenance.js +81 -0
  28. package/dist/src/planner/analysis/attribute-provenance.js.map +1 -0
  29. package/dist/src/planner/analysis/const-evaluator.js +5 -5
  30. package/dist/src/planner/analysis/const-evaluator.js.map +1 -1
  31. package/dist/src/planner/building/select-window.d.ts.map +1 -1
  32. package/dist/src/planner/building/select-window.js +54 -21
  33. package/dist/src/planner/building/select-window.js.map +1 -1
  34. package/dist/src/planner/cache/correlation-detector.d.ts +7 -0
  35. package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
  36. package/dist/src/planner/cache/correlation-detector.js +34 -2
  37. package/dist/src/planner/cache/correlation-detector.js.map +1 -1
  38. package/dist/src/planner/nodes/async-gather-node.d.ts +169 -0
  39. package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -0
  40. package/dist/src/planner/nodes/async-gather-node.js +488 -0
  41. package/dist/src/planner/nodes/async-gather-node.js.map +1 -0
  42. package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
  43. package/dist/src/planner/nodes/bloom-join-node.js +8 -7
  44. package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
  45. package/dist/src/planner/nodes/eager-prefetch-node.d.ts +47 -0
  46. package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -0
  47. package/dist/src/planner/nodes/eager-prefetch-node.js +96 -0
  48. package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -0
  49. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +150 -0
  50. package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -0
  51. package/dist/src/planner/nodes/fanout-lookup-join-node.js +265 -0
  52. package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -0
  53. package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
  54. package/dist/src/planner/nodes/merge-join-node.js +8 -7
  55. package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
  56. package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
  57. package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
  58. package/dist/src/planner/nodes/plan-node-type.js +3 -0
  59. package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
  60. package/dist/src/planner/nodes/plan-node.d.ts +36 -0
  61. package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
  62. package/dist/src/planner/nodes/plan-node.js +26 -0
  63. package/dist/src/planner/nodes/plan-node.js.map +1 -1
  64. package/dist/src/planner/nodes/reference.d.ts.map +1 -1
  65. package/dist/src/planner/nodes/reference.js +36 -1
  66. package/dist/src/planner/nodes/reference.js.map +1 -1
  67. package/dist/src/planner/optimizer-tuning.d.ts +107 -0
  68. package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
  69. package/dist/src/planner/optimizer-tuning.js +43 -0
  70. package/dist/src/planner/optimizer-tuning.js.map +1 -1
  71. package/dist/src/planner/optimizer.d.ts.map +1 -1
  72. package/dist/src/planner/optimizer.js +91 -0
  73. package/dist/src/planner/optimizer.js.map +1 -1
  74. package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
  75. package/dist/src/planner/rules/access/rule-monotonic-range-access.js +1 -6
  76. package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
  77. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +74 -0
  78. package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -0
  79. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +139 -0
  80. package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -0
  81. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +58 -0
  82. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -0
  83. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +592 -0
  84. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -0
  85. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts +43 -0
  86. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -0
  87. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +115 -0
  88. package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -0
  89. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts +102 -0
  90. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -0
  91. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +545 -0
  92. package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -0
  93. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts +45 -0
  94. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -0
  95. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +78 -0
  96. package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -0
  97. package/dist/src/planner/scopes/param.d.ts.map +1 -1
  98. package/dist/src/planner/scopes/param.js +13 -11
  99. package/dist/src/planner/scopes/param.js.map +1 -1
  100. package/dist/src/planner/type-utils.js +1 -1
  101. package/dist/src/planner/type-utils.js.map +1 -1
  102. package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
  103. package/dist/src/planner/validation/plan-validator.js +17 -19
  104. package/dist/src/planner/validation/plan-validator.js.map +1 -1
  105. package/dist/src/runtime/async-semaphore.d.ts +36 -0
  106. package/dist/src/runtime/async-semaphore.d.ts.map +1 -0
  107. package/dist/src/runtime/async-semaphore.js +72 -0
  108. package/dist/src/runtime/async-semaphore.js.map +1 -0
  109. package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
  110. package/dist/src/runtime/deferred-constraint-queue.js +4 -3
  111. package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
  112. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  113. package/dist/src/runtime/emit/add-constraint.js +51 -37
  114. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  115. package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
  116. package/dist/src/runtime/emit/alter-table.js +0 -2
  117. package/dist/src/runtime/emit/alter-table.js.map +1 -1
  118. package/dist/src/runtime/emit/async-gather.d.ts +77 -0
  119. package/dist/src/runtime/emit/async-gather.d.ts.map +1 -0
  120. package/dist/src/runtime/emit/async-gather.js +234 -0
  121. package/dist/src/runtime/emit/async-gather.js.map +1 -0
  122. package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
  123. package/dist/src/runtime/emit/bloom-join.js +38 -17
  124. package/dist/src/runtime/emit/bloom-join.js.map +1 -1
  125. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  126. package/dist/src/runtime/emit/dml-executor.js +12 -52
  127. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  128. package/dist/src/runtime/emit/eager-prefetch.d.ts +77 -0
  129. package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -0
  130. package/dist/src/runtime/emit/eager-prefetch.js +223 -0
  131. package/dist/src/runtime/emit/eager-prefetch.js.map +1 -0
  132. package/dist/src/runtime/emit/fanout-lookup-join.d.ts +130 -0
  133. package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -0
  134. package/dist/src/runtime/emit/fanout-lookup-join.js +521 -0
  135. package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -0
  136. package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
  137. package/dist/src/runtime/emit/schema-declarative.js +28 -2
  138. package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
  139. package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
  140. package/dist/src/runtime/emit/transaction.js +4 -22
  141. package/dist/src/runtime/emit/transaction.js.map +1 -1
  142. package/dist/src/runtime/parallel-driver.d.ts +68 -0
  143. package/dist/src/runtime/parallel-driver.d.ts.map +1 -0
  144. package/dist/src/runtime/parallel-driver.js +233 -0
  145. package/dist/src/runtime/parallel-driver.js.map +1 -0
  146. package/dist/src/runtime/register.d.ts.map +1 -1
  147. package/dist/src/runtime/register.js +9 -0
  148. package/dist/src/runtime/register.js.map +1 -1
  149. package/dist/src/runtime/strict-fork.d.ts +36 -0
  150. package/dist/src/runtime/strict-fork.d.ts.map +1 -0
  151. package/dist/src/runtime/strict-fork.js +125 -0
  152. package/dist/src/runtime/strict-fork.js.map +1 -0
  153. package/dist/src/schema/manager.d.ts.map +1 -1
  154. package/dist/src/schema/manager.js +0 -4
  155. package/dist/src/schema/manager.js.map +1 -1
  156. package/dist/src/util/comparison.d.ts.map +1 -1
  157. package/dist/src/util/comparison.js +11 -1
  158. package/dist/src/util/comparison.js.map +1 -1
  159. package/dist/src/vtab/capabilities.d.ts +26 -0
  160. package/dist/src/vtab/capabilities.d.ts.map +1 -1
  161. package/dist/src/vtab/concurrency.d.ts +29 -0
  162. package/dist/src/vtab/concurrency.d.ts.map +1 -0
  163. package/dist/src/vtab/concurrency.js +47 -0
  164. package/dist/src/vtab/concurrency.js.map +1 -0
  165. package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
  166. package/dist/src/vtab/memory/layer/scan-layer.js +67 -29
  167. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  168. package/dist/src/vtab/memory/module.d.ts +21 -0
  169. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  170. package/dist/src/vtab/memory/module.js +23 -0
  171. package/dist/src/vtab/memory/module.js.map +1 -1
  172. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  173. package/dist/src/vtab/memory/table.js +2 -0
  174. package/dist/src/vtab/memory/table.js.map +1 -1
  175. package/dist/src/vtab/module.d.ts +51 -1
  176. package/dist/src/vtab/module.d.ts.map +1 -1
  177. package/package.json +4 -3
@@ -37,7 +37,7 @@ export function traverseAst(node, callbacks) {
37
37
  (stmt.orderBy ?? []).forEach(o => traverseAst(o.expr, callbacks));
38
38
  traverseAst(stmt.limit, callbacks);
39
39
  traverseAst(stmt.offset, callbacks);
40
- traverseAst(stmt.union, callbacks);
40
+ traverseAst(stmt.compound?.select, callbacks);
41
41
  break;
42
42
  }
43
43
  case 'insert': {
@@ -1 +1 @@
1
- {"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../../src/parser/visitor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../../src/parser/visitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Attribute provenance: a derived map from attribute id to the relational node
3
+ * that *originated* (minted) it.
4
+ *
5
+ * Attribute ids have two distinct lifecycle operations that `getAttributes()`
6
+ * smears together:
7
+ *
8
+ * - **Origination** — a node mints a fresh id via `PlanNode.nextAttrId()`
9
+ * (scans, computed projections, aggregate outputs, VALUES rows).
10
+ * - **Forwarding** — a node re-publishes an id one of its children already
11
+ * produced (SetOperation, Join concatenation, EagerPrefetch, AsyncGather,
12
+ * simple column-ref projections, ...).
13
+ *
14
+ * The real invariant of the attribute model is "each id is *originated* exactly
15
+ * once", NOT "each id appears at most once in the tree" — forwarding the same id
16
+ * up through N ancestors is the whole point of stable ids.
17
+ *
18
+ * Origination is derivable structurally with no per-node declaration: an id is
19
+ * originated at the deepest relational node that outputs it and whose direct
20
+ * relational children do **not**. A single post-order walk over the existing
21
+ * `getAttributes()` surface yields the complete provenance map.
22
+ */
23
+ import { type PlanNode, type RelationalPlanNode } from '../nodes/plan-node.js';
24
+ export interface ProvenanceEntry {
25
+ /** The relational node that originated (minted) this attribute id. */
26
+ readonly originNode: RelationalPlanNode;
27
+ /** Tree path to the origin (node-type chain), for diagnostics. */
28
+ readonly path: string;
29
+ }
30
+ /**
31
+ * Compute the attribute-provenance surface for a plan tree in one post-order
32
+ * walk. An attribute id is *originated* at the deepest relational node that
33
+ * outputs it and whose direct relational children do not; ancestors that
34
+ * re-publish the id are forwards, not new origins.
35
+ *
36
+ * The returned map contains an entry for every id that appears anywhere in the
37
+ * tree (forwarded ids resolve to their origin), so membership answers "is this
38
+ * id in scope?" exactly as the old global-set check did.
39
+ *
40
+ * @throws QuereusError(INTERNAL) when two distinct relational nodes originate
41
+ * the same id (the genuine-bug case the old validator caught) or when a single
42
+ * node lists the same id more than once. Forwarding never throws.
43
+ */
44
+ export declare function computeAttributeProvenance(root: PlanNode): Map<number, ProvenanceEntry>;
45
+ //# sourceMappingURL=attribute-provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-provenance.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/attribute-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAoB,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIjG,MAAM,WAAW,eAAe;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAoDvF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Attribute provenance: a derived map from attribute id to the relational node
3
+ * that *originated* (minted) it.
4
+ *
5
+ * Attribute ids have two distinct lifecycle operations that `getAttributes()`
6
+ * smears together:
7
+ *
8
+ * - **Origination** — a node mints a fresh id via `PlanNode.nextAttrId()`
9
+ * (scans, computed projections, aggregate outputs, VALUES rows).
10
+ * - **Forwarding** — a node re-publishes an id one of its children already
11
+ * produced (SetOperation, Join concatenation, EagerPrefetch, AsyncGather,
12
+ * simple column-ref projections, ...).
13
+ *
14
+ * The real invariant of the attribute model is "each id is *originated* exactly
15
+ * once", NOT "each id appears at most once in the tree" — forwarding the same id
16
+ * up through N ancestors is the whole point of stable ids.
17
+ *
18
+ * Origination is derivable structurally with no per-node declaration: an id is
19
+ * originated at the deepest relational node that outputs it and whose direct
20
+ * relational children do **not**. A single post-order walk over the existing
21
+ * `getAttributes()` surface yields the complete provenance map.
22
+ */
23
+ import { isRelationalNode } from '../nodes/plan-node.js';
24
+ import { QuereusError } from '../../common/errors.js';
25
+ import { StatusCode } from '../../common/types.js';
26
+ /**
27
+ * Compute the attribute-provenance surface for a plan tree in one post-order
28
+ * walk. An attribute id is *originated* at the deepest relational node that
29
+ * outputs it and whose direct relational children do not; ancestors that
30
+ * re-publish the id are forwards, not new origins.
31
+ *
32
+ * The returned map contains an entry for every id that appears anywhere in the
33
+ * tree (forwarded ids resolve to their origin), so membership answers "is this
34
+ * id in scope?" exactly as the old global-set check did.
35
+ *
36
+ * @throws QuereusError(INTERNAL) when two distinct relational nodes originate
37
+ * the same id (the genuine-bug case the old validator caught) or when a single
38
+ * node lists the same id more than once. Forwarding never throws.
39
+ */
40
+ export function computeAttributeProvenance(root) {
41
+ const provenance = new Map();
42
+ const visited = new Set();
43
+ const walk = (node, path) => {
44
+ // Dedupe by node identity: plan trees are DAGs (shared CTE/common
45
+ // subexpression instances). Visiting a shared instance once keeps the
46
+ // walk linear and avoids treating its single origin as a collision.
47
+ if (visited.has(node))
48
+ return;
49
+ visited.add(node);
50
+ const nodeChain = [...path, node.nodeType];
51
+ // Post-order: process children before deciding what this node originates.
52
+ for (const child of node.getChildren()) {
53
+ walk(child, nodeChain);
54
+ }
55
+ if (!isRelationalNode(node))
56
+ return;
57
+ // Ids output by direct relational children are forwarded, not originated here.
58
+ const childIds = new Set();
59
+ for (const rel of node.getRelations()) {
60
+ for (const attr of rel.getAttributes()) {
61
+ childIds.add(attr.id);
62
+ }
63
+ }
64
+ const nodePath = nodeChain.join(' > ');
65
+ for (const attr of node.getAttributes()) {
66
+ if (childIds.has(attr.id))
67
+ continue; // forwarded — not an origin
68
+ const existing = provenance.get(attr.id);
69
+ if (existing) {
70
+ if (existing.originNode === node) {
71
+ throw new QuereusError(`Duplicate attribute ID ${attr.id} within the output of ${nodePath}`, StatusCode.INTERNAL);
72
+ }
73
+ throw new QuereusError(`Attribute ID ${attr.id} originated at two distinct nodes (${existing.path} and ${nodePath})`, StatusCode.INTERNAL);
74
+ }
75
+ provenance.set(attr.id, { originNode: node, path: nodePath });
76
+ }
77
+ };
78
+ walk(root, []);
79
+ return provenance;
80
+ }
81
+ //# sourceMappingURL=attribute-provenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-provenance.js","sourceRoot":"","sources":["../../../../src/planner/analysis/attribute-provenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,gBAAgB,EAA0C,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AASnD;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAc;IACxD,MAAM,UAAU,GAAG,IAAI,GAAG,EAA2B,CAAC;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;IAEpC,MAAM,IAAI,GAAG,CAAC,IAAc,EAAE,IAAuB,EAAQ,EAAE;QAC9D,kEAAkE;QAClE,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElB,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,0EAA0E;QAC1E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;YAAE,OAAO;QAEpC,+EAA+E;QAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACF,CAAC;QAED,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,SAAS,CAAC,4BAA4B;YAEjE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACd,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;oBAClC,MAAM,IAAI,YAAY,CACrB,0BAA0B,IAAI,CAAC,EAAE,yBAAyB,QAAQ,EAAE,EACpE,UAAU,CAAC,QAAQ,CACnB,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,YAAY,CACrB,gBAAgB,IAAI,CAAC,EAAE,sCAAsC,QAAQ,CAAC,IAAI,QAAQ,QAAQ,GAAG,EAC7F,UAAU,CAAC,QAAQ,CACnB,CAAC;YACH,CAAC;YAED,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC/D,CAAC;IACF,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACf,OAAO,UAAU,CAAC;AACnB,CAAC"}
@@ -9,7 +9,7 @@ import { StatusCode } from '../../common/types.js';
9
9
  import { emitPlanNode } from '../../runtime/emitters.js';
10
10
  import { EmissionContext } from '../../runtime/emission-context.js';
11
11
  import { Scheduler } from '../../runtime/scheduler.js';
12
- import { RowContextMap } from '../../runtime/context-helpers.js';
12
+ import { createStrictRowContextMap, wrapTableContextsStrict } from '../../runtime/strict-fork.js';
13
13
  import { isAsyncIterable } from '../../runtime/utils.js';
14
14
  import { createLogger } from '../../common/logger.js';
15
15
  import { TableLiteralNode } from '../nodes/values-node.js';
@@ -33,8 +33,8 @@ export function createRuntimeExpressionEvaluator(db) {
33
33
  db,
34
34
  stmt: undefined,
35
35
  params: {}, // No parameters needed for constants
36
- context: new RowContextMap(), // No row context needed
37
- tableContexts: new Map(), // No table contexts needed for constants
36
+ context: createStrictRowContextMap(), // No row context needed
37
+ tableContexts: wrapTableContextsStrict(new Map()), // No table contexts needed for constants
38
38
  enableMetrics: false
39
39
  };
40
40
  // Execute and get the result
@@ -136,8 +136,8 @@ export function createRuntimeRelationalEvaluator(db) {
136
136
  db,
137
137
  stmt: undefined,
138
138
  params: {},
139
- context: new RowContextMap(),
140
- tableContexts: new Map(),
139
+ context: createStrictRowContextMap(),
140
+ tableContexts: wrapTableContextsStrict(new Map()),
141
141
  enableMetrics: false
142
142
  };
143
143
  return scheduler.run(runtimeCtx);
@@ -1 +1 @@
1
- {"version":3,"file":"const-evaluator.js","sourceRoot":"","sources":["../../../../src/planner/analysis/const-evaluator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"const-evaluator.js","sourceRoot":"","sources":["../../../../src/planner/analysis/const-evaluator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"select-window.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,aAAa,EAAE,eAAe,EAC9B,IAAI,EAAE,GAAG,CAAC,UAAU,GAClB,kBAAkB,CAqEpB"}
1
+ {"version":3,"file":"select-window.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,kBAAkB,EAAkB,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAMrE,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,eAAe,EAAE;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EACnE,aAAa,EAAE,eAAe,EAC9B,IAAI,EAAE,GAAG,CAAC,UAAU,GAClB,kBAAkB,CAqEpB"}
@@ -105,16 +105,17 @@ function buildWindowProjections(stmt, windowNode, selectContext, windowFunctions
105
105
  // Build each column expression once and reuse for both classification and projection
106
106
  const builtExpr = buildExpression(selectContext, column.expr, true);
107
107
  if (isWindowExpression(builtExpr)) {
108
- // For window functions, use ArrayIndexNode to access the value by direct index
109
- const windowColumnIndex = findWindowFunctionIndex(builtExpr, windowFunctions, sourceColumnCount);
110
- if (windowColumnIndex >= 0) {
111
- const windowColumnType = windowType.columns[windowColumnIndex].type;
112
- const arrayIndexNode = new ArrayIndexNode(selectContext.scope, windowColumnIndex, windowColumnType);
113
- windowProjections.push({
114
- node: arrayIndexNode,
115
- alias: column.alias
116
- });
117
- }
108
+ // Rewrite each window-function descendant into an ArrayIndexNode pointing
109
+ // at its computed window-output column, preserving any surrounding
110
+ // arithmetic / scalar wrapper (e.g. `1000 - row_number() over (...)`).
111
+ // The top-level case (`row_number() over (...) as rn`) falls out naturally:
112
+ // the whole tree is the window node, so the rewrite returns a bare
113
+ // ArrayIndexNode, matching the prior behavior.
114
+ const rewritten = rewriteWindowFunctions(builtExpr, windowFunctions, sourceColumnCount, windowType, selectContext.scope);
115
+ windowProjections.push({
116
+ node: rewritten,
117
+ alias: column.alias
118
+ });
118
119
  }
119
120
  else {
120
121
  // For regular columns, use the already-built expression
@@ -128,21 +129,53 @@ function buildWindowProjections(stmt, windowNode, selectContext, windowFunctions
128
129
  return windowProjections;
129
130
  }
130
131
  /**
131
- * Finds the index of a window function in the window output
132
+ * Recursively rewrites every WindowFunctionCallNode descendant of a scalar
133
+ * expression into an ArrayIndexNode referencing that function's window-output
134
+ * column, leaving the surrounding expression structure intact.
135
+ *
136
+ * Mirrors the aggregate path (collectInnerAggregates): the whole outer
137
+ * expression is preserved and the inner window results are substituted back in.
138
+ * Does NOT recurse into a window function's own arguments — its result is a
139
+ * single output column already materialized by the WindowNode.
140
+ */
141
+ function rewriteWindowFunctions(node, windowFunctions, sourceColumnCount, windowType, scope) {
142
+ if (CapabilityDetectors.isWindowFunction(node)) {
143
+ const index = findWindowColumnIndex(node, windowFunctions, sourceColumnCount);
144
+ if (index >= 0) {
145
+ return new ArrayIndexNode(scope, index, windowType.columns[index].type);
146
+ }
147
+ // No match (shouldn't happen for a window node we collected) — leave as-is.
148
+ return node;
149
+ }
150
+ const children = node.getChildren();
151
+ const newChildren = [];
152
+ let changed = false;
153
+ for (const child of children) {
154
+ // Only scalar children participate in window rewriting; pass others through.
155
+ if ('expression' in child) {
156
+ const rewrittenChild = rewriteWindowFunctions(child, windowFunctions, sourceColumnCount, windowType, scope);
157
+ if (rewrittenChild !== child) {
158
+ changed = true;
159
+ }
160
+ newChildren.push(rewrittenChild);
161
+ }
162
+ else {
163
+ newChildren.push(child);
164
+ }
165
+ }
166
+ return changed ? node.withChildren(newChildren) : node;
167
+ }
168
+ /**
169
+ * Finds the window-output column index for a single window-function node by
170
+ * matching it (name + window spec) against the collected window functions.
132
171
  */
133
- function findWindowFunctionIndex(originalExpr, windowFunctions, sourceColumnCount) {
172
+ function findWindowColumnIndex(windowNode, windowFunctions, sourceColumnCount) {
134
173
  const matchingWindowFuncIndex = windowFunctions.findIndex(({ func }) => {
135
- // Match based on function name, parameters, and window specification
136
- if (!CapabilityDetectors.isWindowFunction(originalExpr) ||
137
- func.functionName.toLowerCase() !== originalExpr.functionName.toLowerCase()) {
174
+ // Match based on function name and window specification
175
+ if (func.functionName.toLowerCase() !== windowNode.functionName.toLowerCase()) {
138
176
  return false;
139
177
  }
140
- // Cast to WindowFunctionCallNode to access expression property
141
- const windowFunc = originalExpr;
142
- // Also compare window specifications to distinguish between functions with same name
143
- const originalWindow = windowFunc.expression.window;
144
- const funcWindow = func.expression.window;
145
- return compareWindowSpecs(originalWindow, funcWindow);
178
+ return compareWindowSpecs(windowNode.expression.window, func.expression.window);
146
179
  });
147
180
  return matchingWindowFuncIndex >= 0 ? sourceColumnCount + matchingWindowFuncIndex : -1;
148
181
  }
@@ -1 +1 @@
1
- {"version":3,"file":"select-window.js","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-window.js","sourceRoot":"","sources":["../../../../src/planner/building/select-window.ts"],"names":[],"mappings":"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"}
@@ -8,4 +8,11 @@ import { type RelationalPlanNode } from '../nodes/plan-node.js';
8
8
  * that are not defined within its own scope.
9
9
  */
10
10
  export declare function isCorrelatedSubquery(subqueryNode: RelationalPlanNode): boolean;
11
+ /**
12
+ * Collect the attribute IDs the subquery references from *outer* scopes (i.e.
13
+ * not defined within its own subtree). An empty set means the subquery is not
14
+ * correlated. Used by rules that need to know *which* outer attributes a
15
+ * correlation depends on, not merely that it is correlated.
16
+ */
17
+ export declare function collectExternalReferences(subqueryNode: RelationalPlanNode): Set<number>;
11
18
  //# sourceMappingURL=correlation-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"correlation-detector.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/correlation-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmC,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIjG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAO9E"}
1
+ {"version":3,"file":"correlation-detector.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/correlation-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmC,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIjG;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAK9E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,CAAC,CAMvF"}
@@ -9,12 +9,24 @@ import { PlanNodeType } from '../nodes/plan-node-type.js';
9
9
  * that are not defined within its own scope.
10
10
  */
11
11
  export function isCorrelatedSubquery(subqueryNode) {
12
- // Collect all attributes defined within the subquery
12
+ // Short-circuit: stop at the first external reference rather than collecting all.
13
13
  const definedAttributes = new Set();
14
14
  collectDefinedAttributes(subqueryNode, definedAttributes);
15
- // Check if any column references use attributes not defined within the subquery
16
15
  return hasExternalReferences(subqueryNode, definedAttributes);
17
16
  }
17
+ /**
18
+ * Collect the attribute IDs the subquery references from *outer* scopes (i.e.
19
+ * not defined within its own subtree). An empty set means the subquery is not
20
+ * correlated. Used by rules that need to know *which* outer attributes a
21
+ * correlation depends on, not merely that it is correlated.
22
+ */
23
+ export function collectExternalReferences(subqueryNode) {
24
+ const definedAttributes = new Set();
25
+ collectDefinedAttributes(subqueryNode, definedAttributes);
26
+ const external = new Set();
27
+ collectExternalAttributeIds(subqueryNode, definedAttributes, external);
28
+ return external;
29
+ }
18
30
  /**
19
31
  * Recursively collect all attributes defined by relational nodes within a subtree
20
32
  */
@@ -70,4 +82,24 @@ function hasExternalReferences(node, definedAttributes) {
70
82
  }
71
83
  return false;
72
84
  }
85
+ /**
86
+ * Like {@link hasExternalReferences}, but accumulates every external attribute
87
+ * ID into `external` instead of short-circuiting at the first one.
88
+ */
89
+ function collectExternalAttributeIds(node, definedAttributes, external) {
90
+ if (node.nodeType === PlanNodeType.ColumnReference) {
91
+ const colRef = node;
92
+ if (!definedAttributes.has(colRef.attributeId)) {
93
+ external.add(colRef.attributeId);
94
+ }
95
+ }
96
+ for (const child of node.getChildren()) {
97
+ collectExternalAttributeIds(child, definedAttributes, external);
98
+ }
99
+ if (isRelationalNode(node)) {
100
+ for (const relation of node.getRelations()) {
101
+ collectExternalAttributeIds(relation, definedAttributes, external);
102
+ }
103
+ }
104
+ }
73
105
  //# sourceMappingURL=correlation-detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"correlation-detector.js","sourceRoot":"","sources":["../../../../src/planner/cache/correlation-detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAA0C,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG1D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAgC;IACpE,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,wBAAwB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAE1D,gFAAgF;IAChF,OAAO,qBAAqB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,IAAc,EAAE,iBAA8B;IAC/E,mDAAmD;IACnD,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACF,CAAC;IAED,mCAAmC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC9B,wBAAwB,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IACpD,CAAC;IAED,0CAA0C;IAC1C,IAAI,YAAY,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,wBAAwB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAc,EAAE,iBAA8B;IAC5E,sCAAsC;IACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,IAA2B,CAAC;QAC3C,6FAA6F;QAC7F,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,CAAC,+BAA+B;QAC7C,CAAC;IACF,CAAC;IAED,qBAAqB;IACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,wCAAwC;IACxC,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,IAAI,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;gBACxD,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"correlation-detector.js","sourceRoot":"","sources":["../../../../src/planner/cache/correlation-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import { PlanNode } from './plan-node.js';
2
+ import type { RelationalPlanNode, Attribute, PhysicalProperties } from './plan-node.js';
3
+ import type { RelationType } from '../../common/datatype.js';
4
+ import { PlanNodeType } from './plan-node-type.js';
5
+ import type { Scope } from '../scopes/scope.js';
6
+ /**
7
+ * How {@link AsyncGatherNode} combines rows from its N independent child relations.
8
+ *
9
+ * - `unionAll`: yield every row from every branch in arrival order — multiset
10
+ * union (no dedup). All children must have matching column counts.
11
+ *
12
+ * - `crossProduct`: drain every branch fully, then yield the full Cartesian
13
+ * product. The output attributes are the concatenation of all children's
14
+ * attributes. **Materialises every branch in memory before yielding the
15
+ * first row** — see emitter docs in `runtime/emit/async-gather.ts`.
16
+ *
17
+ * - `zipByKey`: full N-way outer join on the key columns named **per branch** by
18
+ * `branchKeyAttrs`. For each distinct key value present in any branch, emit
19
+ * exactly one composed row: the K merged key columns once (carrying the
20
+ * gather-minted `outputKeyAttrs` ids), then each branch's non-key columns
21
+ * (NULL when that branch has no row for that key). Implemented as an **eager
22
+ * hash-merge** over a `BTree` keyed by the key tuple — **drains every branch
23
+ * in memory before yielding the first row** (see emitter docs). It is *not*
24
+ * a chained binary full-outer-join lowering.
25
+ *
26
+ * The gather genuinely **originates** the K merged key columns (their ids,
27
+ * `outputKeyAttrs`, appear in no child — "branch0's key, or branch1's key, …,
28
+ * whichever row is present") and **forwards** each branch's non-key ids (each
29
+ * appears in exactly one child). This is provenance-clean by construction:
30
+ * no id is output by two branches, so `validatePhysicalTree` passes.
31
+ *
32
+ * The discriminated-union shape is deliberate: future variants (e.g.
33
+ * `mergeOrdered`) will attach per-combinator config without breaking the
34
+ * constructor.
35
+ */
36
+ export type AsyncGatherCombinator = {
37
+ readonly kind: 'unionAll';
38
+ } | {
39
+ readonly kind: 'crossProduct';
40
+ } | {
41
+ readonly kind: 'zipByKey';
42
+ /**
43
+ * Per branch b, the attribute IDs of that branch's K key columns, in
44
+ * key-position order. Distinct per branch (provenance-clean — each branch
45
+ * originates its own key id). `length === children.length`; every inner
46
+ * list has the same length K.
47
+ */
48
+ readonly branchKeyAttrs: readonly (readonly number[])[];
49
+ /**
50
+ * The K output key attribute IDs the gather mints (originates). One per
51
+ * key position. Pairwise distinct and disjoint from every child's
52
+ * attribute IDs. Output key columns sit at index 0..K-1, in this order.
53
+ */
54
+ readonly outputKeyAttrs: readonly number[];
55
+ };
56
+ /**
57
+ * Per-branch column-index mapping for a `zipByKey` gather, resolved from the
58
+ * per-branch {@link AsyncGatherCombinator.branchKeyAttrs} lists against each
59
+ * child's attribute layout. Consumed by the node's type inference and by the
60
+ * runtime emitter (via {@link AsyncGatherNode.getZipByKeyIndices}).
61
+ */
62
+ export interface ZipByKeyIndices {
63
+ /** Per branch, the column index of each key attribute, in `branchKeyAttrs[b]` order. */
64
+ readonly branchKeyIndices: readonly (readonly number[])[];
65
+ /** Per branch, the column indices of non-key columns, in declared order. */
66
+ readonly branchNonKeyIndices: readonly (readonly number[])[];
67
+ }
68
+ /**
69
+ * Physical N-ary relational node that drives ≥ 2 independent (uncorrelated)
70
+ * child relations concurrently via {@link ParallelDriver.drive} and combines
71
+ * their outputs with the configured {@link AsyncGatherCombinator}.
72
+ *
73
+ * Properties:
74
+ *
75
+ * - `unionAll`: ordering is dropped (arrival-order interleave is
76
+ * non-deterministic); FDs / ECs / constant bindings / domain constraints
77
+ * are dropped (same conservatism `SetOperationNode.computePhysical` already
78
+ * applies); attribute IDs mirror `children[0]` to preserve downstream
79
+ * `ORDER BY` references; `isSet` is `false` (duplicates allowed); per-column
80
+ * nullability is the OR across children.
81
+ *
82
+ * - `crossProduct`: ordering is dropped; FDs / ECs / bindings / domain
83
+ * constraints are the pairwise N-ary fold of the children (the same fold
84
+ * `JoinNode(cross)` does, repeated); attribute IDs are the verbatim
85
+ * concatenation of children; per-column nullability flows through
86
+ * unchanged. Cartesian product order is deterministic-but-unspecified
87
+ * (a function of the per-branch arrival order). **Buffers all branches
88
+ * before yielding** — not suitable for large branches.
89
+ *
90
+ * `concurrencySafe` and `expectedLatencyMs` are NOT propagated by this node:
91
+ * those fields are not yet defined on {@link PhysicalProperties} (the parallel
92
+ * track has not landed them). Once a successor ticket (5.5 or later) adds
93
+ * them, the intended merge is `AND` across children for `concurrencySafe` and
94
+ * `max` across children for `expectedLatencyMs`; update this node's
95
+ * `computePhysical` at that time. The fields currently inherited from
96
+ * `PlanNode.physical`'s default child-merge are `deterministic`,
97
+ * `idempotent`, and `readonly` (AND across children).
98
+ */
99
+ export declare class AsyncGatherNode extends PlanNode implements RelationalPlanNode {
100
+ readonly children: readonly RelationalPlanNode[];
101
+ readonly combinator: AsyncGatherCombinator;
102
+ readonly concurrencyCap: number;
103
+ readonly preserveAttributeIds?: readonly Attribute[] | undefined;
104
+ readonly nodeType = PlanNodeType.AsyncGather;
105
+ private attributesCache;
106
+ private zipIndicesCache;
107
+ constructor(scope: Scope, children: readonly RelationalPlanNode[], combinator: AsyncGatherCombinator, concurrencyCap: number, preserveAttributeIds?: readonly Attribute[] | undefined);
108
+ private static validateConstruction;
109
+ /**
110
+ * Validate a `zipByKey` combinator under the per-branch-refs representation:
111
+ *
112
+ * - `branchKeyAttrs` has one list per branch, all of the same non-empty
113
+ * length K.
114
+ * - `outputKeyAttrs` has length K, its ids are pairwise distinct AND disjoint
115
+ * from every child attribute id (load-bearing: a collision would let the
116
+ * provenance walk treat an output key id as forwarded, breaking the
117
+ * origination contract this design relies on).
118
+ * - each `branchKeyAttrs[b][k]` resolves in branch b.
119
+ * - per key position, affinity (physical storage class) agrees across all
120
+ * branches (the codebase has no distinct affinity field). Nullability may
121
+ * differ between branches; it gets OR'd in {@link getType}.
122
+ * - per key position, the declared collation agrees across all branches. The
123
+ * runtime key comparator derives solely from branch 0's key-column
124
+ * collations, so a disagreement would let branch 0 win silently and merge
125
+ * (or fail to merge) rows under the wrong collation. Guarding it here means
126
+ * both the recognition rule and manual construction are protected. An
127
+ * absent `collationName` normalizes to the binary collation.
128
+ */
129
+ private static validateZipByKey;
130
+ /**
131
+ * Resolve each branch's own `branchKeyAttrs[b]` list against that branch's
132
+ * attribute layout, yielding per-branch key/non-key column indices. Memoised;
133
+ * only valid for a `zipByKey` combinator.
134
+ */
135
+ private computeZipByKeyIndices;
136
+ /** Public accessor for the resolved zipByKey index mapping (used by the emitter). */
137
+ getZipByKeyIndices(): ZipByKeyIndices;
138
+ private buildAttributes;
139
+ /**
140
+ * Build the `zipByKey` output attribute layout: the K merged key attributes
141
+ * first (type/nullability/collation derived from branch 0's key column at
142
+ * position k, nullability OR'd across branches because a NULL-keyed row can
143
+ * surface — but **carrying the gather-minted `outputKeyAttrs[k]` id**, since
144
+ * the gather originates these merged columns), then each branch's non-key
145
+ * attributes in declared order, each forced nullable (NULL when the branch is
146
+ * absent for a key). Non-key attribute IDs are unique across branches and the
147
+ * minted key ids are disjoint from all of them, so there is no ID collision.
148
+ */
149
+ private buildZipByKeyAttributes;
150
+ getAttributes(): readonly Attribute[];
151
+ getType(): RelationType;
152
+ /**
153
+ * Build the `zipByKey` output relation type. Column layout mirrors
154
+ * {@link buildZipByKeyAttributes}: deduped key columns (nullability OR'd),
155
+ * then each branch's non-key columns forced nullable. The key columns
156
+ * `[0..K-1]` form the output's unique key — multiple NULL-keyed rows do not
157
+ * violate this (SQL UNIQUE permits multiple NULLs). `isSet` is false because
158
+ * NULL-keyed standalone rows can repeat.
159
+ */
160
+ private getZipByKeyType;
161
+ computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties>;
162
+ getChildren(): readonly PlanNode[];
163
+ getRelations(): readonly RelationalPlanNode[];
164
+ withChildren(newChildren: readonly PlanNode[]): PlanNode;
165
+ get estimatedRows(): number | undefined;
166
+ toString(): string;
167
+ getLogicalAttributes(): Record<string, unknown>;
168
+ }
169
+ //# sourceMappingURL=async-gather-node.d.ts.map