@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.
- package/dist/src/core/database-external-changes.d.ts +2 -2
- package/dist/src/core/database-external-changes.d.ts.map +1 -1
- package/dist/src/core/database-external-changes.js +12 -9
- package/dist/src/core/database-external-changes.js.map +1 -1
- package/dist/src/core/database-materialized-views-apply.d.ts +156 -14
- package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-apply.js +370 -65
- package/dist/src/core/database-materialized-views-apply.js.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.d.ts +65 -1
- package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.js +347 -8
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database-materialized-views-plans.d.ts +254 -30
- package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +96 -40
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +172 -116
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +20 -17
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +127 -21
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/registration.d.ts +6 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +16 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts +26 -0
- package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
- package/dist/src/planner/analysis/equi-correlation.js +62 -0
- package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/analysis/scalar-subqueries.d.ts +28 -0
- package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
- package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +15 -1
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +5 -8
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +33 -0
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +164 -28
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/cache/reference-graph.d.ts +0 -4
- package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
- package/dist/src/planner/cache/reference-graph.js +5 -13
- package/dist/src/planner/cache/reference-graph.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +28 -7
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +26 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts +18 -2
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +42 -3
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +15 -1
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +12 -2
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts +30 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +30 -3
- package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +129 -1
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +53 -54
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts +29 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/runtime/cache/shared-cache.d.ts +7 -0
- package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
- package/dist/src/runtime/cache/shared-cache.js +34 -1
- package/dist/src/runtime/cache/shared-cache.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts +2 -3
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +6 -15
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/cache.d.ts +7 -3
- package/dist/src/runtime/emit/cache.d.ts.map +1 -1
- package/dist/src/runtime/emit/cache.js +23 -6
- package/dist/src/runtime/emit/cache.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js +43 -20
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +68 -43
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +5 -4
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +59 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +15 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +17 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/types.d.ts +36 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/function.d.ts +79 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +21 -2
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- 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
|
|
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
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAiB,MAAM,0BAA0B,CAAC;AACnE,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,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzF,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;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAc;IAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,SAAS,IAAI,CAAC,CAAW;QACxB,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;gBACtC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,CAAC;QACb,CAAC;IACF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAc,EAAE,OAAoB;IAC9D,IAAI,IAAI,YAAY,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAC;IACb,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxC,IAAI,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACd,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;;;GAGG;AACH,SAAS,iBAAiB,CACzB,IAAoB,EACpB,YAAyB,EACzB,YAAyB;IAEzB,IAAI,CAAC,CAAC,IAAI,YAAY,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,YAAY,mBAAmB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,YAAY,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9G,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;IACrC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;IAEvC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,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"}
|
|
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;
|
|
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 -
|
|
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;
|
|
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 {
|
|
5
|
+
import { cloneInitialValue } from '../../func/registration.js';
|
|
6
6
|
export declare const ctxLog: import("debug").Debugger;
|
|
7
|
-
|
|
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,
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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.
|