@quereus/quereus 4.4.1 → 4.5.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/README.md +1 -1
- package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-analysis.js +1 -0
- package/dist/src/core/database-materialized-views-analysis.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +92 -3
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/registration.d.ts +4 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +1 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +4 -3
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.js +37 -3
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.d.ts +33 -3
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.js +36 -2
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +13 -2
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +10 -14
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts +10 -4
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-conjuncts.js +28 -7
- package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +8 -27
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/analysis/scalar-subqueries.d.ts +22 -3
- package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -1
- package/dist/src/planner/analysis/scalar-subqueries.js +32 -3
- package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -1
- package/dist/src/planner/analysis/set-op-type-merge.d.ts +64 -0
- package/dist/src/planner/analysis/set-op-type-merge.d.ts.map +1 -0
- package/dist/src/planner/analysis/set-op-type-merge.js +97 -0
- package/dist/src/planner/analysis/set-op-type-merge.js.map +1 -0
- package/dist/src/planner/building/coercion.d.ts +78 -0
- package/dist/src/planner/building/coercion.d.ts.map +1 -0
- package/dist/src/planner/building/coercion.js +137 -0
- package/dist/src/planner/building/coercion.js.map +1 -0
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +5 -18
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +1 -104
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +8 -0
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +10 -6
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/cost/conjunct-cost.d.ts +42 -0
- package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -0
- package/dist/src/planner/cost/conjunct-cost.js +62 -0
- package/dist/src/planner/cost/conjunct-cost.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -1
- package/dist/src/planner/mutation/propagate.js +1 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +19 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +10 -5
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +5 -0
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +8 -1
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +57 -0
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +47 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +87 -0
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/key-set-semi-join-node.js +137 -0
- package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +14 -6
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +1 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +1 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts +68 -16
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +147 -26
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +19 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +13 -2
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +49 -0
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +68 -0
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-key-set-seek.js +408 -0
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +27 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +31 -11
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +67 -41
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +72 -36
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +11 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts +30 -0
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js +63 -0
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +17 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +206 -12
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +3 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +18 -3
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/shared/index-style-context.d.ts +17 -0
- package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -1
- package/dist/src/planner/rules/shared/index-style-context.js +7 -0
- package/dist/src/planner/rules/shared/index-style-context.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +24 -6
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +175 -60
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts +52 -0
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +151 -5
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/stats/index.d.ts +15 -0
- package/dist/src/planner/stats/index.d.ts.map +1 -1
- package/dist/src/planner/stats/index.js.map +1 -1
- package/dist/src/planner/stats/selectivity-combine.d.ts +53 -0
- package/dist/src/planner/stats/selectivity-combine.d.ts.map +1 -0
- package/dist/src/planner/stats/selectivity-combine.js +75 -0
- package/dist/src/planner/stats/selectivity-combine.js.map +1 -0
- package/dist/src/planner/util/column-origins.d.ts +58 -0
- package/dist/src/planner/util/column-origins.d.ts.map +1 -0
- package/dist/src/planner/util/column-origins.js +90 -0
- package/dist/src/planner/util/column-origins.js.map +1 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts +40 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +90 -9
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +6 -0
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +8 -3
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +4 -38
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +2 -23
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +6 -35
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/case.d.ts.map +1 -1
- package/dist/src/runtime/emit/case.js +40 -6
- package/dist/src/runtime/emit/case.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +32 -8
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +26 -23
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/filter.d.ts +18 -0
- package/dist/src/runtime/emit/filter.d.ts.map +1 -1
- package/dist/src/runtime/emit/filter.js +52 -10
- package/dist/src/runtime/emit/filter.js.map +1 -1
- package/dist/src/runtime/emit/join-key-extractor.d.ts +46 -0
- package/dist/src/runtime/emit/join-key-extractor.d.ts.map +1 -0
- package/dist/src/runtime/emit/join-key-extractor.js +60 -0
- package/dist/src/runtime/emit/join-key-extractor.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +36 -15
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.d.ts +29 -0
- package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -0
- package/dist/src/runtime/emit/key-set-semi-join.js +143 -0
- package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +15 -8
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/operand-comparator.d.ts +40 -0
- package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -0
- package/dist/src/runtime/emit/operand-comparator.js +59 -0
- package/dist/src/runtime/emit/operand-comparator.js.map +1 -0
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +11 -2
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +5 -2
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +6 -2
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +2 -0
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +7 -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 +9 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +30 -4
- package/dist/src/types/builtin-types.js.map +1 -1
- package/dist/src/util/comparison.d.ts +25 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +31 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +87 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +87 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +6 -4
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +6 -4
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +60 -18
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +100 -39
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +15 -6
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +26 -11
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +14 -2
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +51 -39
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +9 -2
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -1
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +3 -3
|
@@ -64,6 +64,13 @@ export declare class CatalogStatsProvider implements StatsProvider {
|
|
|
64
64
|
constructor(fallback?: NaiveStatsProvider);
|
|
65
65
|
tableRows(table: TableSchema): number | undefined;
|
|
66
66
|
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* The catalog half of {@link selectivity}: undefined rather than a naive guess
|
|
69
|
+
* when the table carries no statistics, or when the predicate's shape puts it out
|
|
70
|
+
* of reach of the ones it has (`lower(cat) = 'x'` — {@link extractColumnFromPredicate}
|
|
71
|
+
* reads the column off a direct child of the comparison and finds none).
|
|
72
|
+
*/
|
|
73
|
+
statsOnlySelectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
67
74
|
joinSelectivity(leftTable: TableSchema, rightTable: TableSchema, joinCondition: ScalarPlanNode): number | undefined;
|
|
68
75
|
/**
|
|
69
76
|
* Check if an equi-join column pair represents a FK→PK relationship.
|
|
@@ -75,6 +82,51 @@ export declare class CatalogStatsProvider implements StatsProvider {
|
|
|
75
82
|
distinctValues(table: TableSchema, columnName: string): number | undefined;
|
|
76
83
|
indexSelectivity(table: TableSchema, indexName: string, predicate: ScalarPlanNode): number | undefined;
|
|
77
84
|
private getDistinct;
|
|
85
|
+
/**
|
|
86
|
+
* Entry point for predicate selectivity: short-circuit the empty table, then
|
|
87
|
+
* walk the predicate's boolean structure.
|
|
88
|
+
*/
|
|
78
89
|
private estimatePredicateSelectivity;
|
|
90
|
+
/**
|
|
91
|
+
* Recurse over the boolean structure (AND / OR / NOT) of a predicate,
|
|
92
|
+
* delegating anything else to {@link estimateLeaf}.
|
|
93
|
+
*
|
|
94
|
+
* Returns undefined when nothing useful can be said, which lets `selectivity`
|
|
95
|
+
* fall through to the naive provider exactly as it did before this recursion
|
|
96
|
+
* existed.
|
|
97
|
+
*/
|
|
98
|
+
private estimateNode;
|
|
99
|
+
/**
|
|
100
|
+
* AND: estimate each conjunct and combine the ones we could estimate.
|
|
101
|
+
*
|
|
102
|
+
* An unestimable conjunct is treated as selectivity 1.0 (claim no reduction)
|
|
103
|
+
* rather than handed to NaiveStatsProvider's flat 0.1. That number is
|
|
104
|
+
* fabricated, and multiplying it in biases the whole estimate downward;
|
|
105
|
+
* over-estimating surviving rows is the safer error direction for plan choice.
|
|
106
|
+
* Concretely `a = 1 and lower(b) = 'x'` now estimates 1/ndv(a) where it used to
|
|
107
|
+
* estimate 0.1 — a deliberate change, not a regression.
|
|
108
|
+
*
|
|
109
|
+
* If *every* conjunct is unknown we return undefined so the whole-predicate
|
|
110
|
+
* naive fallback in `selectivity()` still runs.
|
|
111
|
+
*/
|
|
112
|
+
private estimateConjunction;
|
|
113
|
+
/**
|
|
114
|
+
* OR: estimate every disjunct, or give up.
|
|
115
|
+
*
|
|
116
|
+
* Unlike AND there is no safe default for an unknown disjunct — assuming 1.0
|
|
117
|
+
* would make the whole disjunction 1.0 (safe but useless), and assuming 0
|
|
118
|
+
* would silently drop a branch that may match everything. So a single unknown
|
|
119
|
+
* disjunct makes the whole OR unknown.
|
|
120
|
+
*/
|
|
121
|
+
private estimateDisjunction;
|
|
122
|
+
/**
|
|
123
|
+
* Never claim fewer than one surviving row once two or more selectivities were
|
|
124
|
+
* actually combined. Deliberately not applied to a single leaf estimate:
|
|
125
|
+
* `IS NULL` on a column with nullCount 0 legitimately returns 0 today, and
|
|
126
|
+
* `FilterNode.estimatedRows` already floors the row count at 1.
|
|
127
|
+
*/
|
|
128
|
+
private floorCombined;
|
|
129
|
+
/** Estimate a single (non-boolean) comparison against column statistics. */
|
|
130
|
+
private estimateLeaf;
|
|
79
131
|
}
|
|
80
132
|
//# sourceMappingURL=catalog-stats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-stats.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog-stats.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoBhD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,6CAA6C;IAC7C,UAAU,EAAE,QAAQ,CAAC;IACrB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,qDAAqD;IACrD,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,mDAAmD;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACnD,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAID;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,QAAQ,CAAC,EAAE,kBAAkB;IAIzC,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IASjD,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAS9E;;;;;OAKG;IACH,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAMvF,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAwBnH;;;OAGG;IACH,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;IAMrB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM1E,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAStG,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,4BAA4B;IAQpC;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAsCpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAOrB,4EAA4E;IAC5E,OAAO,CAAC,YAAY;CAsFpB"}
|
|
@@ -7,7 +7,15 @@
|
|
|
7
7
|
import { NaiveStatsProvider } from './index.js';
|
|
8
8
|
import { createLogger } from '../../common/logger.js';
|
|
9
9
|
import { selectivityFromHistogram } from './histogram.js';
|
|
10
|
+
import { combineConjunctive, combineDisjunctive } from './selectivity-combine.js';
|
|
11
|
+
import { splitConjuncts, splitDisjuncts } from '../analysis/predicate-conjuncts.js';
|
|
10
12
|
const log = createLogger('optimizer:stats:catalog');
|
|
13
|
+
/**
|
|
14
|
+
* Guard against unbounded recursion through nested OR / NOT structures.
|
|
15
|
+
* (AND and OR levels are each flattened in one step, so this only bites on
|
|
16
|
+
* genuinely alternating boolean nesting.)
|
|
17
|
+
*/
|
|
18
|
+
const MAX_BOOLEAN_DEPTH = 16;
|
|
11
19
|
// ── CatalogStatsProvider ────────────────────────────────────────────────
|
|
12
20
|
/**
|
|
13
21
|
* Statistics provider that reads cached TableStatistics from the schema catalog.
|
|
@@ -27,16 +35,25 @@ export class CatalogStatsProvider {
|
|
|
27
35
|
return this.fallback.tableRows(table);
|
|
28
36
|
}
|
|
29
37
|
selectivity(table, predicate) {
|
|
30
|
-
const
|
|
31
|
-
if (!stats)
|
|
32
|
-
return this.fallback.selectivity(table, predicate);
|
|
33
|
-
const sel = this.estimatePredicateSelectivity(stats, predicate);
|
|
38
|
+
const sel = this.statsOnlySelectivity(table, predicate);
|
|
34
39
|
if (sel !== undefined) {
|
|
35
40
|
log('Predicate selectivity for %s on %s: %f (catalog)', predicate.nodeType, table.name, sel);
|
|
36
41
|
return sel;
|
|
37
42
|
}
|
|
38
43
|
return this.fallback.selectivity(table, predicate);
|
|
39
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The catalog half of {@link selectivity}: undefined rather than a naive guess
|
|
47
|
+
* when the table carries no statistics, or when the predicate's shape puts it out
|
|
48
|
+
* of reach of the ones it has (`lower(cat) = 'x'` — {@link extractColumnFromPredicate}
|
|
49
|
+
* reads the column off a direct child of the comparison and finds none).
|
|
50
|
+
*/
|
|
51
|
+
statsOnlySelectivity(table, predicate) {
|
|
52
|
+
const stats = table.statistics;
|
|
53
|
+
if (!stats)
|
|
54
|
+
return undefined;
|
|
55
|
+
return this.estimatePredicateSelectivity(stats, predicate);
|
|
56
|
+
}
|
|
40
57
|
joinSelectivity(leftTable, rightTable, joinCondition) {
|
|
41
58
|
// For equi-joins, use 1/max(ndv_left, ndv_right) if we can extract columns
|
|
42
59
|
const colNames = extractEquiJoinColumns(joinCondition);
|
|
@@ -110,9 +127,130 @@ export class CatalogStatsProvider {
|
|
|
110
127
|
const colStats = table.statistics?.columnStats.get(columnName.toLowerCase());
|
|
111
128
|
return colStats?.distinctCount;
|
|
112
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Entry point for predicate selectivity: short-circuit the empty table, then
|
|
132
|
+
* walk the predicate's boolean structure.
|
|
133
|
+
*/
|
|
113
134
|
estimatePredicateSelectivity(stats, predicate) {
|
|
114
135
|
if (stats.rowCount === 0)
|
|
115
136
|
return 0;
|
|
137
|
+
return this.estimateNode(stats, predicate, 0);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Recurse over the boolean structure (AND / OR / NOT) of a predicate,
|
|
141
|
+
* delegating anything else to {@link estimateLeaf}.
|
|
142
|
+
*
|
|
143
|
+
* Returns undefined when nothing useful can be said, which lets `selectivity`
|
|
144
|
+
* fall through to the naive provider exactly as it did before this recursion
|
|
145
|
+
* existed.
|
|
146
|
+
*/
|
|
147
|
+
estimateNode(stats, node, depth) {
|
|
148
|
+
if (depth > MAX_BOOLEAN_DEPTH)
|
|
149
|
+
return undefined;
|
|
150
|
+
if (node.nodeType === 'BinaryOp') {
|
|
151
|
+
// Planner convention is uppercase 'AND' / 'OR' (see predicate-normalizer).
|
|
152
|
+
const op = node.expression.operator;
|
|
153
|
+
if (op === 'AND')
|
|
154
|
+
return this.estimateConjunction(stats, node, depth);
|
|
155
|
+
if (op === 'OR')
|
|
156
|
+
return this.estimateDisjunction(stats, node, depth);
|
|
157
|
+
}
|
|
158
|
+
if (node.nodeType === 'UnaryOp') {
|
|
159
|
+
// 'NOT' is boolean structure; the other unary operators ('IS NULL' etc.)
|
|
160
|
+
// are leaves and fall through to estimateLeaf below.
|
|
161
|
+
if (node.expression.operator === 'NOT') {
|
|
162
|
+
// Read the operand through getChildren() rather than `.operand`, matching
|
|
163
|
+
// how the rest of this file introspects nodes structurally.
|
|
164
|
+
const operand = node.getChildren()[0];
|
|
165
|
+
if (!operand)
|
|
166
|
+
return undefined;
|
|
167
|
+
const inner = this.estimateNode(stats, operand, depth + 1);
|
|
168
|
+
if (inner === undefined)
|
|
169
|
+
return undefined;
|
|
170
|
+
// NOTE: estimateConjunction's "unknown conjunct counts as 1.0" makes an AND
|
|
171
|
+
// estimate an UPPER bound, and negating flips that into a LOWER bound — so
|
|
172
|
+
// `not (a = 1 and lower(s) = 'x')` errs low where the AND path claims to err
|
|
173
|
+
// high. Bounded (the true value is between this and 1) and the direction only
|
|
174
|
+
// inverts under an explicit NOT, which the planner rarely leaves standing. If
|
|
175
|
+
// negated mixed-knowledge predicates ever drive a bad plan, track per-estimate
|
|
176
|
+
// bound direction instead of a bare number.
|
|
177
|
+
return 1 - inner;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return this.estimateLeaf(stats, node);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* AND: estimate each conjunct and combine the ones we could estimate.
|
|
184
|
+
*
|
|
185
|
+
* An unestimable conjunct is treated as selectivity 1.0 (claim no reduction)
|
|
186
|
+
* rather than handed to NaiveStatsProvider's flat 0.1. That number is
|
|
187
|
+
* fabricated, and multiplying it in biases the whole estimate downward;
|
|
188
|
+
* over-estimating surviving rows is the safer error direction for plan choice.
|
|
189
|
+
* Concretely `a = 1 and lower(b) = 'x'` now estimates 1/ndv(a) where it used to
|
|
190
|
+
* estimate 0.1 — a deliberate change, not a regression.
|
|
191
|
+
*
|
|
192
|
+
* If *every* conjunct is unknown we return undefined so the whole-predicate
|
|
193
|
+
* naive fallback in `selectivity()` still runs.
|
|
194
|
+
*/
|
|
195
|
+
estimateConjunction(stats, node, depth) {
|
|
196
|
+
const conjuncts = splitConjuncts(node);
|
|
197
|
+
// splitConjuncts only descends through real BinaryOpNode instances; if it
|
|
198
|
+
// handed back the node itself there is nothing to decompose.
|
|
199
|
+
if (conjuncts.length === 1 && conjuncts[0] === node)
|
|
200
|
+
return this.estimateLeaf(stats, node);
|
|
201
|
+
const known = [];
|
|
202
|
+
for (const conjunct of conjuncts) {
|
|
203
|
+
const sel = this.estimateNode(stats, conjunct, depth + 1);
|
|
204
|
+
if (sel !== undefined)
|
|
205
|
+
known.push(sel);
|
|
206
|
+
}
|
|
207
|
+
if (known.length === 0)
|
|
208
|
+
return undefined;
|
|
209
|
+
// NOTE: conjuncts on the *same* column (`a > 1 and a < 10`) are strongly
|
|
210
|
+
// anti-correlated and are not paired into a single range here. Exponential
|
|
211
|
+
// backoff damps the error (0.333 · √0.333 ≈ 0.19 instead of 0.11) but does
|
|
212
|
+
// not remove it; same-column range pairing would.
|
|
213
|
+
return this.floorCombined(stats, combineConjunctive(known), known.length);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* OR: estimate every disjunct, or give up.
|
|
217
|
+
*
|
|
218
|
+
* Unlike AND there is no safe default for an unknown disjunct — assuming 1.0
|
|
219
|
+
* would make the whole disjunction 1.0 (safe but useless), and assuming 0
|
|
220
|
+
* would silently drop a branch that may match everything. So a single unknown
|
|
221
|
+
* disjunct makes the whole OR unknown.
|
|
222
|
+
*/
|
|
223
|
+
estimateDisjunction(stats, node, depth) {
|
|
224
|
+
const disjuncts = splitDisjuncts(node);
|
|
225
|
+
// See estimateConjunction: nothing to decompose when the walk is a no-op.
|
|
226
|
+
if (disjuncts.length === 1 && disjuncts[0] === node)
|
|
227
|
+
return this.estimateLeaf(stats, node);
|
|
228
|
+
const sels = [];
|
|
229
|
+
for (const disjunct of disjuncts) {
|
|
230
|
+
const sel = this.estimateNode(stats, disjunct, depth + 1);
|
|
231
|
+
if (sel === undefined)
|
|
232
|
+
return undefined;
|
|
233
|
+
sels.push(sel);
|
|
234
|
+
}
|
|
235
|
+
if (sels.length === 0)
|
|
236
|
+
return undefined;
|
|
237
|
+
return this.floorCombined(stats, combineDisjunctive(sels), sels.length);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Never claim fewer than one surviving row once two or more selectivities were
|
|
241
|
+
* actually combined. Deliberately not applied to a single leaf estimate:
|
|
242
|
+
* `IS NULL` on a column with nullCount 0 legitimately returns 0 today, and
|
|
243
|
+
* `FilterNode.estimatedRows` already floors the row count at 1.
|
|
244
|
+
*/
|
|
245
|
+
floorCombined(stats, sel, combinedCount) {
|
|
246
|
+
if (combinedCount < 2)
|
|
247
|
+
return sel;
|
|
248
|
+
// rowCount === 0 short-circuits in estimatePredicateSelectivity, so the
|
|
249
|
+
// max() here only guards against a negative / absent count.
|
|
250
|
+
return Math.max(sel, 1 / Math.max(stats.rowCount, 1));
|
|
251
|
+
}
|
|
252
|
+
/** Estimate a single (non-boolean) comparison against column statistics. */
|
|
253
|
+
estimateLeaf(stats, predicate) {
|
|
116
254
|
// Try to extract column reference from the predicate for column-level estimation
|
|
117
255
|
const colInfo = extractColumnFromPredicate(predicate);
|
|
118
256
|
if (!colInfo)
|
|
@@ -192,6 +330,11 @@ export class CatalogStatsProvider {
|
|
|
192
330
|
// concrete node classes (BinaryOpNode, UnaryOpNode, etc.).
|
|
193
331
|
function extractColumnFromPredicate(predicate) {
|
|
194
332
|
// BinaryOp, In, Between, UnaryOp all typically have a column child
|
|
333
|
+
// NOTE: for a column-vs-column comparison on one table (`where x = y`) this
|
|
334
|
+
// picks the first ColumnReference and the caller finds no literal, so `=`
|
|
335
|
+
// yields 1/ndv(x) — wrong, since it models "x equals a constant" rather than
|
|
336
|
+
// "x equals another varying column". Pre-existing; fixing it needs a real
|
|
337
|
+
// two-sided comparison classifier.
|
|
195
338
|
const children = predicate.getChildren();
|
|
196
339
|
for (const child of children) {
|
|
197
340
|
if (child.nodeType === 'ColumnReference') {
|
|
@@ -219,7 +362,10 @@ function extractInListSize(predicate) {
|
|
|
219
362
|
const node = predicate;
|
|
220
363
|
if (Array.isArray(node.values))
|
|
221
364
|
return node.values.length;
|
|
222
|
-
// Some IN nodes store the list in children after the first (column) child
|
|
365
|
+
// Some IN nodes store the list in children after the first (column) child.
|
|
366
|
+
// NOTE: `x in (select …)` has no value list, so this falls to children.length-1
|
|
367
|
+
// === 1 and the caller reports 1/ndv — the estimate for a single equality
|
|
368
|
+
// rather than for the subquery's real cardinality. Pre-existing.
|
|
223
369
|
const children = predicate.getChildren();
|
|
224
370
|
if (children.length > 1)
|
|
225
371
|
return children.length - 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-stats.js","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"catalog-stats.js","sourceRoot":"","sources":["../../../../src/planner/stats/catalog-stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,21 @@ export interface StatsProvider {
|
|
|
21
21
|
* @returns Selectivity factor (0.0 to 1.0), or undefined if unknown
|
|
22
22
|
*/
|
|
23
23
|
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* Selectivity derived from REAL statistics only, with no heuristic fallback.
|
|
26
|
+
*
|
|
27
|
+
* `selectivity` always answers, substituting a fabricated per-nodeType guess when
|
|
28
|
+
* the catalog cannot say anything. Callers that must distinguish "the statistics
|
|
29
|
+
* say 0.25" from "nobody knows, here is 0.1" use this instead; undefined means the
|
|
30
|
+
* backing statistics could not answer. A provider that never fabricates may alias
|
|
31
|
+
* this to `selectivity`; one that only ever guesses should leave it unimplemented,
|
|
32
|
+
* which reads as "no real statistics".
|
|
33
|
+
*
|
|
34
|
+
* @param table Table schema
|
|
35
|
+
* @param predicate Predicate expression
|
|
36
|
+
* @returns Selectivity factor (0.0 to 1.0), or undefined if real statistics cannot answer
|
|
37
|
+
*/
|
|
38
|
+
statsOnlySelectivity?(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
24
39
|
/**
|
|
25
40
|
* Get join selectivity estimate
|
|
26
41
|
* @param leftTable Left table schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAElD;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAE/E;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAErH;;;;;OAKG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAE5E;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;CACxG;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADlB,gBAAgB,GAAE,MAAa,EAC/B,kBAAkB,GAAE,MAAY;IAMlD,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAQjD,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAO9E,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAWpH,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAU1E,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAQtG,OAAO,CAAC,4BAA4B;CAmBpC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,oBAA2B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,aAAa,CAWf"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAElD;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAE/E;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAEzF;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;IAErH;;;;;OAKG;IACH,cAAc,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAE5E;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS,CAAC;CACxG;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IAEtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADlB,gBAAgB,GAAE,MAAa,EAC/B,kBAAkB,GAAE,MAAY;IAMlD,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAQjD,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAO9E,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAWpH,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAU1E,gBAAgB,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,MAAM,GAAG,SAAS;IAQtG,OAAO,CAAC,4BAA4B;CAmBpC;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,oBAA2B,CAAC;AAE7D;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAClC,aAAa,CAWf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/planner/stats/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/planner/stats/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,CAAC;AAgE5C;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAEZ;IACA;IAFlB,YACkB,mBAA2B,IAAI,EAC/B,qBAA6B,GAAG;QADhC,qBAAgB,GAAhB,gBAAgB,CAAe;QAC/B,uBAAkB,GAAlB,kBAAkB,CAAc;QAEjD,GAAG,CAAC,wEAAwE,EAC3E,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,SAAS,CAAC,KAAkB;QAC3B,iEAAiE;QACjE,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAC9D,GAAG,CAAC,0CAA0C,EAC7C,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnE,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,KAAkB,EAAE,SAAyB;QACxD,4CAA4C;QAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;QACjE,GAAG,CAAC,kCAAkC,EAAE,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACzE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,eAAe,CAAC,SAAsB,EAAE,UAAuB,EAAE,cAA8B;QAC9F,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAEtE,yDAAyD;QACzD,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5D,GAAG,CAAC,wCAAwC,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,cAAc,CAAC,KAAkB,EAAE,UAAkB;QACpD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QAEjC,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1D,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvE,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,gBAAgB,CAAC,KAAkB,EAAE,SAAiB,EAAE,SAAyB;QAChF,wDAAwD;QACxD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC;QACtF,MAAM,gBAAgB,GAAG,eAAe,GAAG,GAAG,CAAC,CAAC,6BAA6B;QAC7E,GAAG,CAAC,qCAAqC,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QACzF,OAAO,gBAAgB,CAAC;IACzB,CAAC;IAEO,4BAA4B,CAAC,SAAyB;QAC7D,uCAAuC;QACvC,QAAQ,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC5B,KAAK,UAAU;gBACd,+CAA+C;gBAC/C,OAAO,GAAG,CAAC,CAAC,2BAA2B;YACxC,KAAK,IAAI;gBACR,OAAO,GAAG,CAAC,CAAC,aAAa;YAC1B,KAAK,SAAS;gBACb,OAAO,IAAI,CAAC,CAAC,gBAAgB;YAC9B,KAAK,MAAM;gBACV,OAAO,GAAG,CAAC,CAAC,mBAAmB;YAChC,KAAK,QAAQ,CAAC;YACd,KAAK,WAAW;gBACf,OAAO,GAAG,CAAC,CAAC,oCAAoC;YACjD;gBACC,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACjC,CAAC;IACF,CAAC;CACD;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE7D;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAClC,YAAkC,EAClC,cAAoC;IAEpC,OAAO,IAAI;QACV,SAAS,CAAC,KAAkB;YAC3B,OAAO,YAAY,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/E,CAAC;QAED,WAAW,CAAC,KAAkB,EAAE,SAAyB;YACxD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YAClD,OAAO,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC;KACD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selectivity combinators.
|
|
3
|
+
*
|
|
4
|
+
* Pure numeric helpers that fold a list of per-conjunct / per-disjunct
|
|
5
|
+
* selectivities into a single factor. No plan-node knowledge lives here — the
|
|
6
|
+
* caller ({@link CatalogStatsProvider}) walks the boolean structure and hands
|
|
7
|
+
* these functions plain numbers.
|
|
8
|
+
*
|
|
9
|
+
* ## Why exponential backoff rather than plain independence
|
|
10
|
+
*
|
|
11
|
+
* The textbook conjunction model assumes independent predicates and multiplies:
|
|
12
|
+
* `Πsᵢ`. That collapses fast — five conditions at 0.1 each give 1e-5, i.e. "no
|
|
13
|
+
* rows" for any realistic table. Real-world predicates are correlated far more
|
|
14
|
+
* often than not (`city = 'Seattle' and state = 'WA'`), so the plain product
|
|
15
|
+
* systematically *under*-estimates surviving rows and pushes the optimizer into
|
|
16
|
+
* pathological plans (nested loops over what is actually a large intermediate).
|
|
17
|
+
*
|
|
18
|
+
* Instead we sort ascending (most selective first) and damp each subsequent
|
|
19
|
+
* factor by taking successive square roots:
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* s₁ · s₂^(1/2) · s₃^(1/4) · s₄^(1/8)
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* This is the model SQL Server has used by default since 2014. It needs no
|
|
26
|
+
* correlation statistics, degrades gracefully as conjunct count grows, and is
|
|
27
|
+
* identical to plain independence for a single conjunct. Conjuncts past
|
|
28
|
+
* {@link BACKOFF_CONJUNCT_LIMIT} are dropped rather than multiplied in: they are
|
|
29
|
+
* the *least* selective ones, so their damped exponent would contribute almost
|
|
30
|
+
* nothing anyway.
|
|
31
|
+
*
|
|
32
|
+
* Disjunction uses straight independence (`1 - Π(1 - sᵢ)`), which errs toward
|
|
33
|
+
* over-estimating rows — the safe direction for plan choice.
|
|
34
|
+
*/
|
|
35
|
+
/** How many conjuncts participate in the damped product; the rest are dropped. */
|
|
36
|
+
export declare const BACKOFF_CONJUNCT_LIMIT = 4;
|
|
37
|
+
/**
|
|
38
|
+
* Combine AND-ed selectivities using exponential backoff (see file doc-comment).
|
|
39
|
+
*
|
|
40
|
+
* Inputs and result are clamped to [0, 1]; input order does not matter. An empty
|
|
41
|
+
* list is not expected — callers gate on a non-empty list — and returns 1 (the
|
|
42
|
+
* conjunctive identity: no reduction claimed).
|
|
43
|
+
*/
|
|
44
|
+
export declare function combineConjunctive(selectivities: readonly number[]): number;
|
|
45
|
+
/**
|
|
46
|
+
* Combine OR-ed selectivities assuming independence: `1 - Π(1 - sᵢ)`.
|
|
47
|
+
*
|
|
48
|
+
* Inputs and result are clamped to [0, 1]. An empty list is not expected —
|
|
49
|
+
* callers gate on a non-empty list — and returns 0 (the disjunctive identity:
|
|
50
|
+
* nothing survives).
|
|
51
|
+
*/
|
|
52
|
+
export declare function combineDisjunctive(selectivities: readonly number[]): number;
|
|
53
|
+
//# sourceMappingURL=selectivity-combine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectivity-combine.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/selectivity-combine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,kFAAkF;AAClF,eAAO,MAAM,sBAAsB,IAAI,CAAC;AAOxC;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAW3E;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQ3E"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selectivity combinators.
|
|
3
|
+
*
|
|
4
|
+
* Pure numeric helpers that fold a list of per-conjunct / per-disjunct
|
|
5
|
+
* selectivities into a single factor. No plan-node knowledge lives here — the
|
|
6
|
+
* caller ({@link CatalogStatsProvider}) walks the boolean structure and hands
|
|
7
|
+
* these functions plain numbers.
|
|
8
|
+
*
|
|
9
|
+
* ## Why exponential backoff rather than plain independence
|
|
10
|
+
*
|
|
11
|
+
* The textbook conjunction model assumes independent predicates and multiplies:
|
|
12
|
+
* `Πsᵢ`. That collapses fast — five conditions at 0.1 each give 1e-5, i.e. "no
|
|
13
|
+
* rows" for any realistic table. Real-world predicates are correlated far more
|
|
14
|
+
* often than not (`city = 'Seattle' and state = 'WA'`), so the plain product
|
|
15
|
+
* systematically *under*-estimates surviving rows and pushes the optimizer into
|
|
16
|
+
* pathological plans (nested loops over what is actually a large intermediate).
|
|
17
|
+
*
|
|
18
|
+
* Instead we sort ascending (most selective first) and damp each subsequent
|
|
19
|
+
* factor by taking successive square roots:
|
|
20
|
+
*
|
|
21
|
+
* ```
|
|
22
|
+
* s₁ · s₂^(1/2) · s₃^(1/4) · s₄^(1/8)
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* This is the model SQL Server has used by default since 2014. It needs no
|
|
26
|
+
* correlation statistics, degrades gracefully as conjunct count grows, and is
|
|
27
|
+
* identical to plain independence for a single conjunct. Conjuncts past
|
|
28
|
+
* {@link BACKOFF_CONJUNCT_LIMIT} are dropped rather than multiplied in: they are
|
|
29
|
+
* the *least* selective ones, so their damped exponent would contribute almost
|
|
30
|
+
* nothing anyway.
|
|
31
|
+
*
|
|
32
|
+
* Disjunction uses straight independence (`1 - Π(1 - sᵢ)`), which errs toward
|
|
33
|
+
* over-estimating rows — the safe direction for plan choice.
|
|
34
|
+
*/
|
|
35
|
+
/** How many conjuncts participate in the damped product; the rest are dropped. */
|
|
36
|
+
export const BACKOFF_CONJUNCT_LIMIT = 4;
|
|
37
|
+
/** Clamp a selectivity into the valid [0, 1] range. */
|
|
38
|
+
function clamp(selectivity) {
|
|
39
|
+
return Math.min(1, Math.max(0, selectivity));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Combine AND-ed selectivities using exponential backoff (see file doc-comment).
|
|
43
|
+
*
|
|
44
|
+
* Inputs and result are clamped to [0, 1]; input order does not matter. An empty
|
|
45
|
+
* list is not expected — callers gate on a non-empty list — and returns 1 (the
|
|
46
|
+
* conjunctive identity: no reduction claimed).
|
|
47
|
+
*/
|
|
48
|
+
export function combineConjunctive(selectivities) {
|
|
49
|
+
if (selectivities.length === 0)
|
|
50
|
+
return 1;
|
|
51
|
+
const sorted = selectivities.map(clamp).sort((a, b) => a - b);
|
|
52
|
+
const participating = sorted.slice(0, BACKOFF_CONJUNCT_LIMIT);
|
|
53
|
+
let result = 1;
|
|
54
|
+
for (let i = 0; i < participating.length; i++) {
|
|
55
|
+
result *= Math.pow(participating[i], 1 / Math.pow(2, i));
|
|
56
|
+
}
|
|
57
|
+
return clamp(result);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Combine OR-ed selectivities assuming independence: `1 - Π(1 - sᵢ)`.
|
|
61
|
+
*
|
|
62
|
+
* Inputs and result are clamped to [0, 1]. An empty list is not expected —
|
|
63
|
+
* callers gate on a non-empty list — and returns 0 (the disjunctive identity:
|
|
64
|
+
* nothing survives).
|
|
65
|
+
*/
|
|
66
|
+
export function combineDisjunctive(selectivities) {
|
|
67
|
+
if (selectivities.length === 0)
|
|
68
|
+
return 0;
|
|
69
|
+
let complement = 1;
|
|
70
|
+
for (const s of selectivities) {
|
|
71
|
+
complement *= 1 - clamp(s);
|
|
72
|
+
}
|
|
73
|
+
return clamp(1 - complement);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=selectivity-combine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectivity-combine.js","sourceRoot":"","sources":["../../../../src/planner/stats/selectivity-combine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAExC,uDAAuD;AACvD,SAAS,KAAK,CAAC,WAAmB;IACjC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAgC;IAClE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEzC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;IAE9D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAgC;IAClE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEzC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC/B,UAAU,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column origin attribution.
|
|
3
|
+
*
|
|
4
|
+
* Maps every output attribute id reachable under a relational subtree back to the
|
|
5
|
+
* base-table column that minted it. `rule-filter-selectivity` uses this to route
|
|
6
|
+
* each conjunct of a filter-over-join predicate to the statistics of the table its
|
|
7
|
+
* columns actually come from, instead of declining the whole filter because its
|
|
8
|
+
* source spans more than one table.
|
|
9
|
+
*
|
|
10
|
+
* ## Identity — not schema — distinguishes the two sides of a self-join
|
|
11
|
+
*
|
|
12
|
+
* `ColumnOrigin.ref` is the `TableReferenceNode` instance that produced the
|
|
13
|
+
* attribute. `from t a join t b` yields two distinct TableReferenceNodes sharing
|
|
14
|
+
* ONE `TableSchema` object, so a caller asking "how many relations does this
|
|
15
|
+
* expression touch?" must key on `ref` identity. Keying on `table` collapses the
|
|
16
|
+
* two sides and mis-classifies `a.age > b.age` as a single-table predicate
|
|
17
|
+
* comparing a column to a constant.
|
|
18
|
+
*
|
|
19
|
+
* ## Attributes minted above a base table are deliberately absent
|
|
20
|
+
*
|
|
21
|
+
* Computed projections, aggregate outputs, `values` rows and join existence flags
|
|
22
|
+
* never appear in the map. A predicate over one of them has no base-table column
|
|
23
|
+
* statistics to consult, so the caller must treat it as unknown rather than
|
|
24
|
+
* mis-attribute it by column name.
|
|
25
|
+
*
|
|
26
|
+
* ## Row-merging operators are opaque
|
|
27
|
+
*
|
|
28
|
+
* A set operation and a recursive CTE both *forward* their left / base-case branch's
|
|
29
|
+
* attribute ids (see `analysis/attribute-provenance.ts`), but the rows behind those
|
|
30
|
+
* ids come from every branch. `union all` of a 4-distinct-value column with a
|
|
31
|
+
* 1000-distinct-value one publishes the left branch's id while carrying both
|
|
32
|
+
* distributions, so attributing it to the left base table alone would hand the
|
|
33
|
+
* caller one branch's statistics as if they described the whole relation. The walk
|
|
34
|
+
* therefore stops at such a node and records nothing beneath it — a conjunct over a
|
|
35
|
+
* union reads as unknown, exactly like one over a computed projection.
|
|
36
|
+
*/
|
|
37
|
+
import { TableReferenceNode } from '../nodes/reference.js';
|
|
38
|
+
import type { RelationalPlanNode } from '../nodes/plan-node.js';
|
|
39
|
+
import type { TableSchema } from '../../schema/table.js';
|
|
40
|
+
/** Where a single attribute came from: a column of a specific base-table reference. */
|
|
41
|
+
export interface ColumnOrigin {
|
|
42
|
+
/** The TableReferenceNode that minted this attribute — identity is significant. */
|
|
43
|
+
readonly ref: TableReferenceNode;
|
|
44
|
+
readonly table: TableSchema;
|
|
45
|
+
readonly columnIndex: number;
|
|
46
|
+
readonly columnName: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Attribute id → originating base-table column, for every base column reachable
|
|
50
|
+
* under `node` via `getRelations()`.
|
|
51
|
+
*
|
|
52
|
+
* The walk descends relations only, so scalar subqueries hanging off a join
|
|
53
|
+
* condition or a filter predicate are NOT traversed — their columns stay out of
|
|
54
|
+
* the map and any conjunct referencing them reads as unknown. It also stops at a
|
|
55
|
+
* row-merging operator (see the file doc-comment).
|
|
56
|
+
*/
|
|
57
|
+
export declare function collectColumnOrigins(node: RelationalPlanNode): Map<number, ColumnOrigin>;
|
|
58
|
+
//# sourceMappingURL=column-origins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-origins.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/column-origins.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAoBxF"}
|