@quereus/quereus 4.3.2 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/src/core/database-external-changes.d.ts +2 -2
  2. package/dist/src/core/database-external-changes.d.ts.map +1 -1
  3. package/dist/src/core/database-external-changes.js +12 -9
  4. package/dist/src/core/database-external-changes.js.map +1 -1
  5. package/dist/src/core/database-materialized-views-apply.d.ts +156 -14
  6. package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -1
  7. package/dist/src/core/database-materialized-views-apply.js +370 -65
  8. package/dist/src/core/database-materialized-views-apply.js.map +1 -1
  9. package/dist/src/core/database-materialized-views-plan-builders.d.ts +65 -1
  10. package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
  11. package/dist/src/core/database-materialized-views-plan-builders.js +347 -8
  12. package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
  13. package/dist/src/core/database-materialized-views-plans.d.ts +254 -30
  14. package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
  15. package/dist/src/core/database-materialized-views.d.ts +96 -40
  16. package/dist/src/core/database-materialized-views.d.ts.map +1 -1
  17. package/dist/src/core/database-materialized-views.js +172 -116
  18. package/dist/src/core/database-materialized-views.js.map +1 -1
  19. package/dist/src/core/database.d.ts.map +1 -1
  20. package/dist/src/core/database.js +20 -17
  21. package/dist/src/core/database.js.map +1 -1
  22. package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
  23. package/dist/src/func/builtins/aggregate.js +127 -21
  24. package/dist/src/func/builtins/aggregate.js.map +1 -1
  25. package/dist/src/func/registration.d.ts +6 -1
  26. package/dist/src/func/registration.d.ts.map +1 -1
  27. package/dist/src/func/registration.js +16 -0
  28. package/dist/src/func/registration.js.map +1 -1
  29. package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
  30. package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
  31. package/dist/src/planner/analysis/equi-correlation.js +62 -0
  32. package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
  33. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
  34. package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
  35. package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
  36. package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
  37. package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
  38. package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
  39. package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
  40. package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
  41. package/dist/src/planner/building/select.d.ts.map +1 -1
  42. package/dist/src/planner/building/select.js +15 -1
  43. package/dist/src/planner/building/select.js.map +1 -1
  44. package/dist/src/planner/building/with.d.ts.map +1 -1
  45. package/dist/src/planner/building/with.js +5 -8
  46. package/dist/src/planner/building/with.js.map +1 -1
  47. package/dist/src/planner/cache/materialization-advisory.d.ts +33 -0
  48. package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
  49. package/dist/src/planner/cache/materialization-advisory.js +164 -28
  50. package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
  51. package/dist/src/planner/cache/reference-graph.d.ts +0 -4
  52. package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
  53. package/dist/src/planner/cache/reference-graph.js +5 -13
  54. package/dist/src/planner/cache/reference-graph.js.map +1 -1
  55. package/dist/src/planner/cost/index.d.ts +28 -7
  56. package/dist/src/planner/cost/index.d.ts.map +1 -1
  57. package/dist/src/planner/cost/index.js +26 -0
  58. package/dist/src/planner/cost/index.js.map +1 -1
  59. package/dist/src/planner/nodes/cache-node.d.ts +18 -2
  60. package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
  61. package/dist/src/planner/nodes/cache-node.js +42 -3
  62. package/dist/src/planner/nodes/cache-node.js.map +1 -1
  63. package/dist/src/planner/nodes/cte-node.d.ts +15 -1
  64. package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
  65. package/dist/src/planner/nodes/cte-node.js +12 -2
  66. package/dist/src/planner/nodes/cte-node.js.map +1 -1
  67. package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
  68. package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
  69. package/dist/src/planner/nodes/recursive-cte-node.js +30 -3
  70. package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
  71. package/dist/src/planner/optimizer.d.ts.map +1 -1
  72. package/dist/src/planner/optimizer.js +129 -1
  73. package/dist/src/planner/optimizer.js.map +1 -1
  74. package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
  75. package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
  76. package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
  77. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
  78. package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
  79. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
  80. package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +1 -1
  81. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
  82. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +53 -54
  83. package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
  84. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
  85. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
  86. package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
  87. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
  88. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
  89. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
  90. package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
  91. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +29 -0
  92. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
  93. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
  94. package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
  95. package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
  96. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
  97. package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
  98. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
  99. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
  100. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
  101. package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
  102. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
  103. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
  104. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
  105. package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
  106. package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
  107. package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
  108. package/dist/src/runtime/cache/shared-cache.js +34 -1
  109. package/dist/src/runtime/cache/shared-cache.js.map +1 -1
  110. package/dist/src/runtime/emit/aggregate.d.ts +2 -3
  111. package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
  112. package/dist/src/runtime/emit/aggregate.js +6 -15
  113. package/dist/src/runtime/emit/aggregate.js.map +1 -1
  114. package/dist/src/runtime/emit/cache.d.ts +7 -3
  115. package/dist/src/runtime/emit/cache.d.ts.map +1 -1
  116. package/dist/src/runtime/emit/cache.js +23 -6
  117. package/dist/src/runtime/emit/cache.js.map +1 -1
  118. package/dist/src/runtime/emit/cte.d.ts.map +1 -1
  119. package/dist/src/runtime/emit/cte.js +43 -20
  120. package/dist/src/runtime/emit/cte.js.map +1 -1
  121. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  122. package/dist/src/runtime/emit/dml-executor.js +68 -43
  123. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  124. package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
  125. package/dist/src/runtime/emit/materialized-view-helpers.js +5 -4
  126. package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
  127. package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
  128. package/dist/src/runtime/emit/recursive-cte.js +59 -1
  129. package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
  130. package/dist/src/runtime/parallel-driver.d.ts +15 -1
  131. package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
  132. package/dist/src/runtime/parallel-driver.js +17 -1
  133. package/dist/src/runtime/parallel-driver.js.map +1 -1
  134. package/dist/src/runtime/types.d.ts +36 -0
  135. package/dist/src/runtime/types.d.ts.map +1 -1
  136. package/dist/src/runtime/types.js.map +1 -1
  137. package/dist/src/schema/function.d.ts +79 -0
  138. package/dist/src/schema/function.d.ts.map +1 -1
  139. package/dist/src/schema/function.js.map +1 -1
  140. package/dist/src/vtab/memory/layer/scan-layer.js +21 -2
  141. package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
  142. package/package.json +3 -3
