@quereus/quereus 4.4.1 → 4.6.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 +5 -4
- package/dist/src/core/database-events.d.ts +99 -1
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +219 -3
- package/dist/src/core/database-events.js.map +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/core/database-materialized-views-plan-builders.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.js +29 -2
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +9 -0
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +9 -0
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database.d.ts +7 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +20 -5
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -11
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +15 -85
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/conversion.d.ts.map +1 -1
- package/dist/src/func/builtins/conversion.js +10 -9
- package/dist/src/func/builtins/conversion.js.map +1 -1
- package/dist/src/func/builtins/datetime.d.ts.map +1 -1
- package/dist/src/func/builtins/datetime.js +28 -10
- package/dist/src/func/builtins/datetime.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +23 -17
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.js +2 -2
- package/dist/src/func/builtins/mutation.js.map +1 -1
- package/dist/src/func/builtins/return-types.d.ts +327 -0
- package/dist/src/func/builtins/return-types.d.ts.map +1 -0
- package/dist/src/func/builtins/return-types.js +43 -0
- package/dist/src/func/builtins/return-types.js.map +1 -0
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +193 -37
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +11 -3
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.d.ts.map +1 -1
- package/dist/src/func/builtins/string.js +4 -2
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/builtins/timespan.d.ts +3 -0
- package/dist/src/func/builtins/timespan.d.ts.map +1 -1
- package/dist/src/func/builtins/timespan.js +15 -11
- package/dist/src/func/builtins/timespan.js.map +1 -1
- package/dist/src/func/registration.d.ts +39 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +236 -41
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +14 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +14 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/parser.d.ts +46 -0
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +160 -44
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +37 -4
- package/dist/src/planner/analysis/check-extraction.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 +41 -13
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.js +51 -14
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts +0 -7
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +59 -59
- package/dist/src/planner/analysis/constraint-extractor.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/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +65 -27
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/coercion.d.ts +54 -0
- package/dist/src/planner/building/coercion.d.ts.map +1 -0
- package/dist/src/planner/building/coercion.js +88 -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 +17 -0
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +23 -115
- 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 +13 -0
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +53 -2
- package/dist/src/planner/building/select-aggregates.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/building/select-context.d.ts +7 -0
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +10 -40
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select.d.ts +37 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +112 -51
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/cost/conjunct-cost.d.ts +82 -0
- package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -0
- package/dist/src/planner/cost/conjunct-cost.js +107 -0
- package/dist/src/planner/cost/conjunct-cost.js.map +1 -0
- package/dist/src/planner/cost/index.d.ts +10 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +15 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- 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/aggregate-node.d.ts +6 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +10 -2
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +2 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +24 -8
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.js +4 -1
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.js +2 -1
- package/dist/src/planner/nodes/asserted-keys-node.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 +17 -7
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +2 -1
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts +6 -0
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +10 -2
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +5 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +13 -6
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +12 -5
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +6 -0
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +10 -2
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +25 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +38 -10
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +78 -0
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +73 -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 +141 -0
- package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +2 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts +6 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +10 -2
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- 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 +21 -8
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts +5 -0
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +9 -2
- package/dist/src/planner/nodes/ordinal-slice-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/plan-node.d.ts +24 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +2 -1
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +3 -2
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +2 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +5 -18
- package/dist/src/planner/nodes/scalar.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/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +3 -1
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +6 -0
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +10 -2
- package/dist/src/planner/nodes/stream-aggregate.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 +18 -2
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +8 -0
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +1 -1
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +3 -1
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +9 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +126 -6
- 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 +343 -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 +46 -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 +54 -13
- package/dist/src/planner/rules/access/rule-select-access-path.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 +9 -0
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +6 -4
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +49 -49
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +54 -58
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts +49 -0
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -0
- package/dist/src/planner/rules/join/index-nested-loop.js +285 -0
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +8 -8
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +10 -4
- 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 +97 -29
- 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 +15 -5
- 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 +43 -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 +119 -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 +44 -3
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +142 -18
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +73 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +205 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +14 -11
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +21 -85
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +10 -2
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +20 -2
- 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/access-leaf.d.ts +39 -0
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -0
- package/dist/src/planner/rules/shared/access-leaf.js +79 -0
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -0
- 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-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +18 -8
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +3 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +27 -10
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.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 +243 -70
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +17 -7
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +124 -87
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/scopes/aliased.d.ts.map +1 -1
- package/dist/src/planner/scopes/aliased.js +6 -0
- package/dist/src/planner/scopes/aliased.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts +87 -4
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +250 -28
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/stats/conjunct-selectivity.d.ts +48 -0
- package/dist/src/planner/stats/conjunct-selectivity.d.ts.map +1 -0
- package/dist/src/planner/stats/conjunct-selectivity.js +168 -0
- package/dist/src/planner/stats/conjunct-selectivity.js.map +1 -0
- package/dist/src/planner/stats/index.d.ts +36 -2
- 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/stats/table-cardinality.d.ts +28 -0
- package/dist/src/planner/stats/table-cardinality.d.ts.map +1 -0
- package/dist/src/planner/stats/table-cardinality.js +29 -0
- package/dist/src/planner/stats/table-cardinality.js.map +1 -0
- package/dist/src/planner/util/column-origins.d.ts +79 -0
- package/dist/src/planner/util/column-origins.d.ts.map +1 -0
- package/dist/src/planner/util/column-origins.js +150 -0
- package/dist/src/planner/util/column-origins.js.map +1 -0
- package/dist/src/planner/util/fd-utils.d.ts +32 -8
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +46 -9
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +56 -17
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +82 -21
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +20 -2
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +37 -3
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/row-estimates.d.ts +28 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -0
- package/dist/src/planner/util/row-estimates.js +40 -0
- package/dist/src/planner/util/row-estimates.js.map +1 -0
- package/dist/src/planner/util/row-population.d.ts +42 -0
- package/dist/src/planner/util/row-population.d.ts.map +1 -0
- package/dist/src/planner/util/row-population.js +71 -0
- package/dist/src/planner/util/row-population.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/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +39 -1
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +4 -4
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.d.ts +42 -0
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -0
- package/dist/src/runtime/emit/alter-schema-event.js +28 -0
- package/dist/src/runtime/emit/alter-schema-event.js.map +1 -0
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +386 -154
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +35 -3
- package/dist/src/runtime/emit/analyze.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/cast.d.ts.map +1 -1
- package/dist/src/runtime/emit/cast.js +4 -19
- package/dist/src/runtime/emit/cast.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 +90 -50
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-index.js +4 -3
- package/dist/src/runtime/emit/drop-index.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/hash-aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/hash-aggregate.js +2 -2
- package/dist/src/runtime/emit/hash-aggregate.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 +8 -46
- 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 +149 -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 +70 -0
- package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -0
- package/dist/src/runtime/emit/operand-comparator.js +93 -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/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +30 -0
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +153 -52
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/window.js +36 -23
- package/dist/src/runtime/emit/window.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/catalog-persistability.d.ts +19 -16
- package/dist/src/schema/catalog-persistability.d.ts.map +1 -1
- package/dist/src/schema/catalog-persistability.js +76 -20
- package/dist/src/schema/catalog-persistability.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +67 -2
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +194 -3
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column.d.ts +26 -3
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +19 -6
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/function.d.ts +40 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +10 -2
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +84 -7
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +153 -53
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +104 -28
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +149 -1
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +248 -1
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +5 -3
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +5 -3
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/types/builtin-types.d.ts +16 -0
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +76 -12
- package/dist/src/types/builtin-types.js.map +1 -1
- package/dist/src/types/cast-semantics.d.ts +42 -0
- package/dist/src/types/cast-semantics.d.ts.map +1 -1
- package/dist/src/types/cast-semantics.js +64 -0
- package/dist/src/types/cast-semantics.js.map +1 -1
- package/dist/src/types/comparison-coercion.d.ts +101 -0
- package/dist/src/types/comparison-coercion.d.ts.map +1 -0
- package/dist/src/types/comparison-coercion.js +162 -0
- package/dist/src/types/comparison-coercion.js.map +1 -0
- package/dist/src/types/index.d.ts +2 -2
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +2 -2
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +7 -0
- package/dist/src/types/logical-type.d.ts.map +1 -1
- package/dist/src/types/logical-type.js.map +1 -1
- package/dist/src/types/validation.d.ts +56 -0
- package/dist/src/types/validation.d.ts.map +1 -1
- package/dist/src/types/validation.js +68 -0
- package/dist/src/types/validation.js.map +1 -1
- package/dist/src/util/coercion.d.ts +8 -0
- package/dist/src/util/coercion.d.ts.map +1 -1
- package/dist/src/util/coercion.js +8 -0
- package/dist/src/util/coercion.js.map +1 -1
- package/dist/src/util/comparison.d.ts +41 -3
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +52 -5
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/key-serializer.d.ts +46 -0
- package/dist/src/util/key-serializer.d.ts.map +1 -1
- package/dist/src/util/key-serializer.js +47 -0
- package/dist/src/util/key-serializer.js.map +1 -1
- package/dist/src/util/value-set.d.ts +21 -0
- package/dist/src/util/value-set.d.ts.map +1 -0
- package/dist/src/util/value-set.js +22 -0
- package/dist/src/util/value-set.js.map +1 -0
- 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/capabilities.d.ts +1 -1
- package/dist/src/vtab/events.d.ts +5 -1
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/memory/layer/alter-column.d.ts +147 -0
- package/dist/src/vtab/memory/layer/alter-column.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/alter-column.js +214 -0
- package/dist/src/vtab/memory/layer/alter-column.js.map +1 -0
- 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 +10 -7
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +2 -2
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +232 -39
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +657 -519
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +32 -5
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +111 -16
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +154 -51
- 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 +53 -40
- 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 +15 -3
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/module.d.ts +51 -21
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +10 -2
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +3 -3
|
@@ -4,8 +4,24 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { ScalarPlanNode } from '../nodes/plan-node.js';
|
|
6
6
|
import type { TableSchema } from '../../schema/table.js';
|
|
7
|
+
/**
|
|
8
|
+
* Resolves the attribute id of a column reference appearing in a predicate to the
|
|
9
|
+
* name of the base-table column whose statistics describe it.
|
|
10
|
+
*
|
|
11
|
+
* Returns undefined when the attribute was minted above the base table (a computed
|
|
12
|
+
* projection, an aggregate or window output, a set-operation output) — such a column
|
|
13
|
+
* has no base-table statistics, whatever it happens to be named.
|
|
14
|
+
*/
|
|
15
|
+
export type ColumnStatsResolver = (attributeId: number) => string | undefined;
|
|
7
16
|
/**
|
|
8
17
|
* Statistics provider interface for optimizer
|
|
18
|
+
*
|
|
19
|
+
* The `resolve` parameter on the selectivity family identifies a predicate's columns
|
|
20
|
+
* by attribute identity rather than by the name in their AST. A caller holding a plan
|
|
21
|
+
* tree MUST pass one: without it a provider falls back to the syntactic name, and a
|
|
22
|
+
* computed column aliased to a base column's name silently borrows that column's
|
|
23
|
+
* statistics. It stays optional only for callers with no plan context (direct unit
|
|
24
|
+
* tests over hand-built nodes).
|
|
9
25
|
*/
|
|
10
26
|
export interface StatsProvider {
|
|
11
27
|
/**
|
|
@@ -18,17 +34,35 @@ export interface StatsProvider {
|
|
|
18
34
|
* Get selectivity estimate for a predicate on a table
|
|
19
35
|
* @param table Table schema
|
|
20
36
|
* @param predicate Predicate expression
|
|
37
|
+
* @param resolve Attribute id → base-column name; see {@link ColumnStatsResolver}
|
|
21
38
|
* @returns Selectivity factor (0.0 to 1.0), or undefined if unknown
|
|
22
39
|
*/
|
|
23
|
-
selectivity(table: TableSchema, predicate: ScalarPlanNode): number | undefined;
|
|
40
|
+
selectivity(table: TableSchema, predicate: ScalarPlanNode, resolve?: ColumnStatsResolver): number | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Selectivity derived from REAL statistics only, with no heuristic fallback.
|
|
43
|
+
*
|
|
44
|
+
* `selectivity` always answers, substituting a fabricated per-nodeType guess when
|
|
45
|
+
* the catalog cannot say anything. Callers that must distinguish "the statistics
|
|
46
|
+
* say 0.25" from "nobody knows, here is 0.1" use this instead; undefined means the
|
|
47
|
+
* backing statistics could not answer. A provider that never fabricates may alias
|
|
48
|
+
* this to `selectivity`; one that only ever guesses should leave it unimplemented,
|
|
49
|
+
* which reads as "no real statistics".
|
|
50
|
+
*
|
|
51
|
+
* @param table Table schema
|
|
52
|
+
* @param predicate Predicate expression
|
|
53
|
+
* @param resolve Attribute id → base-column name; see {@link ColumnStatsResolver}
|
|
54
|
+
* @returns Selectivity factor (0.0 to 1.0), or undefined if real statistics cannot answer
|
|
55
|
+
*/
|
|
56
|
+
statsOnlySelectivity?(table: TableSchema, predicate: ScalarPlanNode, resolve?: ColumnStatsResolver): number | undefined;
|
|
24
57
|
/**
|
|
25
58
|
* Get join selectivity estimate
|
|
26
59
|
* @param leftTable Left table schema
|
|
27
60
|
* @param rightTable Right table schema
|
|
28
61
|
* @param joinCondition Join condition
|
|
62
|
+
* @param resolve Attribute id → base-column name; see {@link ColumnStatsResolver}
|
|
29
63
|
* @returns Join selectivity factor, or undefined if unknown
|
|
30
64
|
*/
|
|
31
|
-
joinSelectivity?(leftTable: TableSchema, rightTable: TableSchema, joinCondition: ScalarPlanNode): number | undefined;
|
|
65
|
+
joinSelectivity?(leftTable: TableSchema, rightTable: TableSchema, joinCondition: ScalarPlanNode, resolve?: ColumnStatsResolver): number | undefined;
|
|
32
66
|
/**
|
|
33
67
|
* Get number of distinct values for a column
|
|
34
68
|
* @param table 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
|
|
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;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;AAE9E;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC7B;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAElD;;;;;;OAMG;IACH,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;IAE9G;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;IAExH;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,GAAG,SAAS,CAAC;IAEpJ;;;;;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":"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"}
|
|
@@ -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,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base-table row-count helper.
|
|
3
|
+
*
|
|
4
|
+
* Statistics-first: prefer the `ANALYZE`-collected `rowCount` over the static
|
|
5
|
+
* `TableSchema.estimatedRows` field (which `SchemaManager` hardcodes to 0 at
|
|
6
|
+
* CREATE TABLE and never updates). `undefined` means "nobody knows" and must
|
|
7
|
+
* stay `undefined` — callers apply their own fallback (e.g. NaiveStatsProvider's
|
|
8
|
+
* default of 1000); folding that default in here would change every
|
|
9
|
+
* un-analyzed table's cardinality.
|
|
10
|
+
*
|
|
11
|
+
* `TableReferenceNode.estimatedRows` and `CatalogStatsProvider.tableRows` both
|
|
12
|
+
* call this so the logical/physical estimate and the stats-provider estimate
|
|
13
|
+
* cannot drift apart.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: `rowCount` is a snapshot from the last `ANALYZE` — rows written
|
|
16
|
+
* afterwards are invisible until the next one.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: a real 0 (analyzed, empty table) is distinct from `undefined`, but the
|
|
19
|
+
* `estimatedRows || default` spellings in `rule-select-access-path`,
|
|
20
|
+
* `rule-grow-retrieve` and `IndexSeekNode.computePhysical` collapse the two and
|
|
21
|
+
* substitute their default — so an analyzed empty table reaches
|
|
22
|
+
* `getBestAccessPlan` as "unknown" (1000) while a SeqScan over it reports 0.
|
|
23
|
+
* Harmless today (any plan over 0 rows is cheap); switch those to `??` if an
|
|
24
|
+
* empty-table plan ever costs out wrong.
|
|
25
|
+
*/
|
|
26
|
+
import type { TableSchema } from '../../schema/table.js';
|
|
27
|
+
export declare function catalogRowCount(table: TableSchema): number | undefined;
|
|
28
|
+
//# sourceMappingURL=table-cardinality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-cardinality.d.ts","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAEtE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared base-table row-count helper.
|
|
3
|
+
*
|
|
4
|
+
* Statistics-first: prefer the `ANALYZE`-collected `rowCount` over the static
|
|
5
|
+
* `TableSchema.estimatedRows` field (which `SchemaManager` hardcodes to 0 at
|
|
6
|
+
* CREATE TABLE and never updates). `undefined` means "nobody knows" and must
|
|
7
|
+
* stay `undefined` — callers apply their own fallback (e.g. NaiveStatsProvider's
|
|
8
|
+
* default of 1000); folding that default in here would change every
|
|
9
|
+
* un-analyzed table's cardinality.
|
|
10
|
+
*
|
|
11
|
+
* `TableReferenceNode.estimatedRows` and `CatalogStatsProvider.tableRows` both
|
|
12
|
+
* call this so the logical/physical estimate and the stats-provider estimate
|
|
13
|
+
* cannot drift apart.
|
|
14
|
+
*
|
|
15
|
+
* NOTE: `rowCount` is a snapshot from the last `ANALYZE` — rows written
|
|
16
|
+
* afterwards are invisible until the next one.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: a real 0 (analyzed, empty table) is distinct from `undefined`, but the
|
|
19
|
+
* `estimatedRows || default` spellings in `rule-select-access-path`,
|
|
20
|
+
* `rule-grow-retrieve` and `IndexSeekNode.computePhysical` collapse the two and
|
|
21
|
+
* substitute their default — so an analyzed empty table reaches
|
|
22
|
+
* `getBestAccessPlan` as "unknown" (1000) while a SeqScan over it reports 0.
|
|
23
|
+
* Harmless today (any plan over 0 rows is cheap); switch those to `??` if an
|
|
24
|
+
* empty-table plan ever costs out wrong.
|
|
25
|
+
*/
|
|
26
|
+
export function catalogRowCount(table) {
|
|
27
|
+
return table.statistics?.rowCount ?? table.estimatedRows;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=table-cardinality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-cardinality.js","sourceRoot":"","sources":["../../../../src/planner/stats/table-cardinality.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,MAAM,UAAU,eAAe,CAAC,KAAkB;IACjD,OAAO,KAAK,CAAC,UAAU,EAAE,QAAQ,IAAI,KAAK,CAAC,aAAa,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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.relation` is an opaque token standing for ONE instance of a relation
|
|
13
|
+
* in the plan. `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 `relation` 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
|
+
* `rule-async-gather-union-all` rewrites a unionAll set operation into an
|
|
38
|
+
* `AsyncGatherNode` that forwards the same ids, so `isRowMerging` recognises that
|
|
39
|
+
* gather too — see `row-population.ts`.
|
|
40
|
+
*
|
|
41
|
+
* ## A CTE reference republishes its body's columns under its own relation instance
|
|
42
|
+
*
|
|
43
|
+
* `CTEReferenceNode` mints FRESH attribute ids for every column it republishes
|
|
44
|
+
* (`cte-reference-node.ts`), so the walk cannot simply descend through it: nothing
|
|
45
|
+
* above would land in the map. It instead maps the body's origins positionally onto
|
|
46
|
+
* the reference's own ids — but under a relation token minted PER REFERENCE, because
|
|
47
|
+
* two references to one `with` clause share a single body subtree. Pairing them with
|
|
48
|
+
* the body's own relation tokens would make both arms of a CTE self-join the same
|
|
49
|
+
* relation, and `rule-filter-selectivity` would read `a.qty > b.qty` as a
|
|
50
|
+
* single-relation predicate comparing a column to a constant.
|
|
51
|
+
*/
|
|
52
|
+
import type { RelationalPlanNode } from '../nodes/plan-node.js';
|
|
53
|
+
import type { TableSchema } from '../../schema/table.js';
|
|
54
|
+
/**
|
|
55
|
+
* Identity of one *instance* of a relation in the plan — compared by reference and
|
|
56
|
+
* never dereferenced. A `TableReferenceNode` is its own instance; a CTE reference
|
|
57
|
+
* mints one per (reference, underlying relation) pair so that two references to the
|
|
58
|
+
* same `with` clause stay distinguishable.
|
|
59
|
+
*/
|
|
60
|
+
export type RelationInstance = object;
|
|
61
|
+
/** Where a single attribute came from: a column of a specific relation instance. */
|
|
62
|
+
export interface ColumnOrigin {
|
|
63
|
+
/** The relation instance that published this attribute — identity is significant. */
|
|
64
|
+
readonly relation: RelationInstance;
|
|
65
|
+
readonly table: TableSchema;
|
|
66
|
+
readonly columnIndex: number;
|
|
67
|
+
readonly columnName: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Attribute id → originating base-table column, for every base column reachable
|
|
71
|
+
* under `node` via `getRelations()`.
|
|
72
|
+
*
|
|
73
|
+
* The walk descends relations only, so scalar subqueries hanging off a join
|
|
74
|
+
* condition or a filter predicate are NOT traversed — their columns stay out of
|
|
75
|
+
* the map and any conjunct referencing them reads as unknown. It also stops at a
|
|
76
|
+
* row-merging operator and at a CTE reference (see the file doc-comment).
|
|
77
|
+
*/
|
|
78
|
+
export declare function collectColumnOrigins(node: RelationalPlanNode): Map<number, ColumnOrigin>;
|
|
79
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAKH,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEtC,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAKD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAExF"}
|
|
@@ -0,0 +1,150 @@
|
|
|
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.relation` is an opaque token standing for ONE instance of a relation
|
|
13
|
+
* in the plan. `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 `relation` 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
|
+
* `rule-async-gather-union-all` rewrites a unionAll set operation into an
|
|
38
|
+
* `AsyncGatherNode` that forwards the same ids, so `isRowMerging` recognises that
|
|
39
|
+
* gather too — see `row-population.ts`.
|
|
40
|
+
*
|
|
41
|
+
* ## A CTE reference republishes its body's columns under its own relation instance
|
|
42
|
+
*
|
|
43
|
+
* `CTEReferenceNode` mints FRESH attribute ids for every column it republishes
|
|
44
|
+
* (`cte-reference-node.ts`), so the walk cannot simply descend through it: nothing
|
|
45
|
+
* above would land in the map. It instead maps the body's origins positionally onto
|
|
46
|
+
* the reference's own ids — but under a relation token minted PER REFERENCE, because
|
|
47
|
+
* two references to one `with` clause share a single body subtree. Pairing them with
|
|
48
|
+
* the body's own relation tokens would make both arms of a CTE self-join the same
|
|
49
|
+
* relation, and `rule-filter-selectivity` would read `a.qty > b.qty` as a
|
|
50
|
+
* single-relation predicate comparing a column to a constant.
|
|
51
|
+
*/
|
|
52
|
+
import { TableReferenceNode } from '../nodes/reference.js';
|
|
53
|
+
import { CTEReferenceNode } from '../nodes/cte-reference-node.js';
|
|
54
|
+
import { isRowMerging } from './row-population.js';
|
|
55
|
+
/**
|
|
56
|
+
* Attribute id → originating base-table column, for every base column reachable
|
|
57
|
+
* under `node` via `getRelations()`.
|
|
58
|
+
*
|
|
59
|
+
* The walk descends relations only, so scalar subqueries hanging off a join
|
|
60
|
+
* condition or a filter predicate are NOT traversed — their columns stay out of
|
|
61
|
+
* the map and any conjunct referencing them reads as unknown. It also stops at a
|
|
62
|
+
* row-merging operator and at a CTE reference (see the file doc-comment).
|
|
63
|
+
*/
|
|
64
|
+
export function collectColumnOrigins(node) {
|
|
65
|
+
return collect(node, new Map());
|
|
66
|
+
}
|
|
67
|
+
function collect(node, bodies) {
|
|
68
|
+
const origins = new Map();
|
|
69
|
+
// Plan trees are DAGs (a CTE instance can be shared), so dedupe by identity.
|
|
70
|
+
const visited = new Set();
|
|
71
|
+
const stack = [node];
|
|
72
|
+
while (stack.length > 0) {
|
|
73
|
+
const n = stack.pop();
|
|
74
|
+
if (visited.has(n))
|
|
75
|
+
continue;
|
|
76
|
+
visited.add(n);
|
|
77
|
+
if (n instanceof TableReferenceNode) {
|
|
78
|
+
addBaseColumns(n, origins);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (n instanceof CTEReferenceNode) {
|
|
82
|
+
// Deliberately NOT descended: the body publishes ids this node does not
|
|
83
|
+
// expose, and the body may be shared with a sibling reference.
|
|
84
|
+
addCTEColumns(n, origins, bodies);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (isRowMerging(n))
|
|
88
|
+
continue;
|
|
89
|
+
for (const rel of n.getRelations())
|
|
90
|
+
stack.push(rel);
|
|
91
|
+
}
|
|
92
|
+
return origins;
|
|
93
|
+
}
|
|
94
|
+
/** Zip a table reference's attributes with its schema columns (1:1 by construction). */
|
|
95
|
+
function addBaseColumns(ref, out) {
|
|
96
|
+
// TableReferenceNode builds its attributes by mapping `tableSchema.columns`
|
|
97
|
+
// positionally (see reference.ts), so index i describes the same column in both
|
|
98
|
+
// lists — the same zip `computePhysical` uses to seed update lineage.
|
|
99
|
+
const attrs = ref.getAttributes();
|
|
100
|
+
ref.tableSchema.columns.forEach((col, i) => {
|
|
101
|
+
const attr = attrs[i];
|
|
102
|
+
if (!attr)
|
|
103
|
+
return;
|
|
104
|
+
out.set(attr.id, { relation: ref, table: ref.tableSchema, columnIndex: i, columnName: col.name });
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Re-publish a CTE body's origins under this reference's own attribute ids and its
|
|
109
|
+
* own relation instances.
|
|
110
|
+
*
|
|
111
|
+
* `CTEReferenceNode.buildAttributes` maps `CTENode.getAttributes()` one for one and
|
|
112
|
+
* `CTENode` forwards its source's attribute ids verbatim, so index i names the same
|
|
113
|
+
* column on both sides. Columns the body computed (or could not attribute) simply
|
|
114
|
+
* have no entry, exactly as for the equivalent inline subquery.
|
|
115
|
+
*/
|
|
116
|
+
function addCTEColumns(ref, out, bodies) {
|
|
117
|
+
const body = ref.source;
|
|
118
|
+
// A recursive CTE's rows come from its base case AND its recursive case, so no
|
|
119
|
+
// base-table column describes them — same reasoning as a set operation.
|
|
120
|
+
if (isRowMerging(body))
|
|
121
|
+
return;
|
|
122
|
+
const bodyOrigins = bodyOriginsOf(body, bodies);
|
|
123
|
+
if (bodyOrigins.size === 0)
|
|
124
|
+
return;
|
|
125
|
+
// One fresh instance per underlying relation, minted for THIS reference: two
|
|
126
|
+
// references to one CTE must never share an instance.
|
|
127
|
+
const instances = new Map();
|
|
128
|
+
const bodyAttrs = body.getAttributes();
|
|
129
|
+
ref.getAttributes().forEach((attr, i) => {
|
|
130
|
+
const bodyAttr = bodyAttrs[i];
|
|
131
|
+
const origin = bodyAttr && bodyOrigins.get(bodyAttr.id);
|
|
132
|
+
if (!origin)
|
|
133
|
+
return;
|
|
134
|
+
let instance = instances.get(origin.relation);
|
|
135
|
+
if (!instance) {
|
|
136
|
+
instance = {};
|
|
137
|
+
instances.set(origin.relation, instance);
|
|
138
|
+
}
|
|
139
|
+
out.set(attr.id, { ...origin, relation: instance });
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
function bodyOriginsOf(body, bodies) {
|
|
143
|
+
const cached = bodies.get(body);
|
|
144
|
+
if (cached)
|
|
145
|
+
return cached;
|
|
146
|
+
const computed = collect(body, bodies);
|
|
147
|
+
bodies.set(body, computed);
|
|
148
|
+
return computed;
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=column-origins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-origins.js","sourceRoot":"","sources":["../../../../src/planner/util/column-origins.ts"],"names":[],"mappings":"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"}
|
|
@@ -328,18 +328,42 @@ export interface EqualityFds {
|
|
|
328
328
|
*
|
|
329
329
|
* Non-equality conjuncts contribute nothing.
|
|
330
330
|
*
|
|
331
|
-
* **Collation gate.** Every extracted fact is a VALUE-level claim
|
|
332
|
-
* column has one value across rows; `col1 = col2` rows are
|
|
333
|
-
* conjunct only contributes when its comparison is
|
|
334
|
-
* (`isValueDiscriminatingEquality`): for textual operands
|
|
335
|
-
* comparison collation must be BINARY. A NOCASE/RTRIM comparison —
|
|
336
|
-
* `COLLATE` wrapper on either side or a non-BINARY declared column
|
|
337
|
-
* passes value-DIFFERENT rows ('Bob' = 'bob' NOCASE), so its facts
|
|
338
|
-
* over-claim (false ≤1-row keys, false EC-driven inferences, wrong insert
|
|
331
|
+
* **Collation gate (all shapes).** Every extracted fact is a VALUE-level claim
|
|
332
|
+
* (a pinned column has one value across rows; `col1 = col2` rows are
|
|
333
|
+
* value-equal), so a conjunct only contributes when its comparison is
|
|
334
|
+
* value-discriminating (`isValueDiscriminatingEquality`): for textual operands
|
|
335
|
+
* the effective comparison collation must be BINARY. A NOCASE/RTRIM comparison —
|
|
336
|
+
* via a `COLLATE` wrapper on either side or a non-BINARY declared column
|
|
337
|
+
* collation — passes value-DIFFERENT rows ('Bob' = 'bob' NOCASE), so its facts
|
|
338
|
+
* would over-claim (false ≤1-row keys, false EC-driven inferences, wrong insert
|
|
339
339
|
* defaults — ticket `collation-blind-equality-fact-extraction`). Declared-
|
|
340
340
|
* collation covered-key ≤1-row detection is NOT lost: it flows through the
|
|
341
341
|
* independent (and collation-sound) `extractConstraints` path in
|
|
342
342
|
* `FilterNode.computePhysical`.
|
|
343
|
+
*
|
|
344
|
+
* **Semantic-ordering gate (`col1 = col2` ONLY).** A few logical types compare
|
|
345
|
+
* by meaning rather than by stored text (`timespan`: 'PT1H' = 'PT60M'; `json`:
|
|
346
|
+
* '{"a":1}' = '{ "a" : 1 }'). For a MIXED pair — `d timespan = s text` — the
|
|
347
|
+
* mirror FDs and the equivalence class are both FALSE: two surviving rows can
|
|
348
|
+
* agree on `d` (same elapsed time) while disagreeing on `s` (distinct strings),
|
|
349
|
+
* because the two columns have no common notion of "same value". So the col=col
|
|
350
|
+
* arm additionally requires `semanticOrderingsAgree` on the two declared logical
|
|
351
|
+
* types, mirroring the two join-side extractors that mint the same kind of fact
|
|
352
|
+
* (`extractEquiPairsFromCondition` in `nodes/join-node.ts`, `extractEquiPairs`
|
|
353
|
+
* in `rules/join/equi-pair-extractor.ts`). Same-type pairs (`timespan =
|
|
354
|
+
* timespan`) stay admitted — under the type's own identity both facts hold.
|
|
355
|
+
* Invariant OPT-051; ticket `debt-filter-equality-facts-ignore-semantic-ordering`.
|
|
356
|
+
*
|
|
357
|
+
* **The constant-pin arms are deliberately NOT semantic-ordering-gated.** This is
|
|
358
|
+
* intentional, not an oversight. `where d = 'PT60M'` keeps every row whose `d` is
|
|
359
|
+
* one hour whatever text it stores, and under the engine's identity for a
|
|
360
|
+
* `timespan` column — the same identity `distinct`/`group by`/`unique` use —
|
|
361
|
+
* those rows all hold *the same value*, so `∅ → d` is true. The
|
|
362
|
+
* `ConstantBinding` claim is likewise true as defined (see its declaration in
|
|
363
|
+
* `nodes/plan-node.ts`): the column *compares equal to* the bound value under its
|
|
364
|
+
* own comparison. Gating this arm would decline EVERY constant pin on a
|
|
365
|
+
* `timespan`/`json` column (a literal never declares a semantic-ordering type),
|
|
366
|
+
* losing real optimizations to "fix" a claim that is not wrong.
|
|
343
367
|
*/
|
|
344
368
|
export declare function extractEqualityFds(predicate: ScalarPlanNode, attrIdToIndex: ReadonlyMap<number, number>): EqualityFds;
|
|
345
369
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fd-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/fd-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"fd-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/util/fd-utils.ts"],"names":[],"mappings":"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"}
|