@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with.js","sourceRoot":"","sources":["../../../../src/planner/building/with.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"with.js","sourceRoot":"","sources":["../../../../src/planner/building/with.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,39 @@ export declare class MaterializationAdvisory {
|
|
|
30
30
|
* Returns the transformed tree or the original if no caching was added
|
|
31
31
|
*/
|
|
32
32
|
analyzeAndTransform(root: PlanNode): PlanNode;
|
|
33
|
+
/**
|
|
34
|
+
* Decide whether a non-recursive {@link CTENode} must be materialized once per
|
|
35
|
+
* statement execution. An explicit NOT MATERIALIZED hint is honored (the user
|
|
36
|
+
* opted into re-execution per reference); otherwise an explicit MATERIALIZED
|
|
37
|
+
* hint or two-plus references trips the mark.
|
|
38
|
+
*
|
|
39
|
+
* Recursive CTEs ({@link RecursiveCTENode}) do NOT flow through here — they run
|
|
40
|
+
* through the working-table machinery (emitRecursiveCTE), not emitCTE, and are
|
|
41
|
+
* marked by a dedicated branch in {@link markCTEMaterialization} that gates
|
|
42
|
+
* purely on reference count (the hint is deliberately ignored — see there).
|
|
43
|
+
*/
|
|
44
|
+
private shouldMaterializeCTE;
|
|
45
|
+
/**
|
|
46
|
+
* Top-down memoized rewrite that sets the `materialize` flag on CTE nodes:
|
|
47
|
+
* on a non-recursive {@link CTENode} where {@link shouldMaterializeCTE} says so,
|
|
48
|
+
* and on a {@link RecursiveCTENode} whose working-table descriptor is referenced
|
|
49
|
+
* two-plus times (`recursiveRefsByDescriptor`).
|
|
50
|
+
*
|
|
51
|
+
* The memo (keyed by node identity) keeps a shared CTENode shared: the plain
|
|
52
|
+
* {@link transformChildren} walk is NOT memoized, so routing this mark through it
|
|
53
|
+
* would rebuild the CTENode once per referencing parent — two distinct marked
|
|
54
|
+
* instances with different plan ids, and emitCTE's per-execution buffer key
|
|
55
|
+
* would never match across references. (Recursive CTEs are already duplicated
|
|
56
|
+
* per parent by earlier passes; emitRecursiveCTE keys its buffer on the shared
|
|
57
|
+
* `tableDescriptor` instead of the plan id, so the mark just needs to land on
|
|
58
|
+
* every copy — which the descriptor count guarantees.)
|
|
59
|
+
*/
|
|
60
|
+
private markCTEMaterialization;
|
|
61
|
+
/**
|
|
62
|
+
* Collect a node and every descendant (via `getChildren()`) into `out`.
|
|
63
|
+
* `out` doubles as the visited set, so a shared subtree is walked once.
|
|
64
|
+
*/
|
|
65
|
+
private collectSubtree;
|
|
33
66
|
/**
|
|
34
67
|
* Core advisory algorithm
|
|
35
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAoB,KAAK,QAAQ,
|
|
1
|
+
{"version":3,"file":"materialization-advisory.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAoB,KAAK,QAAQ,EAAiD,MAAM,uBAAuB,CAAC;AACvH,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,8CAA8C;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,iCAAiC;IACjC,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAGvB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,gBAAgB,CAAwB;gBAE5B,MAAM,EAAE,eAAe;IAI3C;;;OAGG;IACH,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ;IAuF7C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,sBAAsB;IAyD9B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiFrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAuCzB"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { createLogger } from '../../common/logger.js';
|
|
6
6
|
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
7
7
|
import { CacheNode } from '../nodes/cache-node.js';
|
|
8
|
+
import { CTENode } from '../nodes/cte-node.js';
|
|
9
|
+
import { RecursiveCTENode } from '../nodes/recursive-cte-node.js';
|
|
8
10
|
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
9
11
|
import { ReferenceGraphBuilder } from './reference-graph.js';
|
|
10
12
|
import { isCorrelatedSubquery } from './correlation-detector.js';
|
|
@@ -24,28 +26,166 @@ export class MaterializationAdvisory {
|
|
|
24
26
|
* Returns the transformed tree or the original if no caching was added
|
|
25
27
|
*/
|
|
26
28
|
analyzeAndTransform(root) {
|
|
27
|
-
// Build reference graph
|
|
29
|
+
// Build reference graph (exactly once per optimize — shared by both the
|
|
30
|
+
// CTE materialize-mark rewrite and the CacheNode recommendations below)
|
|
28
31
|
const refGraph = this.referenceBuilder.buildReferenceGraph(root);
|
|
29
|
-
//
|
|
32
|
+
// Count references to each recursive CTE by its working-table descriptor.
|
|
33
|
+
// A multi-referenced recursive CTE is DUPLICATED into distinct
|
|
34
|
+
// RecursiveCTENode instances by earlier passes (each copy then has
|
|
35
|
+
// parentCount 1), but every copy preserves the one `tableDescriptor`
|
|
36
|
+
// identity — so summing parent counts per descriptor recovers the true
|
|
37
|
+
// reference count. A single-reference recursive CTE is never duplicated
|
|
38
|
+
// (one CTEReference parent, one path), so its descriptor sums to 1.
|
|
39
|
+
const recursiveRefsByDescriptor = new Map();
|
|
40
|
+
for (const [node, stats] of refGraph) {
|
|
41
|
+
if (node instanceof RecursiveCTENode) {
|
|
42
|
+
recursiveRefsByDescriptor.set(node.tableDescriptor, (recursiveRefsByDescriptor.get(node.tableDescriptor) ?? 0) + stats.parentCount);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Mark multi-referenced / MATERIALIZED-hinted CTEs for shared
|
|
46
|
+
// materialization at emission. Memoized by node identity so a CTENode
|
|
47
|
+
// shared by several CTEReferenceNode parents is rewritten ONCE and the
|
|
48
|
+
// parents keep pointing at the same marked instance — emitCTE keys its
|
|
49
|
+
// per-execution buffer on that shared node's plan id. (Recursive CTEs use
|
|
50
|
+
// the descriptor count above instead — see markCTEMaterialization.)
|
|
51
|
+
const markMemo = new Map();
|
|
52
|
+
const markedRoot = this.markCTEMaterialization(root, refGraph, recursiveRefsByDescriptor, markMemo);
|
|
53
|
+
// Nodes inside any recursive CTE's recursive-case subtree must NEVER be
|
|
54
|
+
// cached. The recursive case is re-evaluated on every semi-naïve iteration
|
|
55
|
+
// against the changing working table (delta), so a CacheNode there would
|
|
56
|
+
// freeze it to the first iteration's rows — dropping rows (UNION DISTINCT
|
|
57
|
+
// terminates early) or looping forever (UNION ALL). This bites specifically
|
|
58
|
+
// when a recursive CTE is referenced 2+ times: earlier passes duplicate it
|
|
59
|
+
// into distinct instances that SHARE one recursive-case subtree, inflating
|
|
60
|
+
// that subtree's parent count to ≥2 and otherwise tripping the multi-parent
|
|
61
|
+
// cache rule. Collected for EVERY recursive CTE (not only multi-referenced
|
|
62
|
+
// ones): a single-reference recursive case never trips the multi-parent rule
|
|
63
|
+
// so excluding it is normally a no-op, but the exclusion is uniform because
|
|
64
|
+
// caching a working-table-dependent node is wrong regardless of ref count.
|
|
65
|
+
// NOTE: conservative — excludes EVERY node in a recursive-case subtree,
|
|
66
|
+
// including a subquery that never reads the working table (safe to cache).
|
|
67
|
+
// If an expensive working-table-independent subquery inside a recursive case
|
|
68
|
+
// ever shows up as slow, narrow this to only working-table-dependent nodes.
|
|
69
|
+
const noCacheNodes = new Set();
|
|
70
|
+
for (const [node] of refGraph) {
|
|
71
|
+
if (node instanceof RecursiveCTENode) {
|
|
72
|
+
this.collectSubtree(node.recursiveCaseQuery, noCacheNodes);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Build recommendations. Keys are re-mapped through the mark memo so a
|
|
76
|
+
// recommendation lands on the (possibly rewritten) node instance that is
|
|
77
|
+
// actually present in the marked tree.
|
|
30
78
|
const recommendations = new Map();
|
|
31
79
|
for (const [node, stats] of refGraph) {
|
|
32
80
|
// Only consider relational nodes for caching
|
|
33
81
|
if (!isRelationalNode(node)) {
|
|
34
82
|
continue;
|
|
35
83
|
}
|
|
84
|
+
if (noCacheNodes.has(node)) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
36
87
|
const recommendation = this.adviseCaching(node, stats);
|
|
37
88
|
if (recommendation.shouldCache) {
|
|
38
|
-
recommendations.set(node, recommendation);
|
|
89
|
+
recommendations.set(markMemo.get(node) ?? node, recommendation);
|
|
39
90
|
log('Recommending cache for %s: %s', node.nodeType, recommendation.reason);
|
|
40
91
|
}
|
|
41
92
|
}
|
|
42
93
|
if (recommendations.size === 0) {
|
|
43
94
|
log('No caching opportunities identified');
|
|
44
|
-
return
|
|
95
|
+
return markedRoot;
|
|
45
96
|
}
|
|
46
97
|
log('Found %d caching opportunities', recommendations.size);
|
|
47
98
|
// Transform the tree by wrapping recommended nodes with CacheNode
|
|
48
|
-
return this.transformTree(
|
|
99
|
+
return this.transformTree(markedRoot, recommendations);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Decide whether a non-recursive {@link CTENode} must be materialized once per
|
|
103
|
+
* statement execution. An explicit NOT MATERIALIZED hint is honored (the user
|
|
104
|
+
* opted into re-execution per reference); otherwise an explicit MATERIALIZED
|
|
105
|
+
* hint or two-plus references trips the mark.
|
|
106
|
+
*
|
|
107
|
+
* Recursive CTEs ({@link RecursiveCTENode}) do NOT flow through here — they run
|
|
108
|
+
* through the working-table machinery (emitRecursiveCTE), not emitCTE, and are
|
|
109
|
+
* marked by a dedicated branch in {@link markCTEMaterialization} that gates
|
|
110
|
+
* purely on reference count (the hint is deliberately ignored — see there).
|
|
111
|
+
*/
|
|
112
|
+
shouldMaterializeCTE(node, stats) {
|
|
113
|
+
if (node.isRecursive)
|
|
114
|
+
return false;
|
|
115
|
+
if (node.materializationHint === 'not_materialized')
|
|
116
|
+
return false;
|
|
117
|
+
return node.materializationHint === 'materialized' || (stats?.parentCount ?? 0) >= 2;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Top-down memoized rewrite that sets the `materialize` flag on CTE nodes:
|
|
121
|
+
* on a non-recursive {@link CTENode} where {@link shouldMaterializeCTE} says so,
|
|
122
|
+
* and on a {@link RecursiveCTENode} whose working-table descriptor is referenced
|
|
123
|
+
* two-plus times (`recursiveRefsByDescriptor`).
|
|
124
|
+
*
|
|
125
|
+
* The memo (keyed by node identity) keeps a shared CTENode shared: the plain
|
|
126
|
+
* {@link transformChildren} walk is NOT memoized, so routing this mark through it
|
|
127
|
+
* would rebuild the CTENode once per referencing parent — two distinct marked
|
|
128
|
+
* instances with different plan ids, and emitCTE's per-execution buffer key
|
|
129
|
+
* would never match across references. (Recursive CTEs are already duplicated
|
|
130
|
+
* per parent by earlier passes; emitRecursiveCTE keys its buffer on the shared
|
|
131
|
+
* `tableDescriptor` instead of the plan id, so the mark just needs to land on
|
|
132
|
+
* every copy — which the descriptor count guarantees.)
|
|
133
|
+
*/
|
|
134
|
+
markCTEMaterialization(node, refGraph, recursiveRefsByDescriptor, memo) {
|
|
135
|
+
const cached = memo.get(node);
|
|
136
|
+
if (cached) {
|
|
137
|
+
return cached;
|
|
138
|
+
}
|
|
139
|
+
const children = node.getChildren();
|
|
140
|
+
const newChildren = children.map(child => this.markCTEMaterialization(child, refGraph, recursiveRefsByDescriptor, memo));
|
|
141
|
+
const childrenChanged = newChildren.some((child, idx) => child !== children[idx]);
|
|
142
|
+
let result;
|
|
143
|
+
if (node instanceof CTENode && !node.materialize && this.shouldMaterializeCTE(node, refGraph.get(node))) {
|
|
144
|
+
const newSource = (childrenChanged ? newChildren[0] : node.source);
|
|
145
|
+
result = new CTENode(node.scope, node.cteName, node.columns, newSource, node.materializationHint, node.isRecursive, true);
|
|
146
|
+
log('Marked CTE %s for shared materialization', node.cteName);
|
|
147
|
+
}
|
|
148
|
+
else if (node instanceof RecursiveCTENode && !node.materialize && (recursiveRefsByDescriptor.get(node.tableDescriptor) ?? 0) >= 2) {
|
|
149
|
+
// Multi-referenced recursive CTE: drive the recursion once per execution
|
|
150
|
+
// into a shared buffer that every reference replays (emitRecursiveCTE),
|
|
151
|
+
// instead of each reference driving its own semi-naïve loop. Two
|
|
152
|
+
// interleaved drives share one working-table `tableDescriptor` and clobber
|
|
153
|
+
// each other's delta — the double-reference runaway this fixes.
|
|
154
|
+
//
|
|
155
|
+
// Gated on the DESCRIPTOR reference count, not this node's parentCount:
|
|
156
|
+
// earlier passes duplicate the shared node per reference (each copy then
|
|
157
|
+
// has parentCount 1), so per-node counting would miss it. The
|
|
158
|
+
// materializationHint is deliberately ignored — honoring NOT MATERIALIZED
|
|
159
|
+
// on a multi-referenced recursive CTE would re-introduce exactly that
|
|
160
|
+
// runaway, so correctness beats the hint here. `tableDescriptor` identity
|
|
161
|
+
// is preserved so the InternalRecursiveCTERefNode in the recursive case
|
|
162
|
+
// still resolves the same working table AND every duplicate keys the same
|
|
163
|
+
// shared buffer.
|
|
164
|
+
const withMarkedChildren = (childrenChanged ? node.withChildren(newChildren) : node);
|
|
165
|
+
result = withMarkedChildren.withMaterialize(true);
|
|
166
|
+
log('Marked recursive CTE %s for shared buffering (%d references)', node.cteName, recursiveRefsByDescriptor.get(node.tableDescriptor) ?? 0);
|
|
167
|
+
}
|
|
168
|
+
else if (childrenChanged) {
|
|
169
|
+
result = node.withChildren(newChildren);
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
result = node;
|
|
173
|
+
}
|
|
174
|
+
memo.set(node, result);
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Collect a node and every descendant (via `getChildren()`) into `out`.
|
|
179
|
+
* `out` doubles as the visited set, so a shared subtree is walked once.
|
|
180
|
+
*/
|
|
181
|
+
collectSubtree(node, out) {
|
|
182
|
+
if (out.has(node)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
out.add(node);
|
|
186
|
+
for (const child of node.getChildren()) {
|
|
187
|
+
this.collectSubtree(child, out);
|
|
188
|
+
}
|
|
49
189
|
}
|
|
50
190
|
/**
|
|
51
191
|
* Core advisory algorithm
|
|
@@ -79,44 +219,40 @@ export class MaterializationAdvisory {
|
|
|
79
219
|
reason: 'Correlated subquery - must re-execute for each outer row'
|
|
80
220
|
};
|
|
81
221
|
}
|
|
82
|
-
// Rule 4: Single-parent nodes
|
|
83
|
-
|
|
222
|
+
// Rule 4: Single-parent nodes typically don't benefit from caching.
|
|
223
|
+
// (Loop-context caching for nested-loop join right sides is handled
|
|
224
|
+
// separately by rule-nested-loop-right-cache during physical optimization.)
|
|
225
|
+
if (stats.parentCount <= 1) {
|
|
84
226
|
return {
|
|
85
227
|
shouldCache: false,
|
|
86
228
|
strategy: 'memory',
|
|
87
229
|
threshold: 0,
|
|
88
|
-
reason: 'Single parent
|
|
230
|
+
reason: 'Single parent'
|
|
89
231
|
};
|
|
90
232
|
}
|
|
91
|
-
// Rule
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
233
|
+
// Rule 5a: CTE and recursive-CTE nodes never take a CacheNode wrap. A
|
|
234
|
+
// multi-referenced (or MATERIALIZED-hinted) CTE is handled by the
|
|
235
|
+
// CTENode/RecursiveCTENode.materialize mark (see markCTEMaterialization) —
|
|
236
|
+
// emitCTE / emitRecursiveCTE buffer it once per execution. A CacheNode wrap
|
|
237
|
+
// here could never land anyway: CTEReferenceNode.withChildren rejects a
|
|
238
|
+
// non-CTE child, so transformChildren silently dropped the wrap.
|
|
239
|
+
if (node.nodeType === PlanNodeType.CTE || node.nodeType === PlanNodeType.RecursiveCTE) {
|
|
95
240
|
return {
|
|
96
|
-
shouldCache:
|
|
97
|
-
strategy,
|
|
98
|
-
threshold,
|
|
99
|
-
reason:
|
|
241
|
+
shouldCache: false,
|
|
242
|
+
strategy: 'memory',
|
|
243
|
+
threshold: 0,
|
|
244
|
+
reason: 'CTE — shared materialization handled by the materialize mark'
|
|
100
245
|
};
|
|
101
246
|
}
|
|
102
|
-
// Rule
|
|
103
|
-
if (stats.
|
|
104
|
-
// Check if the estimated size is reasonable for caching
|
|
105
|
-
if (stats.estimatedRows > this.tuning.join.maxRightRowsForCaching) {
|
|
106
|
-
return {
|
|
107
|
-
shouldCache: false,
|
|
108
|
-
strategy: 'memory',
|
|
109
|
-
threshold: 0,
|
|
110
|
-
reason: `In loop but too large (${stats.estimatedRows} rows)`
|
|
111
|
-
};
|
|
112
|
-
}
|
|
247
|
+
// Rule 5: Multi-parent nodes benefit from caching
|
|
248
|
+
if (stats.parentCount > 1) {
|
|
113
249
|
const strategy = this.selectStrategy(stats.estimatedRows);
|
|
114
250
|
const threshold = this.calculateThreshold(stats.estimatedRows, strategy);
|
|
115
251
|
return {
|
|
116
252
|
shouldCache: true,
|
|
117
253
|
strategy,
|
|
118
254
|
threshold,
|
|
119
|
-
reason:
|
|
255
|
+
reason: `Multiple parents (${stats.parentCount})`
|
|
120
256
|
};
|
|
121
257
|
}
|
|
122
258
|
// Default: no caching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialization-advisory.js","sourceRoot":"","sources":["../../../../src/planner/cache/materialization-advisory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"materialization-advisory.js","sourceRoot":"","sources":["../../../../src/planner/cache/materialization-advisory.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,16 +16,12 @@ import type { OptimizerTuning } from '../optimizer-tuning.js';
|
|
|
16
16
|
export interface RefStats {
|
|
17
17
|
/** Number of parent nodes referencing this node */
|
|
18
18
|
parentCount: number;
|
|
19
|
-
/** Whether this node appears on the inner side of a nested loop or correlated subquery */
|
|
20
|
-
appearsInLoop: boolean;
|
|
21
19
|
/** Estimated number of rows this node produces */
|
|
22
20
|
estimatedRows: number;
|
|
23
21
|
/** Whether this node is deterministic (same inputs produce same outputs) */
|
|
24
22
|
deterministic: boolean;
|
|
25
23
|
/** Parent nodes that reference this node (for debugging) */
|
|
26
24
|
parents: Set<PlanNode>;
|
|
27
|
-
/** Estimated execution multiplier due to loop contexts */
|
|
28
|
-
loopMultiplier: number;
|
|
29
25
|
}
|
|
30
26
|
/**
|
|
31
27
|
* Builds a reference graph for materialization decisions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-graph.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/reference-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,
|
|
1
|
+
{"version":3,"file":"reference-graph.d.ts","sourceRoot":"","sources":["../../../../src/planner/cache/reference-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACxB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,aAAa,EAAE,OAAO,CAAC;IACvB,4DAA4D;IAC5D,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;CACvB;AAUD;;GAEG;AACH,qBAAa,qBAAqB;IAGrB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAAiC;gBAE3B,MAAM,EAAE,eAAe;IAE3C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAmB5D;;OAEG;IACH,OAAO,CAAC,eAAe;IAqCvB;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB;;OAEG;IACH,OAAO,CAAC,eAAe;CAQvB"}
|
|
@@ -32,8 +32,6 @@ export class ReferenceGraphBuilder {
|
|
|
32
32
|
// Build the reference graph with proper parent tracking
|
|
33
33
|
const context = {
|
|
34
34
|
parent: null,
|
|
35
|
-
inLoop: false,
|
|
36
|
-
loopIterations: 1
|
|
37
35
|
};
|
|
38
36
|
this.buildReferences(root, context);
|
|
39
37
|
log('Built reference graph with %d nodes', this.refMap.size);
|
|
@@ -52,11 +50,9 @@ export class ReferenceGraphBuilder {
|
|
|
52
50
|
// First time seeing this node
|
|
53
51
|
stats = {
|
|
54
52
|
parentCount: 0,
|
|
55
|
-
appearsInLoop: context.inLoop,
|
|
56
53
|
estimatedRows: this.getEstimatedRows(node),
|
|
57
54
|
deterministic: this.isDeterministic(node),
|
|
58
55
|
parents: new Set(),
|
|
59
|
-
loopMultiplier: context.loopIterations
|
|
60
56
|
};
|
|
61
57
|
this.refMap.set(node, stats);
|
|
62
58
|
}
|
|
@@ -65,17 +61,13 @@ export class ReferenceGraphBuilder {
|
|
|
65
61
|
stats.parents.add(context.parent);
|
|
66
62
|
stats.parentCount++;
|
|
67
63
|
}
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// Create child context - for now, we propagate the parent context
|
|
74
|
-
// In the future, if nodes expose execution strategy hints, we could use those
|
|
64
|
+
// Recurse with this node as the parent. Loop / execution-strategy context
|
|
65
|
+
// is intentionally NOT tracked here: this builder works on logical nodes
|
|
66
|
+
// and makes no assumptions about nested-loop vs hash/merge execution.
|
|
67
|
+
// Nested-loop right-side caching is handled by rule-nested-loop-right-cache
|
|
68
|
+
// during physical optimization, where the driver side is known.
|
|
75
69
|
const childContext = {
|
|
76
70
|
parent: node,
|
|
77
|
-
inLoop: context.inLoop,
|
|
78
|
-
loopIterations: context.loopIterations
|
|
79
71
|
};
|
|
80
72
|
// Visit all children uniformly
|
|
81
73
|
this.visitAllChildren(node, childContext);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-graph.js","sourceRoot":"","sources":["../../../../src/planner/cache/reference-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAiB,MAAM,uBAAuB,CAAC;AAGxE,MAAM,GAAG,GAAG,YAAY,CAAC,iCAAiC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-graph.js","sourceRoot":"","sources":["../../../../src/planner/cache/reference-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,14 +128,16 @@ export declare function chooseCheapest<T>(options: Array<{
|
|
|
128
128
|
}>): T;
|
|
129
129
|
/**
|
|
130
130
|
* The maintenance strategies the incremental substrate **costs** — a subset of
|
|
131
|
-
* `MaintenancePlan['kind']` in core/database-materialized-views.ts
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
131
|
+
* `MaintenancePlan['kind']` in core/database-materialized-views.ts, plus
|
|
132
|
+
* `'delta-aggregate'`: the arithmetic fast path INSIDE the `'residual-recompute'` arm
|
|
133
|
+
* (the plan kind stays `'residual-recompute'`; the apply path routes on the plan's
|
|
134
|
+
* `delta` descriptor). The arms the cost model does not distinguish (`'prefix-delete'`,
|
|
135
|
+
* `'join-residual'`) record the strategy they are costed as (`'residual-recompute'`) in
|
|
136
|
+
* their `chosenStrategy`. Each arm builder calls {@link selectMaintenanceStrategy} with
|
|
137
|
+
* its own sound set and rejects any answer outside it as INTERNAL, so the gate can never
|
|
138
|
+
* hand back a strategy no arm implements (docs/invariants.md MV-007).
|
|
137
139
|
*/
|
|
138
|
-
export type MaintenanceStrategy = 'inverse-projection' | 'residual-recompute' | 'full-rebuild';
|
|
140
|
+
export type MaintenanceStrategy = 'inverse-projection' | 'residual-recompute' | 'delta-aggregate' | 'full-rebuild';
|
|
139
141
|
/**
|
|
140
142
|
* Default source row count above which a per-write `'full-rebuild'` is pathological under
|
|
141
143
|
* the synchronous (row-time, in-transaction) policy: every DML statement on the source
|
|
@@ -165,6 +167,12 @@ export interface MaintenanceSourceStats {
|
|
|
165
167
|
forwardBodyCost: number;
|
|
166
168
|
/** No-stats fallback multiplier; the gate supplies tuning.deltaPerRowFallbackRatio. */
|
|
167
169
|
fallbackRatio?: number;
|
|
170
|
+
/** Expected fraction of changes to a **tighten-only** (min/max) delta-aggregate body
|
|
171
|
+
* that retract and so fall back to the key-filtered residual for their group. Set at
|
|
172
|
+
* create only for a `'delta-aggregate'` body carrying a tighten column (min/max, or a
|
|
173
|
+
* join-semilattice UDAF — `merge`, no `negate`); blended into the delta cost by
|
|
174
|
+
* {@link maintenanceCost}. Absent/0 ⇒ pure-group body, delta cost unchanged. */
|
|
175
|
+
deltaTightenFallbackRatio?: number;
|
|
168
176
|
}
|
|
169
177
|
/**
|
|
170
178
|
* Backward (maintenance-direction) cost of applying `strategy` to `changeCardinality`
|
|
@@ -180,6 +188,19 @@ export interface MaintenanceSourceStats {
|
|
|
180
188
|
* group. With stats, costed against rows-per-group (tableRows / distinctGroupsEstimate);
|
|
181
189
|
* with no stats, falls back to the legacy `deltaPerRowFallbackRatio` heuristic so
|
|
182
190
|
* behaviour is unchanged on the no-stats path.
|
|
191
|
+
* - `'delta-aggregate'`: O(1) arithmetic per changed row plus one read-modify-write of
|
|
192
|
+
* the stored group row per affected group — no source read, no residual re-execution.
|
|
193
|
+
* Modeled as an index seek + reprojection per change (the same shape as
|
|
194
|
+
* inverse-projection), CAPPED at half the residual per-group cost: per affected
|
|
195
|
+
* group the delta does strictly less work than the residual (one point RMW vs a
|
|
196
|
+
* key-filtered body re-execution over that group's source rows), so it must cost
|
|
197
|
+
* strictly below `'residual-recompute'` for every stats input — including a
|
|
198
|
+
* small/empty source at create time, where the residual's no-stats fallback
|
|
199
|
+
* (`forwardBodyCost × ratio`) shrinks below any fixed constant. A body carrying a
|
|
200
|
+
* **tighten-only** (min/max) column blends in `deltaTightenFallbackRatio` — the expected
|
|
201
|
+
* fraction of retracting changes that re-derive their group from the full residual — so
|
|
202
|
+
* it costs strictly more than a pure-group body but, for the small create-time estimate,
|
|
203
|
+
* still below the always-residual arm.
|
|
183
204
|
* - `'full-rebuild'`: re-evaluate the whole body once — the always-correct floor,
|
|
184
205
|
* independent of changeCardinality.
|
|
185
206
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/planner/cost/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,eAAO,MAAM,cAAc;IAC1B,uCAAuC;;IAEvC,+CAA+C;;IAG/C,kCAAkC;;IAElC,yCAAyC;;IAGzC,kCAAkC;;IAElC,yCAAyC;;IAGzC,+BAA+B;;IAE/B,0CAA0C;;IAG1C,iCAAiC;;IAGjC,kCAAkC;;IAGlC,0CAA0C;;IAE1C,yCAAyC;;IAGzC,qDAAqD;;IAErD,qDAAqD;;IAGrD,mDAAmD;;IAEnD,mDAAmD;;IAGnD,6CAA6C;;IAG7C,0CAA0C;;IAG1C,uCAAuC;;IAGvC,oCAAoC;;IAEpC,wCAAwC;;IAGxC,sEAAsE;;IAEtE,qDAAqD;;IAGrD,8CAA8C;;IAE9C,iDAAiD;;CAExC,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,GAAE,MAAU,GAAG,MAAM,CAE7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAGpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,GAAG,MAAM,CAK1H;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,GAAE,MAAU,GAAG,MAAM,CAIvE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,CAAC,GAAG,CAAC,CAOhF;AAaD
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/planner/cost/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -208,6 +208,19 @@ const DEFAULT_RESIDUAL_FALLBACK_RATIO = 0.5;
|
|
|
208
208
|
* group. With stats, costed against rows-per-group (tableRows / distinctGroupsEstimate);
|
|
209
209
|
* with no stats, falls back to the legacy `deltaPerRowFallbackRatio` heuristic so
|
|
210
210
|
* behaviour is unchanged on the no-stats path.
|
|
211
|
+
* - `'delta-aggregate'`: O(1) arithmetic per changed row plus one read-modify-write of
|
|
212
|
+
* the stored group row per affected group — no source read, no residual re-execution.
|
|
213
|
+
* Modeled as an index seek + reprojection per change (the same shape as
|
|
214
|
+
* inverse-projection), CAPPED at half the residual per-group cost: per affected
|
|
215
|
+
* group the delta does strictly less work than the residual (one point RMW vs a
|
|
216
|
+
* key-filtered body re-execution over that group's source rows), so it must cost
|
|
217
|
+
* strictly below `'residual-recompute'` for every stats input — including a
|
|
218
|
+
* small/empty source at create time, where the residual's no-stats fallback
|
|
219
|
+
* (`forwardBodyCost × ratio`) shrinks below any fixed constant. A body carrying a
|
|
220
|
+
* **tighten-only** (min/max) column blends in `deltaTightenFallbackRatio` — the expected
|
|
221
|
+
* fraction of retracting changes that re-derive their group from the full residual — so
|
|
222
|
+
* it costs strictly more than a pure-group body but, for the small create-time estimate,
|
|
223
|
+
* still below the always-residual arm.
|
|
211
224
|
* - `'full-rebuild'`: re-evaluate the whole body once — the always-correct floor,
|
|
212
225
|
* independent of changeCardinality.
|
|
213
226
|
*/
|
|
@@ -215,6 +228,19 @@ export function maintenanceCost(strategy, changeCardinality, stats) {
|
|
|
215
228
|
switch (strategy) {
|
|
216
229
|
case 'inverse-projection':
|
|
217
230
|
return changeCardinality * (COST_CONSTANTS.INDEX_SEEK_PER_ROW + COST_CONSTANTS.PROJECT_PER_ROW);
|
|
231
|
+
case 'delta-aggregate': {
|
|
232
|
+
// Pure-group delta cost: an index seek + reprojection per change, capped at half the
|
|
233
|
+
// residual per-group cost (delta does strictly less work than the residual per group).
|
|
234
|
+
const deltaPerGroup = Math.min(COST_CONSTANTS.INDEX_SEEK_PER_ROW + COST_CONSTANTS.PROJECT_PER_ROW, residualCostPerGroup(stats) * 0.5);
|
|
235
|
+
// A tighten-only (min/max) column re-derives the fraction `f` of changes that retract
|
|
236
|
+
// from the FULL residual. Blend: `(1-f)·deltaPerGroup + f·residualPerGroup`. Pure-group
|
|
237
|
+
// bodies (f = 0) reduce to exactly `deltaPerGroup` — unchanged. `f` is a create-time
|
|
238
|
+
// estimate (small), so a tighten body costs more than a pure-group one yet stays below
|
|
239
|
+
// the always-residual arm; only a (currently unmeasurable) retraction-heavy `f` would
|
|
240
|
+
// legitimately tip the argmin to plain residual.
|
|
241
|
+
const f = stats.deltaTightenFallbackRatio ?? 0;
|
|
242
|
+
return changeCardinality * ((1 - f) * deltaPerGroup + f * residualCostPerGroup(stats));
|
|
243
|
+
}
|
|
218
244
|
case 'residual-recompute':
|
|
219
245
|
return changeCardinality * residualCostPerGroup(stats);
|
|
220
246
|
case 'full-rebuild':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/planner/cost/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/planner/cost/index.ts"],"names":[],"mappings":"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"}
|