@@ -16,8 +16,17 @@
16
16
  * - Correlation predicate is a simple equi-join condition (col = col across inner/outer)
17
17
  *
18
18
  * NOT IN is deferred due to NULL semantics complexity.
19
+ *
20
+ * A SECOND ANCHOR (`ruleExistsInSelectDecorrelation`, ProjectNode) handles the
21
+ * same subqueries appearing in a SELECT list, where a semi/anti join cannot be
22
+ * used (every outer row must survive, with the match reported as a column).
23
+ * Each recognized subquery becomes a LEFT join carrying an `exists right as`
24
+ * match flag (`ExistenceColumnSpec`), and the subquery node in the projection
25
+ * is replaced by a reference to the flag column. See the section header further
26
+ * down for the fan-out and IN NULL-semantics gates.
19
27
  */
20
- import type { PlanNode } from '../../nodes/plan-node.js';
28
+ import { PlanNode } from '../../nodes/plan-node.js';
21
29
  import type { OptContext } from '../../framework/context.js';
22
30
  export declare function ruleSubqueryDecorrelation(node: PlanNode, _context: OptContext): PlanNode | null;
31
+ export declare function ruleExistsInSelectDecorrelation(node: PlanNode, _context: OptContext): PlanNode | null;
23
32
  //# sourceMappingURL=rule-subquery-decorrelation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-subquery-decorrelation.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-subquery-decorrelation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAsC,MAAM,0BAA0B,CAAC;AAE7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAkS7D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkF/F"}
1
+ {"version":3,"file":"rule-subquery-decorrelation.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-subquery-decorrelation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,OAAO,EAAoB,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAgP7D,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkF/F;AAmCD,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAkCrG"}
@@ -16,18 +16,30 @@
16
16
  * - Correlation predicate is a simple equi-join condition (col = col across inner/outer)
17
17
  *
18
18
  * NOT IN is deferred due to NULL semantics complexity.
19
+ *
20
+ * A SECOND ANCHOR (`ruleExistsInSelectDecorrelation`, ProjectNode) handles the
21
+ * same subqueries appearing in a SELECT list, where a semi/anti join cannot be
22
+ * used (every outer row must survive, with the match reported as a column).
23
+ * Each recognized subquery becomes a LEFT join carrying an `exists right as`
24
+ * match flag (`ExistenceColumnSpec`), and the subquery node in the projection
25
+ * is replaced by a reference to the flag column. See the section header further
26
+ * down for the fan-out and IN NULL-semantics gates.
19
27
  */
20
28
  import { createLogger } from '../../../common/logger.js';
21
- import { isRelationalNode } from '../../nodes/plan-node.js';
29
+ import { isRelationalNode, PlanNode } from '../../nodes/plan-node.js';
22
30
  import { FilterNode } from '../../nodes/filter.js';
23
31
  import { JoinNode } from '../../nodes/join-node.js';
32
+ import { EXISTENCE_FLAG_TYPE } from '../../nodes/join-utils.js';
33
+ import { ProjectNode } from '../../nodes/project-node.js';
34
+ import { DistinctNode } from '../../nodes/distinct-node.js';
24
35
  import { ExistsNode, InNode } from '../../nodes/subquery.js';
25
36
  import { UnaryOpNode } from '../../nodes/scalar.js';
26
37
  import { BinaryOpNode } from '../../nodes/scalar.js';
27
38
  import { ColumnReferenceNode } from '../../nodes/reference.js';
28
- import { isCorrelatedSubquery } from '../../cache/correlation-detector.js';
39
+ import { isCorrelatedSubquery, collectExternalReferences } from '../../cache/correlation-detector.js';
29
40
  import { PlanNodeType } from '../../nodes/plan-node-type.js';
30
41
  import { splitConjuncts, combineConjuncts } from '../../analysis/predicate-conjuncts.js';
42
+ import { isEquiCorrelation, collectDefinedAttrIds, referencesAnyAttr } from '../../analysis/equi-correlation.js';
31
43
  import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
32
44
  const log = createLogger('optimizer:rule:subquery-decorrelation');
