@quereus/quereus 2.8.0 → 3.0.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 +224 -222
- package/dist/src/core/database-assertions.d.ts +36 -16
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +222 -118
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +96 -13
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +294 -35
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +58 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -0
- package/dist/src/core/database-watchers.js +206 -0
- package/dist/src/core/database-watchers.js.map +1 -0
- package/dist/src/core/database.d.ts +78 -5
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +120 -20
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts +9 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +29 -0
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/core/table-handle.d.ts +45 -0
- package/dist/src/core/table-handle.d.ts.map +1 -0
- package/dist/src/core/table-handle.js +54 -0
- package/dist/src/core/table-handle.js.map +1 -0
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +0 -3
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/conversion.d.ts.map +1 -1
- package/dist/src/func/builtins/conversion.js +12 -1
- package/dist/src/func/builtins/conversion.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +22 -8
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/generation.d.ts.map +1 -1
- package/dist/src/func/builtins/generation.js +26 -1
- package/dist/src/func/builtins/generation.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +5 -1
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +16 -2
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts +4 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +270 -11
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/registration.d.ts +19 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +8 -3
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +3 -2
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +25 -8
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts +71 -0
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -0
- package/dist/src/planner/analysis/assertion-classifier.js +286 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts +34 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js +119 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts +58 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.js +110 -0
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -0
- package/dist/src/planner/analysis/change-scope.d.ts +184 -0
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -0
- package/dist/src/planner/analysis/change-scope.js +825 -0
- package/dist/src/planner/analysis/change-scope.js.map +1 -0
- package/dist/src/planner/analysis/check-extraction.d.ts +29 -0
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -0
- package/dist/src/planner/analysis/check-extraction.js +420 -0
- package/dist/src/planner/analysis/check-extraction.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +47 -7
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +169 -92
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +68 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.js +347 -0
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -0
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts +14 -0
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-conjuncts.js +31 -0
- package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts +52 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.js +119 -0
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -0
- package/dist/src/planner/analysis/sat-checker.d.ts +43 -0
- package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -0
- package/dist/src/planner/analysis/sat-checker.js +393 -0
- package/dist/src/planner/analysis/sat-checker.js.map +1 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +3 -2
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/select.js +14 -2
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/table.d.ts.map +1 -1
- package/dist/src/planner/building/table.js +1 -1
- package/dist/src/planner/building/table.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +10 -6
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +13 -2
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +31 -5
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +46 -16
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts +21 -9
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +47 -31
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +25 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +75 -8
- 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 +8 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asof-scan-node.js +237 -0
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +19 -9
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +17 -6
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/empty-relation-node.d.ts +27 -0
- package/dist/src/planner/nodes/empty-relation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/empty-relation-node.js +61 -0
- package/dist/src/planner/nodes/empty-relation-node.js.map +1 -0
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +67 -5
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/function.d.ts +11 -1
- package/dist/src/planner/nodes/function.d.ts.map +1 -1
- package/dist/src/planner/nodes/function.js +94 -1
- package/dist/src/planner/nodes/function.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +10 -6
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +21 -10
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +42 -1
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +132 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +8 -1
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +22 -9
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js +130 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +3 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +316 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +49 -0
- 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 +78 -28
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +27 -2
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +117 -1
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts +9 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +21 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +64 -28
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +8 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +112 -1
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +24 -0
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -1
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +28 -1
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +10 -8
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +40 -5
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +113 -18
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.d.ts +4 -1
- package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +224 -14
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +1 -3
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +3 -9
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +61 -2
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +71 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +38 -1
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +6 -0
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +278 -0
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -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 +53 -17
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +30 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +116 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -0
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +7 -7
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +18 -16
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +56 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.js +326 -0
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +10 -2
- package/dist/src/planner/rules/join/rule-join-greedy-commute.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 +2 -122
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +20 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +181 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +46 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +156 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +30 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +60 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +45 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +210 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts +29 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +161 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +39 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +91 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +35 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +74 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +27 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +103 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +1 -25
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
- package/dist/src/planner/scopes/global.js +2 -2
- package/dist/src/planner/scopes/global.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +11 -0
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +245 -0
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -0
- package/dist/src/planner/util/fd-utils.js +1416 -0
- package/dist/src/planner/util/fd-utils.js.map +1 -0
- package/dist/src/planner/util/ind-utils.d.ts +79 -0
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -0
- package/dist/src/planner/util/ind-utils.js +146 -0
- package/dist/src/planner/util/ind-utils.js.map +1 -0
- package/dist/src/planner/util/key-utils.d.ts +75 -14
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +234 -57
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +9 -0
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +5 -0
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +134 -0
- package/dist/src/runtime/delta-executor.d.ts.map +1 -0
- package/dist/src/runtime/delta-executor.js +382 -0
- package/dist/src/runtime/delta-executor.js.map +1 -0
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +52 -16
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/asof-scan.js +467 -0
- package/dist/src/runtime/emit/asof-scan.js.map +1 -0
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +20 -0
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-assertion.js +3 -2
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +40 -13
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +1 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/empty-relation.d.ts +5 -0
- package/dist/src/runtime/emit/empty-relation.d.ts.map +1 -0
- package/dist/src/runtime/emit/empty-relation.js +11 -0
- package/dist/src/runtime/emit/empty-relation.js.map +1 -0
- package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
- package/dist/src/runtime/emit/ordinal-slice.js +89 -0
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +9 -4
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts +19 -3
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +12 -8
- 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 +91 -14
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +732 -37
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +16 -0
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +86 -5
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +6 -0
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +8 -0
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/catalog.d.ts +10 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +29 -6
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +5 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/function.d.ts +89 -1
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +31 -0
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +43 -0
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +105 -4
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +303 -102
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +18 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +307 -42
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +21 -2
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +17 -8
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +11 -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/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +32 -0
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/ast-literal.d.ts +11 -0
- package/dist/src/util/ast-literal.d.ts.map +1 -0
- package/dist/src/util/ast-literal.js +26 -0
- package/dist/src/util/ast-literal.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +41 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +29 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/events.d.ts +9 -0
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js +19 -0
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/filter-info.d.ts +14 -0
- package/dist/src/vtab/filter-info.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +24 -5
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +39 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +206 -44
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +2 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +32 -1
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/module.d.ts +24 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode } from './plan-node.js';
|
|
3
|
-
import { isTableValuedFunctionSchema } from '../../schema/function.js';
|
|
2
|
+
import { PlanNode, } from './plan-node.js';
|
|
3
|
+
import { isTableValuedFunctionSchema, resolveAdvertisement } from '../../schema/function.js';
|
|
4
|
+
import { FunctionFlags } from '../../common/constants.js';
|
|
4
5
|
import { Cached } from '../../util/cached.js';
|
|
5
6
|
import { formatExpressionList } from '../../util/plan-formatter.js';
|
|
7
|
+
import { createLogger } from '../../common/logger.js';
|
|
8
|
+
import { addFd, superkeyToFd } from '../util/fd-utils.js';
|
|
9
|
+
const log = createLogger('planner:tvf');
|
|
6
10
|
/**
|
|
7
11
|
* Represents a table-valued function call in the FROM clause.
|
|
8
12
|
* This produces a relation from a function call like query_plan('SELECT ...').
|
|
@@ -15,6 +19,7 @@ export class TableFunctionCallNode extends PlanNode {
|
|
|
15
19
|
aliasColumns;
|
|
16
20
|
nodeType = PlanNodeType.TableFunctionCall;
|
|
17
21
|
attributesCache;
|
|
22
|
+
typeCache;
|
|
18
23
|
constructor(scope, functionName, functionSchema, operands, alias, aliasColumns, estimatedCostOverride) {
|
|
19
24
|
super(scope, estimatedCostOverride ?? 1); // Default cost for function calls
|
|
20
25
|
this.functionName = functionName;
|
|
@@ -35,22 +40,45 @@ export class TableFunctionCallNode extends PlanNode {
|
|
|
35
40
|
}
|
|
36
41
|
return [];
|
|
37
42
|
});
|
|
43
|
+
this.typeCache = new Cached(() => this.buildType());
|
|
38
44
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
buildType() {
|
|
46
|
+
if (!isTableValuedFunctionSchema(this.functionSchema)) {
|
|
47
|
+
return {
|
|
48
|
+
typeClass: 'relation',
|
|
49
|
+
isReadOnly: true,
|
|
50
|
+
isSet: false,
|
|
51
|
+
columns: [],
|
|
52
|
+
keys: [],
|
|
53
|
+
rowConstraints: [],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const schema = this.functionSchema;
|
|
57
|
+
const base = schema.returnType;
|
|
58
|
+
const adv = schema.relationalAdvertisement;
|
|
59
|
+
if (!adv)
|
|
60
|
+
return base;
|
|
61
|
+
const colCount = base.columns.length;
|
|
62
|
+
const resolvedIsSet = resolveAdvertisement(adv.isSet, this.operands, schema);
|
|
63
|
+
const resolvedKeys = resolveAdvertisement(adv.keys, this.operands, schema);
|
|
64
|
+
const keysOverride = (resolvedKeys && validateKeys(resolvedKeys, colCount, this.functionName))
|
|
65
|
+
? resolvedKeys.map((k) => k.map((c) => ({ index: c.index, desc: c.desc })))
|
|
66
|
+
: undefined;
|
|
67
|
+
if (resolvedIsSet === undefined && keysOverride === undefined) {
|
|
68
|
+
return base;
|
|
43
69
|
}
|
|
44
|
-
// Fallback for non-table-valued functions (shouldn't happen)
|
|
45
70
|
return {
|
|
46
71
|
typeClass: 'relation',
|
|
47
|
-
isReadOnly:
|
|
48
|
-
isSet:
|
|
49
|
-
columns:
|
|
50
|
-
keys:
|
|
51
|
-
rowConstraints:
|
|
72
|
+
isReadOnly: base.isReadOnly,
|
|
73
|
+
isSet: resolvedIsSet ?? base.isSet,
|
|
74
|
+
columns: base.columns,
|
|
75
|
+
keys: keysOverride ?? base.keys,
|
|
76
|
+
rowConstraints: base.rowConstraints,
|
|
52
77
|
};
|
|
53
78
|
}
|
|
79
|
+
getType() {
|
|
80
|
+
return this.typeCache.value;
|
|
81
|
+
}
|
|
54
82
|
getAttributes() {
|
|
55
83
|
return this.attributesCache.value;
|
|
56
84
|
}
|
|
@@ -78,9 +106,87 @@ export class TableFunctionCallNode extends PlanNode {
|
|
|
78
106
|
// Create new instance
|
|
79
107
|
return new TableFunctionCallNode(this.scope, this.functionName, this.functionSchema, newChildren, this.alias, this.aliasColumns);
|
|
80
108
|
}
|
|
109
|
+
computePhysical() {
|
|
110
|
+
if (!isTableValuedFunctionSchema(this.functionSchema))
|
|
111
|
+
return {};
|
|
112
|
+
const schema = this.functionSchema;
|
|
113
|
+
const deterministicByFlag = (schema.flags & FunctionFlags.DETERMINISTIC) !== 0;
|
|
114
|
+
const out = {
|
|
115
|
+
deterministic: deterministicByFlag,
|
|
116
|
+
readonly: true,
|
|
117
|
+
idempotent: true,
|
|
118
|
+
};
|
|
119
|
+
const adv = schema.relationalAdvertisement;
|
|
120
|
+
if (!adv)
|
|
121
|
+
return out;
|
|
122
|
+
const ops = this.operands;
|
|
123
|
+
const colCount = schema.returnType.columns.length;
|
|
124
|
+
const attrs = this.getAttributes();
|
|
125
|
+
const attrIds = new Set(attrs.map((a) => a.id));
|
|
126
|
+
// Lift declared unique keys into the FD set as `key → all_other_cols`.
|
|
127
|
+
const resolvedKeys = resolveAdvertisement(adv.keys, ops, schema);
|
|
128
|
+
let resolvedKeyIndices;
|
|
129
|
+
if (resolvedKeys && validateKeys(resolvedKeys, colCount, this.functionName)) {
|
|
130
|
+
resolvedKeyIndices = resolvedKeys.map((k) => k.map((c) => c.index));
|
|
131
|
+
}
|
|
132
|
+
let fdsAcc = [];
|
|
133
|
+
const fds = resolveAdvertisement(adv.fds, ops, schema);
|
|
134
|
+
if (fds && validateFds(fds, colCount, this.functionName)) {
|
|
135
|
+
fdsAcc = fds;
|
|
136
|
+
}
|
|
137
|
+
if (resolvedKeyIndices) {
|
|
138
|
+
for (const key of resolvedKeyIndices) {
|
|
139
|
+
const keyFd = superkeyToFd(key, colCount);
|
|
140
|
+
if (keyFd)
|
|
141
|
+
fdsAcc = addFd(fdsAcc, keyFd, { keyHints: resolvedKeyIndices });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (fdsAcc.length > 0)
|
|
145
|
+
out.fds = fdsAcc;
|
|
146
|
+
const equivClasses = resolveAdvertisement(adv.equivClasses, ops, schema);
|
|
147
|
+
if (equivClasses && validateEcs(equivClasses, colCount, this.functionName)) {
|
|
148
|
+
out.equivClasses = equivClasses;
|
|
149
|
+
}
|
|
150
|
+
const ordering = resolveAdvertisement(adv.ordering, ops, schema);
|
|
151
|
+
if (ordering && validateOrdering(ordering, colCount, this.functionName)) {
|
|
152
|
+
out.ordering = ordering.map((o) => ({ column: o.column, desc: o.desc }));
|
|
153
|
+
}
|
|
154
|
+
const monotonicOn = resolveAdvertisement(adv.monotonicOn, ops, schema);
|
|
155
|
+
if (monotonicOn && validateMonotonicOn(monotonicOn, attrIds, this.functionName)) {
|
|
156
|
+
out.monotonicOn = monotonicOn;
|
|
157
|
+
}
|
|
158
|
+
const monotonicOnColumns = resolveAdvertisement(adv.monotonicOnColumns, ops, schema);
|
|
159
|
+
if (monotonicOnColumns && validateMonotonicOnColumns(monotonicOnColumns, colCount, this.functionName)) {
|
|
160
|
+
const translated = monotonicOnColumns.map((m) => ({
|
|
161
|
+
attrId: attrs[m.column].id,
|
|
162
|
+
strict: m.strict ?? false,
|
|
163
|
+
direction: m.direction,
|
|
164
|
+
}));
|
|
165
|
+
out.monotonicOn = mergeMonotonicOn(out.monotonicOn, translated);
|
|
166
|
+
}
|
|
167
|
+
const constantBindings = resolveAdvertisement(adv.constantBindings, ops, schema);
|
|
168
|
+
if (constantBindings && validateBindings(constantBindings, colCount, this.functionName)) {
|
|
169
|
+
out.constantBindings = constantBindings;
|
|
170
|
+
}
|
|
171
|
+
const estimatedRows = resolveAdvertisement(adv.estimatedRows, ops, schema);
|
|
172
|
+
if (typeof estimatedRows === 'number' && Number.isFinite(estimatedRows) && estimatedRows >= 0) {
|
|
173
|
+
out.estimatedRows = estimatedRows;
|
|
174
|
+
}
|
|
175
|
+
if (adv.accessCapabilities)
|
|
176
|
+
out.accessCapabilities = adv.accessCapabilities;
|
|
177
|
+
if (adv.deterministic !== undefined)
|
|
178
|
+
out.deterministic = adv.deterministic;
|
|
179
|
+
if (adv.readonly !== undefined)
|
|
180
|
+
out.readonly = adv.readonly;
|
|
181
|
+
if (adv.idempotent !== undefined)
|
|
182
|
+
out.idempotent = adv.idempotent;
|
|
183
|
+
return out;
|
|
184
|
+
}
|
|
81
185
|
get estimatedRows() {
|
|
82
|
-
|
|
83
|
-
|
|
186
|
+
const fromPhysical = this.physical.estimatedRows;
|
|
187
|
+
if (typeof fromPhysical === 'number')
|
|
188
|
+
return fromPhysical;
|
|
189
|
+
return 10; // Conservative fallback
|
|
84
190
|
}
|
|
85
191
|
toString() {
|
|
86
192
|
const argsStr = formatExpressionList(this.operands);
|
|
@@ -105,4 +211,108 @@ export class TableFunctionCallNode extends PlanNode {
|
|
|
105
211
|
return props;
|
|
106
212
|
}
|
|
107
213
|
}
|
|
214
|
+
function validateKeys(keys, colCount, fnName) {
|
|
215
|
+
for (const k of keys) {
|
|
216
|
+
for (const c of k) {
|
|
217
|
+
if (!Number.isInteger(c.index) || c.index < 0 || c.index >= colCount) {
|
|
218
|
+
log('Dropping TVF advertisement for %s: key column index %d out of range [0,%d)', fnName, c.index, colCount);
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return true;
|
|
224
|
+
}
|
|
225
|
+
function validateFds(fds, colCount, fnName) {
|
|
226
|
+
for (const fd of fds) {
|
|
227
|
+
if (!Array.isArray(fd.dependents) || fd.dependents.length === 0) {
|
|
228
|
+
log('Dropping TVF advertisement for %s: FD has empty dependents', fnName);
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
for (const i of fd.determinants) {
|
|
232
|
+
if (!Number.isInteger(i) || i < 0 || i >= colCount) {
|
|
233
|
+
log('Dropping TVF advertisement for %s: FD determinant index %d out of range', fnName, i);
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
for (const i of fd.dependents) {
|
|
238
|
+
if (!Number.isInteger(i) || i < 0 || i >= colCount) {
|
|
239
|
+
log('Dropping TVF advertisement for %s: FD dependent index %d out of range', fnName, i);
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
function validateEcs(ecs, colCount, fnName) {
|
|
247
|
+
for (const cls of ecs) {
|
|
248
|
+
if (cls.length < 2) {
|
|
249
|
+
log('Dropping TVF advertisement for %s: equivClass with <2 members', fnName);
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
for (const i of cls) {
|
|
253
|
+
if (!Number.isInteger(i) || i < 0 || i >= colCount) {
|
|
254
|
+
log('Dropping TVF advertisement for %s: equivClass index %d out of range', fnName, i);
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
function validateOrdering(ordering, colCount, fnName) {
|
|
262
|
+
const seen = new Set();
|
|
263
|
+
for (const o of ordering) {
|
|
264
|
+
if (!Number.isInteger(o.column) || o.column < 0 || o.column >= colCount) {
|
|
265
|
+
log('Dropping TVF advertisement for %s: ordering column %d out of range', fnName, o.column);
|
|
266
|
+
return false;
|
|
267
|
+
}
|
|
268
|
+
if (seen.has(o.column)) {
|
|
269
|
+
log('Dropping TVF advertisement for %s: duplicate ordering column %d', fnName, o.column);
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
seen.add(o.column);
|
|
273
|
+
}
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
function validateMonotonicOn(entries, attrIds, fnName) {
|
|
277
|
+
for (const m of entries) {
|
|
278
|
+
if (!attrIds.has(m.attrId)) {
|
|
279
|
+
log('Dropping TVF advertisement for %s: monotonicOn attrId %d not in node attributes', fnName, m.attrId);
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return true;
|
|
284
|
+
}
|
|
285
|
+
function validateMonotonicOnColumns(entries, colCount, fnName) {
|
|
286
|
+
for (const m of entries) {
|
|
287
|
+
if (!Number.isInteger(m.column) || m.column < 0 || m.column >= colCount) {
|
|
288
|
+
log('Dropping TVF advertisement for %s: monotonicOnColumns column %d out of range', fnName, m.column);
|
|
289
|
+
return false;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
function validateBindings(bindings, colCount, fnName) {
|
|
295
|
+
for (const b of bindings) {
|
|
296
|
+
for (const i of b.attrs) {
|
|
297
|
+
if (!Number.isInteger(i) || i < 0 || i >= colCount) {
|
|
298
|
+
log('Dropping TVF advertisement for %s: constantBinding column %d out of range', fnName, i);
|
|
299
|
+
return false;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
function mergeMonotonicOn(existing, added) {
|
|
306
|
+
if (!existing || existing.length === 0)
|
|
307
|
+
return added;
|
|
308
|
+
const out = [...existing];
|
|
309
|
+
const seen = new Set(existing.map((m) => m.attrId));
|
|
310
|
+
for (const m of added) {
|
|
311
|
+
if (!seen.has(m.attrId)) {
|
|
312
|
+
out.push(m);
|
|
313
|
+
seen.add(m.attrId);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
return out;
|
|
317
|
+
}
|
|
108
318
|
//# sourceMappingURL=table-function-call.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-function-call.js","sourceRoot":"","sources":["../../../../src/planner/nodes/table-function-call.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table-function-call.js","sourceRoot":"","sources":["../../../../src/planner/nodes/table-function-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { PlanNode, type RelationalPlanNode, type Attribute, type RowDescriptor }
|
|
|
4
4
|
import { PlanNodeType } from './plan-node-type.js';
|
|
5
5
|
import type { TableReferenceNode } from './reference.js';
|
|
6
6
|
import type { ScalarPlanNode } from './plan-node.js';
|
|
7
|
-
import type { ConflictResolution } from '../../common/constants.js';
|
|
8
7
|
import type { RelationType } from '../../common/datatype.js';
|
|
9
8
|
import type { PhysicalProperties } from './plan-node.js';
|
|
10
9
|
export interface UpdateAssignment {
|
|
@@ -20,7 +19,6 @@ export declare class UpdateNode extends PlanNode implements RelationalPlanNode {
|
|
|
20
19
|
readonly table: TableReferenceNode;
|
|
21
20
|
readonly assignments: ReadonlyArray<UpdateAssignment>;
|
|
22
21
|
readonly source: RelationalPlanNode;
|
|
23
|
-
readonly onConflict: ConflictResolution | undefined;
|
|
24
22
|
readonly oldRowDescriptor: RowDescriptor;
|
|
25
23
|
readonly newRowDescriptor: RowDescriptor;
|
|
26
24
|
readonly flatRowDescriptor: RowDescriptor;
|
|
@@ -29,7 +27,7 @@ export declare class UpdateNode extends PlanNode implements RelationalPlanNode {
|
|
|
29
27
|
readonly contextDescriptor?: RowDescriptor | undefined;
|
|
30
28
|
readonly nodeType = PlanNodeType.Update;
|
|
31
29
|
constructor(scope: Scope, table: TableReferenceNode, assignments: ReadonlyArray<UpdateAssignment>, source: RelationalPlanNode, // Typically a FilterNode wrapping a TableReferenceNode
|
|
32
|
-
|
|
30
|
+
oldRowDescriptor: RowDescriptor, // For constraint checking
|
|
33
31
|
newRowDescriptor: RowDescriptor, // For constraint checking
|
|
34
32
|
flatRowDescriptor: RowDescriptor, // For flat OLD/NEW row attributes
|
|
35
33
|
mutationContextValues?: Map<string, ScalarPlanNode> | undefined, // Mutation context value expressions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/update-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"update-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/update-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAoB,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC;IAC7B,KAAK,EAAE,cAAc,CAAC;IACtB,qGAAqG;IACrG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,QAAS,YAAW,kBAAkB;aAKlD,KAAK,EAAE,kBAAkB;aACzB,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC;aAC5C,MAAM,EAAE,kBAAkB;aAC1B,gBAAgB,EAAE,aAAa;aAC/B,gBAAgB,EAAE,aAAa;aAC/B,iBAAiB,EAAE,aAAa;aAChC,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;aACnD,iBAAiB,CAAC,EAAE,SAAS,EAAE;aAC/B,iBAAiB,CAAC,EAAE,aAAa;IAZnD,SAAkB,QAAQ,uBAAuB;gBAG/C,KAAK,EAAE,KAAK,EACI,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC5C,MAAM,EAAE,kBAAkB,EAAE,uDAAuD;IACnF,gBAAgB,EAAE,aAAa,EAAE,0BAA0B;IAC3D,gBAAgB,EAAE,aAAa,EAAE,0BAA0B;IAC3D,iBAAiB,EAAE,aAAa,EAAE,kCAAkC;IACpE,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,YAAA,EAAE,qCAAqC;IAC1F,iBAAiB,CAAC,EAAE,SAAS,EAAE,YAAA,EAAE,8BAA8B;IAC/D,iBAAiB,CAAC,EAAE,aAAa,YAAA;IAKpD,OAAO,IAAI,YAAY;IAItB,aAAa,IAAI,SAAS,EAAE;IAI5B,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAKjE,WAAW,IAAI,SAAS,QAAQ,EAAE;IAKlC,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAkDxD,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAM9C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUzD"}
|
|
@@ -9,7 +9,6 @@ export class UpdateNode extends PlanNode {
|
|
|
9
9
|
table;
|
|
10
10
|
assignments;
|
|
11
11
|
source;
|
|
12
|
-
onConflict;
|
|
13
12
|
oldRowDescriptor;
|
|
14
13
|
newRowDescriptor;
|
|
15
14
|
flatRowDescriptor;
|
|
@@ -18,7 +17,7 @@ export class UpdateNode extends PlanNode {
|
|
|
18
17
|
contextDescriptor;
|
|
19
18
|
nodeType = PlanNodeType.Update;
|
|
20
19
|
constructor(scope, table, assignments, source, // Typically a FilterNode wrapping a TableReferenceNode
|
|
21
|
-
|
|
20
|
+
oldRowDescriptor, // For constraint checking
|
|
22
21
|
newRowDescriptor, // For constraint checking
|
|
23
22
|
flatRowDescriptor, // For flat OLD/NEW row attributes
|
|
24
23
|
mutationContextValues, // Mutation context value expressions
|
|
@@ -28,7 +27,6 @@ export class UpdateNode extends PlanNode {
|
|
|
28
27
|
this.table = table;
|
|
29
28
|
this.assignments = assignments;
|
|
30
29
|
this.source = source;
|
|
31
|
-
this.onConflict = onConflict;
|
|
32
30
|
this.oldRowDescriptor = oldRowDescriptor;
|
|
33
31
|
this.newRowDescriptor = newRowDescriptor;
|
|
34
32
|
this.flatRowDescriptor = flatRowDescriptor;
|
|
@@ -80,7 +78,7 @@ export class UpdateNode extends PlanNode {
|
|
|
80
78
|
isGenerated: assignment.isGenerated
|
|
81
79
|
}));
|
|
82
80
|
// Create new instance
|
|
83
|
-
return new UpdateNode(this.scope, this.table, newAssignments, newSource, this.
|
|
81
|
+
return new UpdateNode(this.scope, this.table, newAssignments, newSource, this.oldRowDescriptor, this.newRowDescriptor, this.flatRowDescriptor, this.mutationContextValues, this.contextAttributes, this.contextDescriptor);
|
|
84
82
|
}
|
|
85
83
|
computePhysical() {
|
|
86
84
|
return {
|
|
@@ -94,7 +92,7 @@ export class UpdateNode extends PlanNode {
|
|
|
94
92
|
return `UPDATE ${this.table.tableSchema.name}`;
|
|
95
93
|
}
|
|
96
94
|
getLogicalAttributes() {
|
|
97
|
-
|
|
95
|
+
return {
|
|
98
96
|
table: this.table.tableSchema.name,
|
|
99
97
|
schema: this.table.tableSchema.schemaName,
|
|
100
98
|
assignments: this.assignments.map(assign => ({
|
|
@@ -102,10 +100,6 @@ export class UpdateNode extends PlanNode {
|
|
|
102
100
|
value: formatExpression(assign.value)
|
|
103
101
|
}))
|
|
104
102
|
};
|
|
105
|
-
if (this.onConflict) {
|
|
106
|
-
props.onConflict = this.onConflict;
|
|
107
|
-
}
|
|
108
|
-
return props;
|
|
109
103
|
}
|
|
110
104
|
}
|
|
111
105
|
//# sourceMappingURL=update-node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/update-node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAA+D,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/update-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PlanNodeType } from './plan-node-type.js';
|
|
2
|
-
import { PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode, type ScalarPlanNode } from './plan-node.js';
|
|
2
|
+
import { PlanNode, type Attribute, type RelationalPlanNode, type UnaryRelationalNode, type ScalarPlanNode, type PhysicalProperties } from './plan-node.js';
|
|
3
3
|
import type { WindowFunctionCallNode } from './window-function.js';
|
|
4
4
|
import type { RelationType } from '../../common/datatype.js';
|
|
5
5
|
import type { Scope } from '../scopes/scope.js';
|
|
@@ -9,6 +9,58 @@ export interface WindowSpec {
|
|
|
9
9
|
orderBy: AST.OrderByClause[];
|
|
10
10
|
frame?: AST.WindowFrame;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* Per-function streaming mode chosen by `rule-monotonic-window`. Indexed
|
|
14
|
+
* parallel to `WindowNode.functions`.
|
|
15
|
+
*
|
|
16
|
+
* - rowNumber / rank / denseRank — single counter + last-key state.
|
|
17
|
+
* - lag / lead — ring/read-ahead buffer with a literal offset and default value.
|
|
18
|
+
* - firstValue — caches the first row's expression for the partition.
|
|
19
|
+
* - lastValue — under the streaming default frame (`UNBOUNDED PRECEDING TO
|
|
20
|
+
* CURRENT ROW`) `LAST_VALUE(expr)` is `expr` evaluated on the current row.
|
|
21
|
+
* - runningAgg — fold via the registered step/final hooks (default frame only).
|
|
22
|
+
* - slidingAgg — `SUM/COUNT/AVG/MIN/MAX/FIRST_VALUE/LAST_VALUE` over a sliding
|
|
23
|
+
* frame of the form `ROWS BETWEEN n PRECEDING AND m FOLLOWING` (literal `n`,
|
|
24
|
+
* `m`, both ≥ 0) or `RANGE BETWEEN <num> PRECEDING AND <num> FOLLOWING`
|
|
25
|
+
* (single numeric ORDER BY, literal non-negative offsets).
|
|
26
|
+
*/
|
|
27
|
+
export type StreamingWindowFunctionMode = {
|
|
28
|
+
kind: 'rowNumber';
|
|
29
|
+
} | {
|
|
30
|
+
kind: 'rank';
|
|
31
|
+
} | {
|
|
32
|
+
kind: 'denseRank';
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'lag';
|
|
35
|
+
offset: number;
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'lead';
|
|
38
|
+
offset: number;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'firstValue';
|
|
41
|
+
} | {
|
|
42
|
+
kind: 'lastValue';
|
|
43
|
+
} | {
|
|
44
|
+
kind: 'runningAgg';
|
|
45
|
+
} | {
|
|
46
|
+
kind: 'slidingAgg';
|
|
47
|
+
/** Underlying aggregate / value function name (lower-case). */
|
|
48
|
+
name: 'sum' | 'count' | 'avg' | 'min' | 'max' | 'first_value' | 'last_value';
|
|
49
|
+
frameMode: 'rows' | 'range';
|
|
50
|
+
/** Non-negative integer literal for ROWS; non-negative numeric literal for RANGE. */
|
|
51
|
+
preceding: number;
|
|
52
|
+
/** Same constraints as preceding. */
|
|
53
|
+
following: number;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Marker added to a `WindowNode` by `rule-monotonic-window` when the source's
|
|
57
|
+
* emit order already covers `[PARTITION BY..., ORDER BY[0]]`. Drives the
|
|
58
|
+
* runtime's streaming emitter and signals to `computePhysical()` that the
|
|
59
|
+
* window output preserves the source's `monotonicOn` unchanged.
|
|
60
|
+
*/
|
|
61
|
+
export interface StreamingWindowConfig {
|
|
62
|
+
readonly modes: ReadonlyArray<StreamingWindowFunctionMode>;
|
|
63
|
+
}
|
|
12
64
|
/**
|
|
13
65
|
* Represents a window operation that computes window functions over partitions of rows.
|
|
14
66
|
* This node groups window functions that share the same window specification for efficiency.
|
|
@@ -22,17 +74,24 @@ export declare class WindowNode extends PlanNode implements UnaryRelationalNode
|
|
|
22
74
|
readonly functionArguments: ScalarPlanNode[][];
|
|
23
75
|
/** Optional predefined attributes for preserving IDs during optimization */
|
|
24
76
|
readonly predefinedAttributes?: Attribute[] | undefined;
|
|
77
|
+
/** Set by `rule-monotonic-window` when the source streams in window order. */
|
|
78
|
+
readonly streaming?: StreamingWindowConfig | undefined;
|
|
25
79
|
readonly nodeType = PlanNodeType.Window;
|
|
26
80
|
private outputTypeCache;
|
|
27
81
|
private attributesCache;
|
|
28
82
|
constructor(scope: Scope, source: RelationalPlanNode, windowSpec: WindowSpec, functions: WindowFunctionCallNode[], partitionExpressions: ScalarPlanNode[], orderByExpressions: ScalarPlanNode[], functionArguments: ScalarPlanNode[][], estimatedCostOverride?: number,
|
|
29
83
|
/** Optional predefined attributes for preserving IDs during optimization */
|
|
30
|
-
predefinedAttributes?: Attribute[] | undefined
|
|
84
|
+
predefinedAttributes?: Attribute[] | undefined,
|
|
85
|
+
/** Set by `rule-monotonic-window` when the source streams in window order. */
|
|
86
|
+
streaming?: StreamingWindowConfig | undefined);
|
|
31
87
|
getType(): RelationType;
|
|
32
88
|
getAttributes(): Attribute[];
|
|
33
89
|
getChildren(): readonly PlanNode[];
|
|
34
90
|
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
91
|
+
/** Return a new WindowNode with the given streaming config attached. */
|
|
92
|
+
withStreaming(config: StreamingWindowConfig): WindowNode;
|
|
35
93
|
getRelations(): readonly [RelationalPlanNode];
|
|
94
|
+
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
36
95
|
get estimatedRows(): number | undefined;
|
|
37
96
|
toString(): string;
|
|
38
97
|
getLogicalAttributes(): Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"window-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"window-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/window-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import { PlanNode } from './plan-node.js';
|
|
|
3
3
|
import { Cached } from '../../util/cached.js';
|
|
4
4
|
import { quereusError } from '../../common/errors.js';
|
|
5
5
|
import { StatusCode } from '../../common/types.js';
|
|
6
|
+
import { ColumnReferenceNode } from './reference.js';
|
|
7
|
+
import { isAssertedKey } from '../util/fd-utils.js';
|
|
6
8
|
/**
|
|
7
9
|
* Represents a window operation that computes window functions over partitions of rows.
|
|
8
10
|
* This node groups window functions that share the same window specification for efficiency.
|
|
@@ -15,12 +17,15 @@ export class WindowNode extends PlanNode {
|
|
|
15
17
|
orderByExpressions;
|
|
16
18
|
functionArguments;
|
|
17
19
|
predefinedAttributes;
|
|
20
|
+
streaming;
|
|
18
21
|
nodeType = PlanNodeType.Window;
|
|
19
22
|
outputTypeCache;
|
|
20
23
|
attributesCache;
|
|
21
24
|
constructor(scope, source, windowSpec, functions, partitionExpressions, orderByExpressions, functionArguments, estimatedCostOverride,
|
|
22
25
|
/** Optional predefined attributes for preserving IDs during optimization */
|
|
23
|
-
predefinedAttributes
|
|
26
|
+
predefinedAttributes,
|
|
27
|
+
/** Set by `rule-monotonic-window` when the source streams in window order. */
|
|
28
|
+
streaming) {
|
|
24
29
|
super(scope, estimatedCostOverride);
|
|
25
30
|
this.source = source;
|
|
26
31
|
this.windowSpec = windowSpec;
|
|
@@ -29,6 +34,7 @@ export class WindowNode extends PlanNode {
|
|
|
29
34
|
this.orderByExpressions = orderByExpressions;
|
|
30
35
|
this.functionArguments = functionArguments;
|
|
31
36
|
this.predefinedAttributes = predefinedAttributes;
|
|
37
|
+
this.streaming = streaming;
|
|
32
38
|
this.outputTypeCache = new Cached(() => {
|
|
33
39
|
const sourceType = this.source.getType();
|
|
34
40
|
// Add window function columns to the source columns
|
|
@@ -118,11 +124,67 @@ export class WindowNode extends PlanNode {
|
|
|
118
124
|
// Preserve attributes only when the source is unchanged so that column IDs
|
|
119
125
|
// stay consistent. If the source relation changed, let the WindowNode rebuild
|
|
120
126
|
// its attribute list so that descriptors match the new underlying schema.
|
|
121
|
-
sourceChanged ? undefined : originalAttributes);
|
|
127
|
+
sourceChanged ? undefined : originalAttributes, this.streaming);
|
|
128
|
+
}
|
|
129
|
+
/** Return a new WindowNode with the given streaming config attached. */
|
|
130
|
+
withStreaming(config) {
|
|
131
|
+
return new WindowNode(this.scope, this.source, this.windowSpec, this.functions, this.partitionExpressions, this.orderByExpressions, this.functionArguments, undefined, this.getAttributes(), config);
|
|
122
132
|
}
|
|
123
133
|
getRelations() {
|
|
124
134
|
return [this.source];
|
|
125
135
|
}
|
|
136
|
+
computePhysical(childrenPhysical) {
|
|
137
|
+
const sourcePhysical = childrenPhysical[0];
|
|
138
|
+
// Window output ordering is determined by [PARTITION BY, ORDER BY]:
|
|
139
|
+
// - streaming set: the runtime walks the source in source order and emits
|
|
140
|
+
// in source order — windowing is row-pass-through. Source's monotonicOn
|
|
141
|
+
// survives unchanged.
|
|
142
|
+
// - PARTITION BY non-empty (buffered): the runtime groups rows by partition
|
|
143
|
+
// key in insertion order then sorts within each partition, so a
|
|
144
|
+
// single-attribute monotonicOn does not survive at the relation level.
|
|
145
|
+
// - PARTITION BY empty, ORDER BY present (buffered): output is sorted by
|
|
146
|
+
// the window's ORDER BY — derive monotonicOn from the leading key
|
|
147
|
+
// (mirrors SortNode).
|
|
148
|
+
// - PARTITION BY empty, ORDER BY empty: rows pass through in source order;
|
|
149
|
+
// preserve source's monotonicOn unchanged.
|
|
150
|
+
// TODO: the partitioned case can be tightened (e.g. when the partition keys
|
|
151
|
+
// themselves are functionally determined by the candidate attribute) — out
|
|
152
|
+
// of scope for the carrier ticket.
|
|
153
|
+
let monotonicOn;
|
|
154
|
+
if (this.streaming) {
|
|
155
|
+
monotonicOn = sourcePhysical?.monotonicOn;
|
|
156
|
+
}
|
|
157
|
+
else if (this.partitionExpressions.length === 0) {
|
|
158
|
+
if (this.orderByExpressions.length === 0) {
|
|
159
|
+
monotonicOn = sourcePhysical?.monotonicOn;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
const leadExpr = this.orderByExpressions[0];
|
|
163
|
+
if (leadExpr instanceof ColumnReferenceNode) {
|
|
164
|
+
const sourceAttrs = this.source.getAttributes();
|
|
165
|
+
const leadAttrId = leadExpr.attributeId;
|
|
166
|
+
const leadIdx = sourceAttrs.findIndex(a => a.id === leadAttrId);
|
|
167
|
+
if (leadIdx >= 0) {
|
|
168
|
+
const direction = this.windowSpec.orderBy[0]?.direction === 'desc' ? 'desc' : 'asc';
|
|
169
|
+
const strict = isAssertedKey(new Set([leadIdx]), sourcePhysical?.fds, sourceAttrs.length);
|
|
170
|
+
monotonicOn = [{ attrId: leadAttrId, direction, strict }];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
estimatedRows: this.estimatedRows,
|
|
177
|
+
ordering: sourcePhysical?.ordering,
|
|
178
|
+
monotonicOn,
|
|
179
|
+
// Window functions append columns but don't change the source row stream;
|
|
180
|
+
// FDs, equivalence classes, and constant bindings pass through on the
|
|
181
|
+
// source columns. (Window output columns are not in any new FDs — deferred.)
|
|
182
|
+
fds: sourcePhysical?.fds,
|
|
183
|
+
equivClasses: sourcePhysical?.equivClasses,
|
|
184
|
+
constantBindings: sourcePhysical?.constantBindings,
|
|
185
|
+
domainConstraints: sourcePhysical?.domainConstraints,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
126
188
|
get estimatedRows() {
|
|
127
189
|
return this.source.estimatedRows; // Window functions don't change row count
|
|
128
190
|
}
|
|
@@ -138,7 +200,7 @@ export class WindowNode extends PlanNode {
|
|
|
138
200
|
return `WINDOW ${funcNames} OVER (${clauses})`;
|
|
139
201
|
}
|
|
140
202
|
getLogicalAttributes() {
|
|
141
|
-
|
|
203
|
+
const attrs = {
|
|
142
204
|
windowSpec: {
|
|
143
205
|
partitionBy: this.windowSpec.partitionBy.length,
|
|
144
206
|
orderBy: this.windowSpec.orderBy.length,
|
|
@@ -150,6 +212,12 @@ export class WindowNode extends PlanNode {
|
|
|
150
212
|
distinct: f.isDistinct
|
|
151
213
|
}))
|
|
152
214
|
};
|
|
215
|
+
if (this.streaming) {
|
|
216
|
+
attrs.streaming = {
|
|
217
|
+
modes: this.streaming.modes.map(m => m.kind),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
return attrs;
|
|
153
221
|
}
|
|
154
222
|
}
|
|
155
223
|
//# sourceMappingURL=window-node.js.map
|