33
45
  /**
@@ -60,39 +72,6 @@ function identifyCandidate(node) {
60
72
  }
61
73
  return null;
62
74
  }
63
- /**
64
- * Collect attribute IDs defined by a relational subtree.
65
- */
66
- function collectDefinedAttrIds(node) {
67
- const ids = new Set();
68
- function walk(n) {
69
- if (isRelationalNode(n)) {
70
- for (const attr of n.getAttributes()) {
71
- ids.add(attr.id);
72
- }
73
- }
74
- for (const child of n.getChildren()) {
75
- walk(child);
76
- }
77
- }
78
- walk(node);
79
- return ids;
80
- }
81
- /**
82
- * Returns true if the plan tree contains any column reference to an
83
- * attribute id in `attrIds`. Used to detect leftover correlation in
84
- * residual inner-only predicates (which may include nested subqueries).
85
- */
86
- function referencesAnyAttr(node, attrIds) {
87
- if (node instanceof ColumnReferenceNode && attrIds.has(node.attributeId)) {
88
- return true;
89
- }
90
- for (const child of node.getChildren()) {
91
- if (referencesAnyAttr(child, attrIds))
92
- return true;
93
- }
94
- return false;
95
- }
96
75
  /**
97
76
  * For an EXISTS subquery, extract the inner relational source and separate
98
77
  * the correlation predicate from inner-only predicates.
@@ -154,22 +133,6 @@ function extractExistsCorrelation(subqueryRoot, outerAttrIds) {
154
133
  const residualInnerFilter = combineConjuncts(innerOnlyConjuncts);
155
134
  return { innerSource, correlationCondition, residualInnerFilter };
156
135
  }
157
- /**
158
- * Check if a scalar node is a simple equi-join between outer and inner attributes.
159
- * Matches: outer.col = inner.col (or inner.col = outer.col)
160
- */
161
- function isEquiCorrelation(node, outerAttrIds, innerAttrIds) {
162
- if (!(node instanceof BinaryOpNode))
163
- return false;
164
- if (node.expression.operator !== '=')
165
- return false;
166
- if (!(node.left instanceof ColumnReferenceNode) || !(node.right instanceof ColumnReferenceNode))
167
- return false;
168
- const leftId = node.left.attributeId;
169
- const rightId = node.right.attributeId;
170
- return (outerAttrIds.has(leftId) && innerAttrIds.has(rightId)) ||
171
- (outerAttrIds.has(rightId) && innerAttrIds.has(leftId));
172
- }
173
136
  /**
174
137
  * For an IN subquery, extract the inner relational source and build the
175
138
  * equi-join condition (outer.col = inner.firstCol) plus any existing
@@ -308,4 +271,232 @@ export function ruleSubqueryDecorrelation(node, _context) {
308
271
  }
309
272
  return joinNode;
310
273
  }
274
+ /* ────────────────────────────────────────────────────────────────────────────
275
+ * SELECT-list EXISTS / IN decorrelation (existence-flag left join)
276
+ *
277
+ * `select o.id, exists(select 1 from c where c.fk = o.k) as f from o` cannot
278
+ * become a semi join (that would drop non-matching outer rows); instead each
279
+ * recognized correlated EXISTS / IN in a ProjectNode's expressions becomes a
280
+ * LEFT join carrying an `exists right as` match flag (`ExistenceColumnSpec`),
281
+ * and the subquery node is replaced by a reference to the flag column:
282
+ *
283
+ * Project[ o.id, <flag ref> AS f ]
284
+ * LeftJoin[ c.fk = o.k ] exists right as <flag>
285
+ * o
286
+ * Distinct(Project[key cols](Filter(residual, c)))
287
+ *
288
+ * Fan-out: `emitLoopJoin` drives the flag join as a plain left join, so K
289
+ * matching inner rows would duplicate the outer row K times. EXISTS only cares
290
+ * about presence, so the inner side is collapsed to at most one row per
291
+ * correlation key: an attribute-id-preserving projection onto the key columns
292
+ * under a DISTINCT. (`distinct-elimination` drops the DISTINCT again when the
293
+ * key is already unique, and `nested-loop-right-cache` materializes the — now
294
+ * uncorrelated — right side once.)
295
+ *
296
+ * NOT EXISTS / NOT IN need no special casing: the rewrite fires on the inner
297
+ * ExistsNode/InNode and the enclosing NOT survives over the two-valued flag.
298
+ *
299
+ * IN NULL semantics: a projected `x IN S` is three-valued — it yields NULL
300
+ * (not FALSE) when there is no match but x is NULL or S contains a NULL. The
301
+ * flag is a clean two-valued boolean, so the rewrite is exact only when both
302
+ * comparison sides are statically non-nullable; otherwise bail (the per-row
303
+ * path keeps the NULL/unknown result). This also makes an enclosing NOT — the
304
+ * NOT IN form — exact. EXISTS is two-valued and needs no such gate.
305
+ * ──────────────────────────────────────────────────────────────────────── */
306
+ export function ruleExistsInSelectDecorrelation(node, _context) {
307
+ if (!(node instanceof ProjectNode))
308
+ return null;
309
+ const candidates = collectProjectionCandidates(node.projections.map(p => p.node));
310
+ if (candidates.length === 0)
311
+ return null;
312
+ const outer = node.source;
313
+ const outerAttrIds = new Set(outer.getAttributes().map(a => a.id));
314
+ // One existence-flag LEFT join per recognized subquery, stacked left-deep in
315
+ // collection order (the outer's attributes stay visible through every join,
316
+ // so later candidates' correlations still resolve).
317
+ let currentSource = outer;
318
+ const replacements = new Map();
319
+ for (const cand of candidates) {
320
+ const rewrite = decorrelateExistsInProjection(cand, outerAttrIds, currentSource);
321
+ if (!rewrite)
322
+ continue;
323
+ currentSource = rewrite.join;
324
+ replacements.set(cand, rewrite.flagRef);
325
+ }
326
+ if (replacements.size === 0)
327
+ return null;
328
+ log('Decorrelated %d SELECT-list EXISTS/IN subquery(ies) into existence-flag left join(s)', replacements.size);
329
+ // Rebuild the projection over the join stack, preserving output attribute
330
+ // ids so consumers above resolve unchanged (mirrors the scalar-agg rule's
331
+ // rebuildProject). preserveInputColumns is threaded verbatim.
332
+ const attributes = node.getAttributes();
333
+ const newProjections = node.projections.map((p, i) => ({
334
+ node: substituteInScalar(p.node, replacements),
335
+ alias: p.alias,
336
+ attributeId: attributes[i].id,
337
+ }));
338
+ return new ProjectNode(node.scope, currentSource, newProjections, undefined, attributes, node.preserveInputColumns);
339
+ }
340
+ /**
341
+ * Collect correlated-decorrelation candidates (ExistsNode, or subquery-variant
342
+ * InNode) across the projection expression trees, deduplicated by identity in
343
+ * deterministic pre-order. A recognized node is a leaf for this walk — its
344
+ * relational body is not descended (a nested subquery inside it stays part of
345
+ * its branch).
346
+ *
347
+ * NOTE: dedup is by node identity only. Two *distinct* nodes with identical SQL
348
+ * (`exists(...) as a, exists(...) as b` over the same body) each build their own
349
+ * flag join; if such repeated correlated subqueries in one projection ever show
350
+ * up as a cost, dedup by structural equality here to share a single join.
351
+ */
352
+ function collectProjectionCandidates(exprs) {
353
+ const out = [];
354
+ const seen = new Set();
355
+ const walk = (expr) => {
356
+ if (expr instanceof ExistsNode || (expr instanceof InNode && expr.source && !expr.values)) {
357
+ if (!seen.has(expr)) {
358
+ seen.add(expr);
359
+ out.push(expr);
360
+ }
361
+ return;
362
+ }
363
+ for (const child of expr.getChildren()) {
364
+ if (child.getType().typeClass === 'scalar') {
365
+ walk(child);
366
+ }
367
+ }
368
+ };
369
+ for (const expr of exprs)
370
+ walk(expr);
371
+ return out;
372
+ }
373
+ /**
374
+ * Rebuild a scalar expression with each mapped node replaced by its substitute,
375
+ * leaving wrappers (NOT, CASE, arithmetic) intact. Relational children (the
376
+ * subquery bodies themselves) are never descended.
377
+ */
378
+ function substituteInScalar(expr, replacements) {
379
+ const direct = replacements.get(expr);
380
+ if (direct)
381
+ return direct;
382
+ const children = expr.getChildren();
383
+ if (children.length === 0)
384
+ return expr;
385
+ const newChildren = [];
386
+ let changed = false;
387
+ for (const child of children) {
388
+ if (child.getType().typeClass === 'scalar') {
389
+ const replaced = substituteInScalar(child, replacements);
390
+ newChildren.push(replaced);
391
+ if (replaced !== child)
392
+ changed = true;
393
+ }
394
+ else {
395
+ newChildren.push(child);
396
+ }
397
+ }
398
+ if (!changed)
399
+ return expr;
400
+ return expr.withChildren(newChildren);
401
+ }
402
+ /** Visit every ColumnReferenceNode in a scalar expression tree (scalar children only). */
403
+ function visitColumnRefs(node, visit) {
404
+ if (node instanceof ColumnReferenceNode) {
405
+ visit(node);
406
+ return;
407
+ }
408
+ for (const child of node.getChildren()) {
409
+ if (child.getType().typeClass === 'scalar') {
410
+ visitColumnRefs(child, visit);
411
+ }
412
+ }
413
+ }
414
+ /**
415
+ * Attempt to decorrelate one SELECT-list EXISTS/IN subquery into an
416
+ * existence-flag LEFT join over `leftSource`. Returns null (leaving the
417
+ * subquery on the per-row path) when any recognition or safety gate fails.
418
+ * Never mutates the original tree.
419
+ */
420
+ function decorrelateExistsInProjection(cand, outerAttrIds, leftSource) {
421
+ const subqueryRoot = cand instanceof ExistsNode ? cand.subquery : cand.source;
422
+ if (!subqueryRoot)
423
+ return null;
424
+ // Correlated, and every external reference resolves to the immediate outer —
425
+ // deeper correlation cannot be captured by a join against `leftSource`.
426
+ const external = collectExternalReferences(subqueryRoot);
427
+ if (external.size === 0)
428
+ return null;
429
+ for (const id of external) {
430
+ if (!outerAttrIds.has(id))
431
+ return null;
432
+ }
433
+ // Per-row firing of a side-effecting inner is contractually observable.
434
+ if (PlanNodeCharacteristics.subtreeHasSideEffects(subqueryRoot))
435
+ return null;
436
+ // IN three-valued-logic gate: both comparison sides must be non-nullable for
437
+ // the two-valued flag to be exact (see the section header).
438
+ if (cand instanceof InNode) {
439
+ if (!(cand.condition instanceof ColumnReferenceNode))
440
+ return null;
441
+ if (cand.condition.getType().nullable)
442
+ return null;
443
+ const innerAttrs = subqueryRoot.getAttributes();
444
+ if (innerAttrs.length === 0 || innerAttrs[0].type.nullable)
445
+ return null;
446
+ }
447
+ const extraction = cand instanceof ExistsNode
448
+ ? extractExistsCorrelation(cand.subquery, outerAttrIds)
449
+ : extractInCorrelation(cand, outerAttrIds);
450
+ if (!extraction)
451
+ return null;
452
+ const { innerSource, correlationCondition, residualInnerFilter } = extraction;
453
+ const filteredInner = residualInnerFilter
454
+ ? new FilterNode(innerSource.scope, innerSource, residualInnerFilter)
455
+ : innerSource;
456
+ // Inner-side correlation key columns: every non-outer column the join
457
+ // condition references. Each must be a top-level column of the inner source;
458
+ // an id the source does not expose (a deep-projected column, or an IN whose
459
+ // first column is computed and so carries a fresh attribute id) cannot be
460
+ // re-exposed by the key projection — bail.
461
+ const innerAttrByIdx = new Map(filteredInner.getAttributes().map((a, i) => [a.id, { attr: a, index: i }]));
462
+ const keyIds = [];
463
+ const seenKeys = new Set();
464
+ visitColumnRefs(correlationCondition, ref => {
465
+ if (!outerAttrIds.has(ref.attributeId) && !seenKeys.has(ref.attributeId)) {
466
+ seenKeys.add(ref.attributeId);
467
+ keyIds.push(ref.attributeId);
468
+ }
469
+ });
470
+ if (keyIds.length === 0)
471
+ return null;
472
+ const keyAttrs = [];
473
+ const keyProjections = [];
474
+ for (const id of keyIds) {
475
+ const found = innerAttrByIdx.get(id);
476
+ if (!found)
477
+ return null;
478
+ keyAttrs.push(found.attr);
479
+ keyProjections.push({
480
+ node: new ColumnReferenceNode(innerSource.scope, { type: 'column', name: found.attr.name }, found.attr.type, found.attr.id, found.index),
481
+ attributeId: found.attr.id,
482
+ });
483
+ }
484
+ // Collapse the inner side to at most one row per correlation key (the
485
+ // fan-out guard — see the section header). The key projection preserves the
486
+ // correlation attribute ids, so the extracted condition serves verbatim as
487
+ // the join condition.
488
+ const keyProject = new ProjectNode(innerSource.scope, filteredInner, keyProjections, undefined, keyAttrs, false);
489
+ const distinctRight = new DistinctNode(innerSource.scope, keyProject);
490
+ // Correctness backstop: the built right side must be fully decorrelated (an
491
+ // outer reference outside the extracted conjuncts would re-correlate it).
492
+ if (collectExternalReferences(distinctRight).size !== 0)
493
+ return null;
494
+ const flagAttrId = PlanNode.nextAttrId();
495
+ const flagName = `__exists_${flagAttrId}`;
496
+ const join = new JoinNode(cand.scope, leftSource, distinctRight, 'left', correlationCondition, undefined, [{ attrId: flagAttrId, name: flagName, side: 'right' }]);
497
+ // The flag column sits after both sides in the join's output.
498
+ const flagRef = new ColumnReferenceNode(cand.scope, { type: 'column', name: flagName }, EXISTENCE_FLAG_TYPE, flagAttrId, leftSource.getAttributes().length + keyAttrs.length);
499
+ log('Decorrelated SELECT-list %s subquery into existence-flag LEFT JOIN on %d key(s)', cand instanceof ExistsNode ? 'EXISTS' : 'IN', keyAttrs.length);
500
+ return { join, flagRef };
501
+ }
311
502
  //# sourceMappingURL=rule-subquery-decorrelation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rule-subquery-decorrelation.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-subquery-decorrelation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-subquery-decorrelation.js","sourceRoot":"","sources":["../../../../../src/planner/rules/subquery/rule-subquery-decorrelation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AACtG,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACjH,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,GAAG,GAAG,YAAY,CAAC,uCAAuC,CAAC,CAAC;AAWlE;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAoB;IAC9C,mBAAmB;IACnB,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAChC,IAAI,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,uBAAuB;IACvB,IAAI,IAAI,YAAY,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvE,IAAI,IAAI,CAAC,OAAO,YAAY,UAAU,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,oBAAoB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACxE,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3D,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,wBAAwB,CAChC,YAAgC,EAChC,YAAyB;IAMzB,uDAAuD;IACvD,IAAI,OAAO,GAAuB,YAAY,CAAC;IAE/C,kFAAkF;IAClF,OAAO,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAAE,MAAM;QACrC,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,CAAC,OAAO,YAAY,UAAU,CAAC,EAAE,CAAC;QACtC,8EAA8E;QAC9E,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC;IACvB,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,MAAM,YAAY,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAExD,mDAAmD;IACnD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,oBAAoB,GAAqB,EAAE,CAAC;IAClD,MAAM,kBAAkB,GAAqB,EAAE,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;YACzD,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACF,CAAC;IAED,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,uEAAuE;IACvE,wCAAwC;IACxC,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACvC,IAAI,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;IACxD,CAAC;IAED,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,oBAAoB,CAAE,CAAC;IACrE,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAEjE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;AACnE,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAC5B,MAAc,EACd,YAAyB;IAMzB,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEhC,4DAA4D;IAC5D,4DAA4D;IAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IAEnC,gEAAgE;IAChE,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,YAAY,mBAAmB,CAAC,EAAE,CAAC;QACxD,0DAA0D;QAC1D,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;IACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;QAChD,kEAAkE;QAClE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,6DAA6D;IAC7D,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;IAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,4DAA4D;IAC5D,qFAAqF;IACrF,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAC1C,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,UAAU,EAAG,kCAAkC;IAC3D,cAAc,CAAC,IAAI,EACnB,cAAc,CAAC,EAAE,EACjB,CAAC,CAAC,qCAAqC;KACvC,CAAC;IAEF,MAAM,aAAa,GAAG,IAAI,YAAY,CACrC,WAAW,CAAC,KAAK,EACjB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE,EAC9F,WAAW,EACX,WAAW,CACX,CAAC;IAEF,uEAAuE;IACvE,IAAI,OAAO,GAAuB,YAAY,CAAC;IAE/C,+BAA+B;IAC/B,OAAO,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;QAC7F,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAAE,MAAM;QACrC,OAAO,GAAG,MAAM,CAAC;IAClB,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO,YAAY,UAAU,EAAE,CAAC;QACnC,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,qBAAqB,GAAqB,EAAE,CAAC;QACnD,MAAM,SAAS,GAAqB,EAAE,CAAC;QAEvC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,CAAC;gBACzD,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;QAED,uEAAuE;QACvE,oDAAoD;QACpD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC;gBAAE,OAAO,IAAI,CAAC;QACxD,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,GAAG,qBAAqB,CAAC,CAAC;QACjE,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,cAAc,CAAE,CAAC;QAC/D,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAExD,OAAO;YACN,WAAW,EAAE,OAAO,CAAC,MAAM;YAC3B,oBAAoB;YACpB,mBAAmB;SACnB,CAAC;IACH,CAAC;IAED,oEAAoE;IACpE,OAAO;QACN,WAAW,EAAE,OAAO;QACpB,oBAAoB,EAAE,aAAa;QACnC,mBAAmB,EAAE,IAAI;KACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAc,EAAE,QAAoB;IAC7E,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzE,4CAA4C;IAC5C,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEjD,yCAAyC;IACzC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC;IACxB,IAAI,SAAS,GAAkC,IAAI,CAAC;IAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,SAAS,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,SAAS,EAAE,CAAC;YACf,cAAc,GAAG,CAAC,CAAC;YACnB,MAAM;QACP,CAAC;IACF,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,cAAc,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAErD,2EAA2E;IAC3E,6EAA6E;IAC7E,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,YAAY,UAAU;QAC7D,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ;QACjC,CAAC,CAAE,SAAS,CAAC,YAAuB,CAAC,MAAM,CAAC;IAC7C,IAAI,SAAS,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;IAED,GAAG,CAAC,sDAAsD,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAEhF,kDAAkD;IAClD,IAAI,UAAU,GAIH,IAAI,CAAC;IAEhB,IAAI,SAAS,CAAC,YAAY,YAAY,UAAU,EAAE,CAAC;QAClD,UAAU,GAAG,wBAAwB,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtF,CAAC;SAAM,IAAI,SAAS,CAAC,YAAY,YAAY,MAAM,EAAE,CAAC;QACrD,UAAU,GAAG,oBAAoB,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC;IAE9E,wFAAwF;IACxF,IAAI,SAAS,GAAuB,WAAW,CAAC;IAChD,IAAI,mBAAmB,EAAE,CAAC;QACzB,SAAS,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,mBAAmB,CAAC,CAAC;IACjF,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAC5B,WAAW,CAAC,KAAK,EACjB,WAAW,EACX,SAAS,EACT,SAAS,CAAC,QAAQ,EAClB,oBAAoB,CACpB,CAAC;IAEF,GAAG,CAAC,uCAAuC,EAAE,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAEhH,oFAAoF;IACpF,MAAM,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;IAC5E,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,kBAAkB,CAAE,CAAC;QAChE,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8EA+B8E;AAE9E,MAAM,UAAU,+BAA+B,CAAC,IAAc,EAAE,QAAoB;IACnF,IAAI,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAClF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;IAC1B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnE,6EAA6E;IAC7E,4EAA4E;IAC5E,oDAAoD;IACpD,IAAI,aAAa,GAAuB,KAAK,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC/D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;QAC7B,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzC,GAAG,CAAC,sFAAsF,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/G,0EAA0E;IAC1E,0EAA0E;IAC1E,8DAA8D;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACxC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;KAC7B,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACrH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,2BAA2B,CAAC,KAAgC;IACpE,MAAM,GAAG,GAA+B,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,IAAoB,EAAQ,EAAE;QAC3C,IAAI,IAAI,YAAY,UAAU,IAAI,CAAC,IAAI,YAAY,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACf,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,OAAO;QACR,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAuB,CAAC,CAAC;YAC/B,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAC1B,IAAoB,EACpB,YAAyD;IAEzD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,WAAW,GAAe,EAAE,CAAC;IACnC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAuB,EAAE,YAAY,CAAC,CAAC;YAC3E,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,IAAI,QAAQ,KAAK,KAAK;gBAAE,OAAO,GAAG,IAAI,CAAC;QACxC,CAAC;aAAM,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAmB,CAAC;AACzD,CAAC;AAED,0FAA0F;AAC1F,SAAS,eAAe,CAAC,IAAoB,EAAE,KAAyC;IACvF,IAAI,IAAI,YAAY,mBAAmB,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,OAAO;IACR,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC5C,eAAe,CAAC,KAAuB,EAAE,KAAK,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,6BAA6B,CACrC,IAAyB,EACzB,YAAyB,EACzB,UAA8B;IAE9B,MAAM,YAAY,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9E,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,QAAQ,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACxC,CAAC;IAED,wEAAwE;IACxE,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7E,6EAA6E;IAC7E,4DAA4D;IAC5D,IAAI,IAAI,YAAY,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,mBAAmB,CAAC;YAAE,OAAO,IAAI,CAAC;QAClE,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,EAAE,CAAC;QAChD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;IACzE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,YAAY,UAAU;QAC5C,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC;QACvD,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,UAAU,CAAC;IAE9E,MAAM,aAAa,GAAuB,mBAAmB;QAC5D,CAAC,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,mBAAmB,CAAC;QACrE,CAAC,CAAC,WAAW,CAAC;IAEf,sEAAsE;IACtE,6EAA6E;IAC7E,4EAA4E;IAC5E,0EAA0E;IAC1E,2CAA2C;IAC3C,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3G,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,eAAe,CAAC,oBAAoB,EAAE,GAAG,CAAC,EAAE;QAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1E,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAgB,EAAE,CAAC;IACjC,MAAM,cAAc,GAAyD,EAAE,CAAC;IAChF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,cAAc,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,IAAI,mBAAmB,CAC5B,WAAW,CAAC,KAAK,EACjB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EACzC,KAAK,CAAC,IAAI,CAAC,IAAI,EACf,KAAK,CAAC,IAAI,CAAC,EAAE,EACb,KAAK,CAAC,KAAK,CACX;YACD,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;SAC1B,CAAC,CAAC;IACJ,CAAC;IAED,sEAAsE;IACtE,4EAA4E;IAC5E,2EAA2E;IAC3E,sBAAsB;IACtB,MAAM,UAAU,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjH,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEtE,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,yBAAyB,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErE,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,YAAY,UAAU,EAAE,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,QAAQ,CACxB,IAAI,CAAC,KAAK,EACV,UAAU,EACV,aAAa,EACb,MAAM,EACN,oBAAoB,EACpB,SAAS,EACT,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CACvD,CAAC;IACF,8DAA8D;IAC9D,MAAM,OAAO,GAAG,IAAI,mBAAmB,CACtC,IAAI,CAAC,KAAK,EACV,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClC,mBAAmB,EACnB,UAAU,EACV,UAAU,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CACnD,CAAC;IAEF,GAAG,CAAC,iFAAiF,EACpF,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1B,CAAC"}
@@ -17,6 +17,13 @@ export interface SharedCacheConfig {
17
17
  strategy: CacheStrategy;
18
18
  /** Optional identifier for logging */
19
19
  name?: string;
20
+ /**
21
+ * When true, fully drain + commit the buffer before yielding any row, so a
22
+ * short-circuiting consumer (e.g. IN early-exit) cannot abort the build.
23
+ * Defaults to the streaming-first behaviour (yield each row as it arrives,
24
+ * commit only after the source drains to completion).
25
+ */
26
+ eager?: boolean;
20
27
  }
21
28
  /**
22
29
  * Cache state for a shared cache instance
@@ -1 +1 @@
1
- {"version":3,"file":"shared-cache.d.ts","sourceRoot":"","sources":["../../../../src/runtime/cache/shared-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAKjD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,aAAa,CAAC;IACxB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,gEAAgE;IAChE,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAM7C;AAED;;;GAGG;AACH,wBAAuB,eAAe,CACrC,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,EAClC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,UAAU,GACf,aAAa,CAAC,GAAG,CAAC,CAmDpB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,IAGtB,QAAQ,aAAa,CAAC,GAAG,CAAC,KAAG,aAAa,CAAC,GAAG,CAAC,CAGrF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAC1B,MAAM,EAAE,iBAAiB,GACvB;IACF,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;CAClB,CAUA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAOA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAIlD"}
1
+ {"version":3,"file":"shared-cache.d.ts","sourceRoot":"","sources":["../../../../src/runtime/cache/shared-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAKjD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,QAAQ,EAAE,aAAa,CAAC;IACxB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IAC1B,gEAAgE;IAChE,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IACrB,qDAAqD;IACrD,cAAc,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAM7C;AAED;;;GAGG;AACH,wBAAuB,eAAe,CACrC,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,EAClC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,UAAU,GACf,aAAa,CAAC,GAAG,CAAC,CAmFpB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,IAGtB,QAAQ,aAAa,CAAC,GAAG,CAAC,KAAG,aAAa,CAAC,GAAG,CAAC,CAGrF;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,EAC1B,MAAM,EAAE,iBAAiB,GACvB;IACF,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;CAClB,CAUA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG;IACnD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAOA;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAIlD"}
@@ -35,7 +35,40 @@ export async function* streamWithCache(sourceIterable, config, state) {
35
35
  yield* sourceIterable;
36
36
  return;
37
37
  }
38
- // First time - pipeline results while building cache
38
+ // First time, eager mode - drain the source fully, commit, THEN yield.
39
+ // A consumer that breaks on the first row (e.g. IN early-exit) still causes
40
+ // the whole drain + commit here, so every later evaluation replays from cache
41
+ // instead of re-opening the source. The build cannot be short-circuited.
42
+ if (config.eager) {
43
+ log('Building %s cache eagerly (full drain before yield) with threshold %d', name, threshold);
44
+ const buffer = [];
45
+ for await (const row of sourceIterable) {
46
+ if (buffer.length < threshold) {
47
+ // Deep copy to avoid reference issues (same as streaming path)
48
+ buffer.push([...row]);
49
+ }
50
+ else {
51
+ // Over threshold - abandon caching and stream the remainder straight
52
+ // through. The memory bound wins; later evals stream fresh.
53
+ log('%s eager cache threshold %d exceeded, abandoning cache and streaming through', name, threshold);
54
+ state.cacheAbandoned = true;
55
+ for (const buffered of buffer)
56
+ yield buffered;
57
+ yield row;
58
+ yield* sourceIterable;
59
+ return;
60
+ }
61
+ }
62
+ // Drained fully within threshold - commit before yielding any row.
63
+ // (If the source threw mid-drain we never reach here: nothing is committed
64
+ // and cacheAbandoned stays false, so the next eval retries fresh.)
65
+ log('%s eager cache built successfully with %d rows', name, buffer.length);
66
+ state.cachedResult = buffer;
67
+ for (const row of buffer)
68
+ yield [...row];
69
+ return;
70
+ }
71
+ // First time (streaming-first) - pipeline results while building cache
39
72
  log('Building %s cache with threshold %d while pipelining', name, threshold);
40
73
  let cache = [];
41
74
  // Pipeline while caching (proven pattern from existing emitter)
@@ -1 +1 @@
1
- {"version":3,"file":"shared-cache.js","sourceRoot":"","sources":["../../../../src/runtime/cache/shared-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AAgCjD;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO;QACN,YAAY,EAAE,SAAS;QACvB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,CAAC;KACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CACrC,cAAkC,EAClC,MAAyB,EACzB,KAAiB;IAEjB,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;IAE7C,+EAA+E;IAC/E,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,GAAG,CAAC,6CAA6C,EAChD,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,GAAG,CAAQ,CAAC;QACvB,CAAC;QACD,OAAO;IACR,CAAC;IAED,0DAA0D;IAC1D,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC1B,GAAG,CAAC,yEAAyE,EAAE,IAAI,CAAC,CAAC;QACrF,KAAK,CAAC,CAAC,cAAc,CAAC;QACtB,OAAO;IACR,CAAC;IAED,qDAAqD;IACrD,GAAG,CAAC,sDAAsD,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7E,IAAI,KAAK,GAAsB,EAAE,CAAC;IAElC,gEAAgE;IAChE,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACxC,6CAA6C;QAC7C,MAAM,GAAG,CAAC;QAEV,gDAAgD;QAChD,IAAI,KAAK,EAAE,CAAC;YACX,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC9B,sDAAsD;gBACtD,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAQ,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACP,iDAAiD;gBACjD,GAAG,CAAC,oFAAoF,EACvF,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAChC,KAAK,GAAG,SAAS,CAAC;YACnB,CAAC;QACF,CAAC;IACF,CAAC;IAED,6DAA6D;IAC7D,IAAI,KAAK,EAAE,CAAC;QACX,GAAG,CAAC,0CAA0C,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACpE,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;SAAM,CAAC;QACP,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;AACF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAyB;IAC5D,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAEjC,OAAO,KAAK,SAAS,CAAC,CAAC,cAAc,CAAC,MAA0B;QAC/D,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC9B,MAA0B,EAC1B,MAAyB;IAKzB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IAEjC,MAAM,QAAQ,GAAG;QAChB,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;YAC5B,KAAK,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;KACD,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB;IAMhD,OAAO;QACN,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY;QAC9B,WAAW,EAAE,KAAK,CAAC,cAAc;QACjC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,MAAM;KACtC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC3C,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,cAAc,GAAG,KAAK,CAAC;IAC7B,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"shared-cache.js","sourceRoot":"","sources":["../../../../src/runtime/cache/shared-cache.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,9 @@ import type { StreamAggregateNode } from '../../planner/nodes/stream-aggregate.j
2
2
  import type { Instruction } from '../types.js';
3
3
  import type { EmissionContext } from '../emission-context.js';
4
4
  import type { PlanNode } from '../../planner/nodes/plan-node.js';
5
- import { AggValue } from '../../func/registration.js';
5
+ import { cloneInitialValue } from '../../func/registration.js';
6
6
  export declare const ctxLog: import("debug").Debugger;
7
- /** Clone an aggregate initial value so each group gets an independent accumulator. */
8
- export declare function cloneInitialValue(initialValue: unknown): AggValue;
7
+ export { cloneInitialValue };
9
8
  /**
10
9
  * Find the source relation node that column references should use as their context key.
11
10
  * This traverses up the tree to find the original table scan or similar node.
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,kCAAkC,CAAC;AAWhF,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAGtD,eAAO,MAAM,MAAM,0BAAkC,CAAC;AAEtD,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,CAUjE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAgB3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAwhBhG"}
1
+ {"version":3,"file":"aggregate.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACnF,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,kCAAkC,CAAC;AAWhF,OAAO,EAAY,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGzE,eAAO,MAAM,MAAM,0BAAkC,CAAC;AAMtD,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAgB3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAwhBhG"}
@@ -11,22 +11,13 @@ import { coerceForAggregate } from '../../util/coercion.js';
11
11
  import { quereusError } from '../../common/errors.js';
12
12
  import { StatusCode } from '../../common/types.js';
13
13
  import { buildRowDescriptor } from '../../util/row-descriptor.js';
14
+ import { cloneInitialValue } from '../../func/registration.js';
14
15
  export const ctxLog = createLogger('runtime:context');
15
- /** Clone an aggregate initial value so each group gets an independent accumulator. */
16
- export function cloneInitialValue(initialValue) {
17
- if (typeof initialValue === 'function') {
18
- return initialValue();
19
- }
20
- else if (Array.isArray(initialValue)) {
21
- return [...initialValue];
22
- }
23
- else if (initialValue && typeof initialValue === 'object') {
24
- return { ...initialValue };
25
- }
26
- else {
27
- return initialValue;
28
- }
29
- }
16
+ // Re-exported for the emitters that import it from here (hash-aggregate);
17
+ // the implementation lives with `AggValue` in func/registration.ts so the
18
+ // planner (scalar-agg decorrelation's plan-time empty-value computation) can
19
+ // share the exact runtime cloning path without a planner→runtime import.
20
+ export { cloneInitialValue };
30
21
  /**
31
22
  * Find the source relation node that column references should use as their context key.
32
23
  * This traverses up the tree to find the original table scan or similar node.