@quereus/quereus 4.6.0 → 4.8.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 +2 -2
- package/dist/src/common/errors.d.ts +17 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +21 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/common/types.d.ts +19 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +4 -3
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +44 -14
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +62 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +88 -2
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-internal.d.ts +5 -2
- package/dist/src/core/database-internal.d.ts.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 +4 -2
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
- package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +46 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +75 -4
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database.d.ts +48 -2
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +222 -11
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts.map +1 -1
- package/dist/src/core/derived-row-validator.js +7 -1
- package/dist/src/core/derived-row-validator.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +101 -5
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +18 -2
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +22 -4
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +19 -5
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +24 -20
- 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 +32 -5
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/index.d.ts +9 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +58 -1
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1 -1
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/utils.d.ts +13 -1
- package/dist/src/parser/utils.d.ts.map +1 -1
- package/dist/src/parser/utils.js +14 -0
- package/dist/src/parser/utils.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +7 -2
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +11 -3
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +5 -4
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +13 -5
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.js +8 -1
- package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
- package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
- package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
- package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +53 -17
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +9 -5
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/create-assertion.js +72 -1
- package/dist/src/planner/building/create-assertion.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +6 -1
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +12 -3
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +6 -2
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +23 -10
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts.map +1 -1
- package/dist/src/planner/building/dml-target.js +4 -0
- package/dist/src/planner/building/dml-target.js.map +1 -1
- package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/drop-assertion.js +3 -1
- package/dist/src/planner/building/drop-assertion.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +7 -5
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts +35 -0
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +53 -40
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +185 -48
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
- package/dist/src/planner/building/materialized-view.js +3 -1
- package/dist/src/planner/building/materialized-view.js.map +1 -1
- package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
- package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
- package/dist/src/planner/building/schema-authored-context.js +75 -0
- package/dist/src/planner/building/schema-authored-context.js.map +1 -0
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/schema-resolution.js +7 -4
- package/dist/src/planner/building/schema-resolution.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +187 -2
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +414 -81
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.js +2 -2
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +91 -0
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +113 -0
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +10 -3
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +29 -8
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +64 -19
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +79 -30
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +1 -1
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +18 -11
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts +13 -3
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +142 -37
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +129 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +27 -13
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +102 -8
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +34 -4
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
- package/dist/src/planner/cache/correlation-detector.js +26 -0
- package/dist/src/planner/cache/correlation-detector.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +12 -3
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +9 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts +2 -0
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +15 -0
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
- package/dist/src/planner/mutation/backward-body.js +4 -1
- package/dist/src/planner/mutation/backward-body.js.map +1 -1
- package/dist/src/planner/mutation/body-context.d.ts +23 -0
- package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
- package/dist/src/planner/mutation/body-context.js +26 -0
- package/dist/src/planner/mutation/body-context.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +15 -2
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
- package/dist/src/planner/mutation/decomposition.d.ts +8 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
- package/dist/src/planner/mutation/decomposition.js +8 -3
- package/dist/src/planner/mutation/decomposition.js.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.js +1 -1
- package/dist/src/planner/mutation/multi-source.d.ts +7 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/multi-source.js +5 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
- package/dist/src/planner/mutation/scope-transform.d.ts +32 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
- package/dist/src/planner/mutation/scope-transform.js +181 -33
- package/dist/src/planner/mutation/scope-transform.js.map +1 -1
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
- package/dist/src/planner/mutation/set-op.js +66 -16
- package/dist/src/planner/mutation/set-op.js.map +1 -1
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/single-source.js +100 -24
- package/dist/src/planner/mutation/single-source.js.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +10 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +14 -5
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +28 -21
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +27 -2
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +49 -2
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +17 -19
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.js +5 -2
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +19 -9
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +25 -9
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/delete-node.d.ts +20 -2
- package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/delete-node.js +11 -2
- package/dist/src/planner/nodes/delete-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +107 -15
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +12 -6
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +0 -5
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +17 -20
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.d.ts +19 -2
- package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +10 -2
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.js +85 -16
- package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -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.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +5 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +12 -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 +16 -35
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +8 -1
- 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 +13 -32
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +0 -5
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +18 -24
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +64 -2
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +19 -2
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +10 -2
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +18 -0
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +59 -10
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +24 -0
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/planning-context.js.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.js +297 -71
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- 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 +11 -1
- 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 +46 -2
- 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 +7 -4
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.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 +6 -2
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.js +13 -7
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +2 -2
- 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 +46 -16
- 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 +2 -0
- 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 +14 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +33 -19
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +37 -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 +6 -3
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +6 -3
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +11 -21
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +16 -3
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.js +21 -5
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
- 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.js +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/stored-body-context.d.ts +57 -0
- package/dist/src/planner/stored-body-context.d.ts.map +1 -0
- package/dist/src/planner/stored-body-context.js +64 -0
- package/dist/src/planner/stored-body-context.js.map +1 -0
- package/dist/src/planner/util/ind-utils.d.ts +28 -20
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +36 -27
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +19 -4
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +23 -7
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/output-names.d.ts +12 -0
- package/dist/src/planner/util/output-names.d.ts.map +1 -0
- package/dist/src/planner/util/output-names.js +20 -0
- package/dist/src/planner/util/output-names.js.map +1 -0
- package/dist/src/planner/util/row-estimates.d.ts +11 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -1
- package/dist/src/planner/util/row-estimates.js +28 -0
- package/dist/src/planner/util/row-estimates.js.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +3 -2
- 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 +22 -6
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.d.ts +59 -4
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.js +63 -4
- package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +212 -92
- 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 +15 -4
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +10 -227
- 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 +31 -14
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js +11 -6
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +169 -1
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +8 -8
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
- package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
- package/dist/src/runtime/emit/drop-column-guards.js +230 -0
- package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +6 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +4 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.js +5 -3
- package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +7 -2
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +4 -5
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/remote-query.d.ts.map +1 -1
- package/dist/src/runtime/emit/remote-query.js +8 -3
- package/dist/src/runtime/emit/remote-query.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +4 -1
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +2 -2
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +18 -6
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -3
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +8 -3
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/row-constraints.d.ts +85 -0
- package/dist/src/runtime/row-constraints.d.ts.map +1 -0
- package/dist/src/runtime/row-constraints.js +239 -0
- package/dist/src/runtime/row-constraints.js.map +1 -0
- package/dist/src/runtime/types.d.ts +18 -11
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +11 -0
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +14 -1
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/assertion.js +14 -1
- package/dist/src/schema/assertion.js.map +1 -1
- package/dist/src/schema/catalog-persistability.js +19 -3
- package/dist/src/schema/catalog-persistability.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +6 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +26 -36
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column-source-resolver.d.ts +18 -0
- package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
- package/dist/src/schema/column-source-resolver.js +22 -0
- package/dist/src/schema/column-source-resolver.js.map +1 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +7 -1
- package/dist/src/schema/constraint-builder.js.map +1 -1
- package/dist/src/schema/ddl-generator.js +8 -0
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/lens-compiler.d.ts.map +1 -1
- package/dist/src/schema/lens-compiler.js +203 -51
- package/dist/src/schema/lens-compiler.js.map +1 -1
- package/dist/src/schema/lens-prover.d.ts +2 -3
- package/dist/src/schema/lens-prover.d.ts.map +1 -1
- package/dist/src/schema/lens-prover.js +19 -11
- package/dist/src/schema/lens-prover.js.map +1 -1
- package/dist/src/schema/manager.d.ts +30 -12
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +49 -17
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +142 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +254 -9
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags.d.ts +1 -1
- package/dist/src/schema/reserved-tags.d.ts.map +1 -1
- package/dist/src/schema/reserved-tags.js +4 -3
- package/dist/src/schema/reserved-tags.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +16 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +122 -11
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/view.d.ts +11 -0
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +12 -0
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/types/builtin-types.d.ts +38 -0
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +77 -26
- package/dist/src/types/builtin-types.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/util/abort-signal.d.ts +25 -0
- package/dist/src/util/abort-signal.d.ts.map +1 -0
- package/dist/src/util/abort-signal.js +40 -0
- package/dist/src/util/abort-signal.js.map +1 -0
- package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
- package/dist/src/util/array-row-iterable.d.ts.map +1 -0
- package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
- package/dist/src/util/array-row-iterable.js.map +1 -0
- package/dist/src/vtab/concurrency.d.ts +15 -0
- package/dist/src/vtab/concurrency.d.ts.map +1 -1
- package/dist/src/vtab/concurrency.js +17 -0
- package/dist/src/vtab/concurrency.js.map +1 -1
- package/dist/src/vtab/events.d.ts +3 -0
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/manifest.d.ts +15 -0
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +10 -0
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +10 -0
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +24 -0
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +21 -3
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +107 -157
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +11 -0
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +19 -0
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +57 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +103 -2
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +12 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +12 -1
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/module.d.ts +59 -2
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +8 -1
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/dist/src/vtab/test-support/commit-stall.d.ts +53 -0
- package/dist/src/vtab/test-support/commit-stall.d.ts.map +1 -0
- package/dist/src/vtab/test-support/commit-stall.js +73 -0
- package/dist/src/vtab/test-support/commit-stall.js.map +1 -0
- package/dist/src/vtab/test-support/committed-read-conformance.d.ts +96 -0
- package/dist/src/vtab/test-support/committed-read-conformance.d.ts.map +1 -0
- package/dist/src/vtab/test-support/committed-read-conformance.js +364 -0
- package/dist/src/vtab/test-support/committed-read-conformance.js.map +1 -0
- package/package.json +3 -3
- package/dist/src/util/working-table-iterable.d.ts.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rule: Key-set seek — materialize the semi-join key set, then seek the target with it
|
|
3
3
|
*
|
|
4
|
-
* Pattern (anchored on the physical hash semi join `join-physical-selection`
|
|
4
|
+
* Pattern (anchored on the physical hash semi join `join-physical-selection`
|
|
5
|
+
* builds — rule id `key-set-seek` — and on the merge semi join
|
|
6
|
+
* `monotonic-merge-join` / `join-physical-selection` build — rule id
|
|
7
|
+
* `key-set-seek-merge`; one rule function serves both anchors):
|
|
5
8
|
*
|
|
6
|
-
* BloomJoinNode (semi, exactly one equi-pair, no residual)
|
|
9
|
+
* BloomJoinNode | MergeJoinNode (semi, exactly one equi-pair, no residual)
|
|
7
10
|
* ├─ left: (FilterNode | trivial ProjectNode | AliasNode)*
|
|
8
11
|
* │ over SeqScan(fullScan) | ordering-only IndexScan(plan=0)
|
|
12
|
+
* │ | IndexSeek carrying pushedConstraints
|
|
9
13
|
* └─ right: uncorrelated, deterministic, side-effect-free key source
|
|
10
14
|
*
|
|
11
15
|
* On a successful match the left chain is rebuilt with the leaf replaced by a
|
|
@@ -16,27 +20,61 @@
|
|
|
16
20
|
* HashJoin(semi, Project(Filter(leaf)), right)
|
|
17
21
|
* → Project(Filter(KeySetSemiJoin(leaf, right)))
|
|
18
22
|
*
|
|
23
|
+
* An `IndexSeek` leaf is admitted UNCHANGED, with the predicate its
|
|
24
|
+
* `FilterInfo` enforces (recorded in `pushedConstraints`, dropped from the
|
|
25
|
+
* tree on the module's promise) re-applied as a `Filter` directly above the
|
|
26
|
+
* new node — inside the peeled wrappers, because a peeled trivial Project may
|
|
27
|
+
* not carry the predicate's columns:
|
|
28
|
+
*
|
|
29
|
+
* HashJoin(semi, Project(IndexSeek[s='x']), right)
|
|
30
|
+
* → Project(Filter[s='x'](KeySetSemiJoin(IndexSeek[s='x'], right)))
|
|
31
|
+
*
|
|
32
|
+
* That is right on both runtime branches: the scan branch runs the leaf's own
|
|
33
|
+
* FilterInfo untouched (the pushed seek happens exactly as today; the added
|
|
34
|
+
* Filter is redundant), and the seek branch replaces the FilterInfo with the
|
|
35
|
+
* multi-seek (the module ignores the pushed predicate; the Filter re-applies
|
|
36
|
+
* it). The scan branch is byte-for-byte the plan being displaced, so the
|
|
37
|
+
* rewrite is never a structural loss.
|
|
38
|
+
*
|
|
19
39
|
* The new node ALWAYS builds the key set and ALWAYS probes each target row
|
|
20
40
|
* against it — the runtime pushdown only changes how many rows the target
|
|
21
41
|
* emits, so a skipped or over-fetching seek can cost performance but never
|
|
22
42
|
* correctness. Every gate below exists to make an UNDER-fetch (rows the seek
|
|
23
43
|
* fails to return, which the probe cannot resurrect) impossible.
|
|
24
44
|
*
|
|
25
|
-
* The rule declines (returns null, keeping the
|
|
45
|
+
* The rule declines (returns null, keeping the join it arrived as) on all of:
|
|
26
46
|
* - join type ≠ semi, >1 equi-pair, or a residual condition
|
|
27
47
|
* - a correlated, non-deterministic, or side-effect-bearing key source
|
|
28
48
|
* - side effects anywhere in the left chain
|
|
29
49
|
* - any non-peelable node between the join and the access leaf
|
|
30
|
-
* - a leaf that is not an unconstrained every-row walk
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* (
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
50
|
+
* - a walk leaf that is not an unconstrained every-row walk (residue in
|
|
51
|
+
* `FilterInfo.constraints`, or a pushed limit / offset)
|
|
52
|
+
* - a seek leaf failing any of {@link admitSeekLeaf}'s five gates:
|
|
53
|
+
* - a pushed limit / offset (a directive the multi-seek would not honour,
|
|
54
|
+
* and unlike a predicate it cannot be re-applied by a Filter without
|
|
55
|
+
* changing which rows are dropped — unreachable today,
|
|
56
|
+
* `monotonic-limit-pushdown`'s peel cannot cross a join, but kept)
|
|
57
|
+
* - no recorded `pushedConstraints` (a seek we cannot describe is a seek
|
|
58
|
+
* we must not displace)
|
|
59
|
+
* - a recorded predicate containing a relational node (this rule runs
|
|
60
|
+
* PostOptimization — a re-inserted relational subquery would reach emit
|
|
61
|
+
* unphysicalized)
|
|
62
|
+
* - a correlated subtree (`index-nested-loop` builds seeks keyed on the
|
|
63
|
+
* OUTER side of a join — re-applying is correct but the node drains the
|
|
64
|
+
* key source per outer row, turning a linear plan quadratic)
|
|
65
|
+
* - an emission order that absorbed a Sort (`orderingLoadBearing` —
|
|
66
|
+
* `seekPreservesTargetOrder` is false for every seek, so the absorbed
|
|
67
|
+
* order cannot be reproduced)
|
|
68
|
+
* - a walk leaf whose emission order absorbed a SortNode (`orderingLoadBearing`)
|
|
69
|
+
* UNLESS the seek would reproduce that order (`seekPreservesTargetOrder`:
|
|
70
|
+
* the seek index is the walk index, so a multi-seek emits a subsequence of
|
|
71
|
+
* the walk — still in the same order). Otherwise the dropped Sort's order,
|
|
72
|
+
* which rides the leaf's walk order through the order-preserving join,
|
|
73
|
+
* would be replaced by seek-key order
|
|
74
|
+
* - target/key logical types that do not share one seek key space
|
|
75
|
+
* (`sharesSeekKeySpace`: identical types, or any two of INTEGER / REAL /
|
|
76
|
+
* NUMERIC). Anything else could be encoded into seek keys that miss rows
|
|
77
|
+
* `=` considers equal
|
|
40
78
|
* - a semantic-ordering key type ('PT1H' ≡ 'PT60M' but byte-distinct: a
|
|
41
79
|
* raw-value seek under-fetches)
|
|
42
80
|
* - a collation cover that is MISMATCH_UNSAFE (a finer index under-fetches;
|
|
@@ -49,36 +87,63 @@
|
|
|
49
87
|
* - the module answering a synthesized probe with a plan `validateAccessPlan`
|
|
50
88
|
* rejects (a module bug — logged, then declined like any other gate rather
|
|
51
89
|
* than failing a query the user's own predicate would have run fine)
|
|
52
|
-
* - a break-even of zero (the module's own costs say
|
|
53
|
-
*
|
|
90
|
+
* - a break-even of zero (the module's own costs say the displaced plan —
|
|
91
|
+
* the plain scan for a walk leaf, the leaf's own pushed seek for a seek
|
|
92
|
+
* leaf — wins at every key count)
|
|
93
|
+
*
|
|
94
|
+
* The MERGE anchor adds two gates the hash anchor does not need:
|
|
95
|
+
* - `seekPreservesTargetOrder` must hold. `MergeJoinNode.computePhysical`
|
|
96
|
+
* propagates the probe side's `ordering` / `monotonicOn` for semi, so a
|
|
97
|
+
* Sort an earlier pass dropped on the strength of the merge join's order
|
|
98
|
+
* cannot come back — a replacement that cannot reproduce that order is a
|
|
99
|
+
* wrong-order plan, not a slow one. (`BloomJoinNode` propagates neither,
|
|
100
|
+
* so nothing above a hash join can have depended on an ordering claim —
|
|
101
|
+
* that asymmetry is the whole reason this gate is merge-only.)
|
|
102
|
+
* - the key source's PHYSICAL row estimate, when present, must not exceed
|
|
103
|
+
* min(maxKeys, breakEvenKeys) — the same expression the runtime's `push`
|
|
104
|
+
* decision uses. A merge semi join streams both sides; this node drains
|
|
105
|
+
* the key source into a Set before opening the target, so a rewrite whose
|
|
106
|
+
* seek then never fires is pure loss (the same scan, plus a set the merge
|
|
107
|
+
* join never built). The gate is a heuristic in BOTH directions: the
|
|
108
|
+
* estimate is advisory, and it counts ROWS while the runtime counts
|
|
109
|
+
* DISTINCT non-null keys, so a duplicate-heavy key source can be declined
|
|
110
|
+
* here and still have seeked. Both errors cost an optimization, never a
|
|
111
|
+
* row. The hash arm has no such gate because the hash join it replaces
|
|
112
|
+
* already built that set.
|
|
54
113
|
*
|
|
55
|
-
* NOTE: the three `getBestAccessPlan` probes run on every qualifying
|
|
114
|
+
* NOTE: the three `getBestAccessPlan` probes run on every qualifying semi
|
|
56
115
|
* join optimization, uncached. Cheap for both shipped modules; if a third-party
|
|
57
116
|
* module with an expensive planner ever shows up in optimization profiles,
|
|
58
117
|
* memoize by (table, seek column).
|
|
59
118
|
*
|
|
60
|
-
* NOTE: the `orderingLoadBearing` decline is conservative
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* `backlog/feat-key-set-seek-merge-semi-join`).
|
|
119
|
+
* NOTE: the `orderingLoadBearing` decline is conservative when
|
|
120
|
+
* `seekPreservesTargetOrder` is false — a future enhancement could re-sort the
|
|
121
|
+
* pushed output by the leaf's advertised order.
|
|
64
122
|
*/
|
|
65
123
|
import { createLogger } from '../../../common/logger.js';
|
|
66
124
|
import { BloomJoinNode } from '../../nodes/bloom-join-node.js';
|
|
67
|
-
import {
|
|
68
|
-
import {
|
|
125
|
+
import { MergeJoinNode } from '../../nodes/merge-join-node.js';
|
|
126
|
+
import { KeySetSemiJoinNode, RUNTIME_SET_MAX_KEYS, seekPreservesTargetOrder } from '../../nodes/key-set-semi-join-node.js';
|
|
127
|
+
import { IndexScanNode, IndexSeekNode } from '../../nodes/table-access-nodes.js';
|
|
128
|
+
import { FilterNode } from '../../nodes/filter.js';
|
|
69
129
|
import { PlanNodeCharacteristics } from '../../framework/characteristics.js';
|
|
70
130
|
import { isCorrelatedSubquery } from '../../cache/correlation-detector.js';
|
|
71
131
|
import { hasSemanticOrdering, normalizeCollationName } from '../../../util/comparison.js';
|
|
132
|
+
import { sharesSeekKeySpace } from '../../../types/builtin-types.js';
|
|
72
133
|
import { effectiveCollationOfTypes } from '../../analysis/comparison-collation.js';
|
|
73
|
-
import {
|
|
74
|
-
import {
|
|
134
|
+
import { hasRelationalDescendant } from '../../analysis/scalar-subqueries.js';
|
|
135
|
+
import { classifyConstraintCover, combineResidualExpressions } from './rule-select-access-path.js';
|
|
136
|
+
import { peelToSeekableAccessLeaf, rebuildChain, buildProbeRequest } from '../shared/access-leaf.js';
|
|
75
137
|
import { resolveIndexDescriptor } from '../../../vtab/index-descriptor.js';
|
|
76
138
|
import { validateAccessPlan, } from '../../../vtab/best-access-plan.js';
|
|
77
139
|
const log = createLogger('optimizer:rule:key-set-seek');
|
|
78
140
|
/**
|
|
79
141
|
* Structural + purity admission of the join itself: a single-pair, residual-free
|
|
80
|
-
*
|
|
81
|
-
* deterministic, pure) and whose probe chain
|
|
142
|
+
* SEMI join (hash or merge — both expose the same shape) whose key source may be
|
|
143
|
+
* drained exactly once (uncorrelated, deterministic, pure) and whose probe chain
|
|
144
|
+
* carries no write. The residual gate also covers `monotonic-merge-join`'s
|
|
145
|
+
* residualized non-driving equi-pairs: a two-pair IN-style shape arrives as one
|
|
146
|
+
* equi-pair plus a residual and declines here.
|
|
82
147
|
*/
|
|
83
148
|
function admitJoin(node) {
|
|
84
149
|
if (node.joinType !== 'semi')
|
|
@@ -111,25 +176,35 @@ function admitJoin(node) {
|
|
|
111
176
|
return true;
|
|
112
177
|
}
|
|
113
178
|
/**
|
|
114
|
-
* The probe-side access leaf, when
|
|
115
|
-
*
|
|
179
|
+
* The probe-side access leaf, when the rewrite can honour everything its
|
|
180
|
+
* `FilterInfo` enforces.
|
|
116
181
|
*
|
|
117
|
-
*
|
|
118
|
-
* ordering-only index walk (plan=0) — which reads every
|
|
119
|
-
* scan and differs only in emission order
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* promise
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
182
|
+
* Two arms. A WALK leaf must read every row with nothing pushed into it: a
|
|
183
|
+
* plain full scan, or an ordering-only index walk (plan=0) — which reads every
|
|
184
|
+
* row exactly like a full scan and differs only in emission order. A SEEK leaf
|
|
185
|
+
* (its residual Filter dropped on the module's promise to enforce the pushed
|
|
186
|
+
* predicate) is admitted unchanged when its `pushedConstraints` fully describe
|
|
187
|
+
* that promise — the caller re-applies them above the new node; see
|
|
188
|
+
* {@link admitSeekLeaf} for the gates. A pushed limit / offset declines both
|
|
189
|
+
* arms: a directive the multi-seek would not honour, and one a Filter cannot
|
|
190
|
+
* re-apply without changing which rows are dropped.
|
|
191
|
+
*
|
|
192
|
+
* Deliberately structural only for the walk arm: its `orderingLoadBearing`
|
|
193
|
+
* decline needs the pushdown (an absorbed Sort is fine when
|
|
194
|
+
* `seekPreservesTargetOrder` holds), so it lives in `ruleKeySetSeek` after
|
|
195
|
+
* `planPushdown` rather than here. The seek arm's ordering decline IS here
|
|
196
|
+
* (gate 5): `seekPreservesTargetOrder` is false for every seek, so no pushdown
|
|
197
|
+
* could ever change the answer.
|
|
126
198
|
*/
|
|
127
199
|
function admitLeaf(left) {
|
|
128
|
-
const leaf =
|
|
200
|
+
const leaf = peelToSeekableAccessLeaf(left);
|
|
129
201
|
if (!leaf) {
|
|
130
202
|
log('decline: left does not peel to an access leaf through Alias/Project/Filter');
|
|
131
203
|
return null;
|
|
132
204
|
}
|
|
205
|
+
if (leaf instanceof IndexSeekNode) {
|
|
206
|
+
return admitSeekLeaf(leaf);
|
|
207
|
+
}
|
|
133
208
|
const fi = leaf.filterInfo;
|
|
134
209
|
const isEveryRowWalk = fi.accessPath?.kind === 'fullScan'
|
|
135
210
|
|| (fi.accessPath?.kind === 'index' && fi.accessPath.plan === 'scan');
|
|
@@ -138,16 +213,62 @@ function admitLeaf(left) {
|
|
|
138
213
|
log('decline: leaf is not an unconstrained every-row walk');
|
|
139
214
|
return null;
|
|
140
215
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
216
|
+
return { leaf };
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Admission gates for an `IndexSeekNode` target. The type / collation /
|
|
220
|
+
* module-claim / break-even gates applied later concern the SEEK column and
|
|
221
|
+
* apply to this arm identically; these five concern the pushed predicate.
|
|
222
|
+
*/
|
|
223
|
+
function admitSeekLeaf(leaf) {
|
|
224
|
+
const fi = leaf.filterInfo;
|
|
225
|
+
// Gate 1: a pushed limit / offset is a directive the multi-seek would not
|
|
226
|
+
// honour, and unlike a predicate it cannot be re-applied by a Filter without
|
|
227
|
+
// changing which rows are dropped. (Unreachable today —
|
|
228
|
+
// `monotonic-limit-pushdown`'s peel cannot cross a join — but kept.)
|
|
229
|
+
if (fi.limit !== undefined || fi.offset !== undefined) {
|
|
230
|
+
log('decline: seek leaf carries a pushed limit/offset');
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
// Gate 2: the seek's FilterInfo is the sole enforcer of whatever the module
|
|
234
|
+
// promised; a seek we cannot describe is a seek we must not displace.
|
|
235
|
+
if (!leaf.pushedConstraints || leaf.pushedConstraints.length === 0) {
|
|
236
|
+
log('decline: seek leaf records no pushed constraints');
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
const residual = combineResidualExpressions(leaf.pushedConstraints.map(c => c.sourceExpression));
|
|
240
|
+
if (!residual) {
|
|
241
|
+
log('decline: seek leaf pushed constraints combine to no predicate');
|
|
148
242
|
return null;
|
|
149
243
|
}
|
|
150
|
-
|
|
244
|
+
// Gate 3: this rule runs in PostOptimization, so an expression re-inserted
|
|
245
|
+
// here gets no further optimization pass — an unphysicalized relational
|
|
246
|
+
// subquery inside it would reach emit unprepared. Constraint extraction
|
|
247
|
+
// should never produce one; this gate makes that independent of the
|
|
248
|
+
// extractor's behaviour.
|
|
249
|
+
if (hasRelationalDescendant(residual)) {
|
|
250
|
+
log('decline: seek leaf pushed predicate contains a relational node');
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
// Gate 4: `index-nested-loop` builds seeks whose keys — and therefore whose
|
|
254
|
+
// pushedConstraints — reference the OUTER side of a nested-loop join.
|
|
255
|
+
// Re-applying such a predicate above the semi join would still be correct,
|
|
256
|
+
// but the node drains the key source once per outer row, turning a linear
|
|
257
|
+
// plan quadratic. Same test `admitJoin` applies to the key source.
|
|
258
|
+
if (isCorrelatedSubquery(leaf)) {
|
|
259
|
+
log('decline: seek leaf is correlated (per-outer-row seek)');
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
// Gate 5: `seekPreservesTargetOrder` is false for every IndexSeekNode (it
|
|
263
|
+
// requires an ordering-only index walk whose index is the seek index), so a
|
|
264
|
+
// seek target can never reproduce an absorbed Sort's order — one ordering
|
|
265
|
+
// doctrine with the walk arm's gate in `ruleKeySetSeek`, resolved here
|
|
266
|
+
// because no pushdown could change the answer.
|
|
267
|
+
if (leaf.orderingLoadBearing) {
|
|
268
|
+
log('decline: seek leaf emission order is load-bearing (absorbed a Sort)');
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
return { leaf, residual };
|
|
151
272
|
}
|
|
152
273
|
/**
|
|
153
274
|
* Resolve the equi-pair to a target column index, then apply the two type gates
|
|
@@ -168,11 +289,32 @@ function resolveSeekColumns(leaf, right, leftAttrId, rightAttrId) {
|
|
|
168
289
|
}
|
|
169
290
|
const targetType = leaf.getAttributes()[seekCol].type;
|
|
170
291
|
const keyType = right.getAttributes()[keyIdx].type;
|
|
171
|
-
//
|
|
172
|
-
//
|
|
173
|
-
//
|
|
174
|
-
|
|
175
|
-
|
|
292
|
+
// One seek key space only. Identical types qualify; so does any pair drawn
|
|
293
|
+
// from INTEGER / REAL / NUMERIC, whose keys are identified by VALUE rather
|
|
294
|
+
// than by JS representation at every layer (see `sharesSeekKeySpace`). The
|
|
295
|
+
// key value is passed through RAW — coercing it into the target's type would
|
|
296
|
+
// truncate (`INTEGER_TYPE.parse(1.5)` → 1) and mint a key for a value `=`
|
|
297
|
+
// calls unequal. Any other cross-type pair could be encoded into seek keys
|
|
298
|
+
// that miss rows `=` considers equal, and the probe cannot resurrect a row
|
|
299
|
+
// the seek never returned.
|
|
300
|
+
//
|
|
301
|
+
// NOTE: a NaN seek key cannot under-fetch, so it needs no special handling
|
|
302
|
+
// here. A NaN key's probe string is `n:NaN`, which matches only a stored NaN.
|
|
303
|
+
// On the memory backend, REAL/NUMERIC rank NaN first and NaN = NaN in the
|
|
304
|
+
// very comparator their BTrees are built with, so the seek lands on the NaN
|
|
305
|
+
// entries; an INTEGER-declared column cannot hold NaN at all
|
|
306
|
+
// (`INTEGER_TYPE.validate` rejects it), so there is no row to miss — its
|
|
307
|
+
// comparator ranking NaN equal to everything can only over-fetch, which the
|
|
308
|
+
// probe trims. On the store backend `encodeNumeric` maps every NaN to one
|
|
309
|
+
// byte string (above every finite double), so the window is exactly the NaN
|
|
310
|
+
// rows. Dropping NaN keys the way NULL keys are dropped would be WRONG: it
|
|
311
|
+
// would under-fetch a genuinely NaN-valued row in a REAL/NUMERIC column.
|
|
312
|
+
// The reasoning is defensive: no builtin SQL surface produces a stored NaN —
|
|
313
|
+
// `0.0/0.0`, `1e308*1e308`, `sqrt(-1)` and `cast('nan' as real)` all yield NULL
|
|
314
|
+
// or 0, and a NaN bound as a parameter arrives as NULL. Only a plugin type,
|
|
315
|
+
// module or UDF can mint one.
|
|
316
|
+
if (!sharesSeekKeySpace(targetType.logicalType, keyType.logicalType)) {
|
|
317
|
+
log('decline: %s and %s do not share a seek key space', targetType.logicalType.name, keyType.logicalType.name);
|
|
176
318
|
return null;
|
|
177
319
|
}
|
|
178
320
|
// Semantic-ordering types ('PT1H' equals 'PT60M' but is byte-distinct): a
|
|
@@ -202,14 +344,14 @@ function claimedIndex(plan, seekCol) {
|
|
|
202
344
|
return plan.indexName;
|
|
203
345
|
}
|
|
204
346
|
/**
|
|
205
|
-
* The module's answers to the
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
* the cost slope is well defined.
|
|
347
|
+
* The module's answers to the synthesized requests: its cost for a runtime-set
|
|
348
|
+
* seek at two key counts (2 and the engine ceiling), plus the cost of the plan
|
|
349
|
+
* the seek branch would displace. `maxCount` 2 rather than 1 keeps the two
|
|
350
|
+
* seek points distinct so the cost slope is well defined.
|
|
209
351
|
*
|
|
210
352
|
* These requests are the ENGINE's, not the user's: a module that answers one
|
|
211
353
|
* with a plan `validateAccessPlan` rejects gets logged and declined, leaving the
|
|
212
|
-
*
|
|
354
|
+
* incoming semi join — the same disposition as every other gate. Failing the query
|
|
213
355
|
* instead would let a synthesized probe break a predicate that ran fine before.
|
|
214
356
|
*/
|
|
215
357
|
function probeModuleCosts(context, leaf, seekCol, keyRowsEstimate) {
|
|
@@ -240,10 +382,17 @@ function probeModuleCosts(context, leaf, seekCol, keyRowsEstimate) {
|
|
|
240
382
|
return plan;
|
|
241
383
|
};
|
|
242
384
|
try {
|
|
385
|
+
// The plan the seek branch displaces. A constrained leaf already records
|
|
386
|
+
// the module's cost for its own seek (`filterInfo.indexInfoOutput.
|
|
387
|
+
// estimatedCost` is `accessPlan.cost` verbatim — `makeIndexFilterInfo`
|
|
388
|
+
// spreads a base seeded with it and never overrides the field); an
|
|
389
|
+
// unconstrained walk has to be asked.
|
|
243
390
|
return {
|
|
244
391
|
seekAt2: ask([runtimeSetFilter(2)]),
|
|
245
392
|
seekAtMax: ask([runtimeSetFilter(RUNTIME_SET_MAX_KEYS)]),
|
|
246
|
-
|
|
393
|
+
baselineCost: leaf instanceof IndexSeekNode
|
|
394
|
+
? leaf.filterInfo.indexInfoOutput.estimatedCost
|
|
395
|
+
: ask([]).cost,
|
|
247
396
|
};
|
|
248
397
|
}
|
|
249
398
|
catch (e) {
|
|
@@ -305,30 +454,56 @@ function planPushdown(context, leaf, right, cols) {
|
|
|
305
454
|
};
|
|
306
455
|
}
|
|
307
456
|
/**
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
457
|
+
* Absorbs floating-point jitter in the break-even solve before `Math.floor`.
|
|
458
|
+
* The tie case is real, not hypothetical: the memory module prices a k-key
|
|
459
|
+
* runtime-set seek and a k-row literal equality seek with one formula, so a
|
|
460
|
+
* pushed single-row equality baseline lands EXACTLY on the interpolation line
|
|
461
|
+
* at k=1 — in exact arithmetic the floor yields 1 (accept at the tie; a
|
|
462
|
+
* cost-equal seek is harmless), but the subtract-then-divide can land a hair
|
|
463
|
+
* under the integer and turn the tie into a decline.
|
|
313
464
|
*
|
|
314
|
-
*
|
|
315
|
-
*
|
|
316
|
-
*
|
|
465
|
+
* NOTE: the consequence on the memory module is that an equality-pushed seek
|
|
466
|
+
* target always lands on `breakEvenKeys === 1`, so the plan is rewritten but
|
|
467
|
+
* the runtime seek branch fires only for a one-key set. That is the module's
|
|
468
|
+
* own verdict (it prices both seeks off the seek-key count and knows nothing
|
|
469
|
+
* of how many rows each window holds), not an engine choice. A module that
|
|
470
|
+
* prices an equality seek from its matched-row count — the store does — yields
|
|
471
|
+
* a break-even that discriminates, and the seek branch fires accordingly.
|
|
472
|
+
*/
|
|
473
|
+
const BREAK_EVEN_EPSILON = 1e-9;
|
|
474
|
+
/**
|
|
475
|
+
* The distinct key count at which the module's own seek cost overtakes the
|
|
476
|
+
* cost of the plan being displaced (the plain scan for a walk leaf, the leaf's
|
|
477
|
+
* own pushed seek for a seek leaf). Interpolates the runtime-set seek cost as
|
|
478
|
+
* a linear function of key count through the two probe points and solves
|
|
479
|
+
* against the baseline. The linear fit is an approximation, but it is the
|
|
480
|
+
* MODULE's approximation — cost authority stays with the module rather than a
|
|
481
|
+
* second cost model living in the optimizer.
|
|
482
|
+
*
|
|
483
|
+
* A flat-or-falling seek cost (`slope <= 0`) never overtakes the baseline, so
|
|
484
|
+
* the engine ceiling becomes the threshold. A baseline cheaper than a two-key
|
|
485
|
+
* seek interpolates below 1 and the caller declines — for a seek leaf that is
|
|
486
|
+
* the honest "the pushed seek beats any key-set seek" answer.
|
|
487
|
+
*
|
|
488
|
+
* NOTE: the comparison charges nothing for the re-applied predicate's per-row
|
|
489
|
+
* evaluation on a seek leaf's seek branch. It is bounded by the number of rows
|
|
490
|
+
* the seek returns (≤ key count), so it cannot flip a decision by much.
|
|
317
491
|
*/
|
|
318
492
|
function interpolateBreakEven(costs) {
|
|
319
493
|
const slope = (costs.seekAtMax.cost - costs.seekAt2.cost) / (RUNTIME_SET_MAX_KEYS - 2);
|
|
320
494
|
if (slope <= 0)
|
|
321
495
|
return RUNTIME_SET_MAX_KEYS;
|
|
322
|
-
return Math.max(0, Math.min(RUNTIME_SET_MAX_KEYS, Math.floor(2 + (costs.
|
|
496
|
+
return Math.max(0, Math.min(RUNTIME_SET_MAX_KEYS, Math.floor(2 + (costs.baselineCost - costs.seekAt2.cost) / slope + BREAK_EVEN_EPSILON)));
|
|
323
497
|
}
|
|
324
498
|
export function ruleKeySetSeek(node, context) {
|
|
325
|
-
if (!(node instanceof BloomJoinNode))
|
|
499
|
+
if (!(node instanceof BloomJoinNode) && !(node instanceof MergeJoinNode))
|
|
326
500
|
return null;
|
|
327
501
|
if (!admitJoin(node))
|
|
328
502
|
return null;
|
|
329
|
-
const
|
|
330
|
-
if (!
|
|
503
|
+
const admitted = admitLeaf(node.left);
|
|
504
|
+
if (!admitted)
|
|
331
505
|
return null;
|
|
506
|
+
const { leaf, residual } = admitted;
|
|
332
507
|
const pair = node.equiPairs[0];
|
|
333
508
|
const cols = resolveSeekColumns(leaf, node.right, pair.leftAttrId, pair.rightAttrId);
|
|
334
509
|
if (!cols)
|
|
@@ -336,8 +511,59 @@ export function ruleKeySetSeek(node, context) {
|
|
|
336
511
|
const pushdown = planPushdown(context, leaf, node.right, cols);
|
|
337
512
|
if (!pushdown)
|
|
338
513
|
return null;
|
|
514
|
+
// A leaf whose emission order absorbed a SortNode (sort absorption in
|
|
515
|
+
// rule-grow-retrieve, before this join existed) is the only thing producing
|
|
516
|
+
// the query's ORDER BY: the join preserves probe order at runtime, and the
|
|
517
|
+
// replacement must keep serving that order. When the seek index is the walk
|
|
518
|
+
// index (`seekPreservesTargetOrder`) both runtime branches emit in the
|
|
519
|
+
// leaf's own order and the absorbed Sort stays served; otherwise a pushed
|
|
520
|
+
// multi-seek would emit in seek-key order — decline, keeping the
|
|
521
|
+
// order-preserving join.
|
|
522
|
+
if (leaf instanceof IndexScanNode && leaf.orderingLoadBearing
|
|
523
|
+
&& !seekPreservesTargetOrder(leaf, pushdown)) {
|
|
524
|
+
log('decline: leaf emission order is load-bearing (absorbed a Sort) and the seek would not reproduce it');
|
|
525
|
+
return null;
|
|
526
|
+
}
|
|
527
|
+
if (node instanceof MergeJoinNode) {
|
|
528
|
+
// Merge-arm-only gate 1: the merge join propagates the probe side's
|
|
529
|
+
// ordering / monotonicOn upward for semi, so an ancestor (or an already
|
|
530
|
+
// dropped Sort) may depend on that order. The replacement must be able
|
|
531
|
+
// to claim the same order — KeySetSemiJoinNode does so exactly when
|
|
532
|
+
// this predicate holds. (The hash arm needs no such gate: BloomJoinNode
|
|
533
|
+
// propagates no ordering, so nothing above it can have depended on one.)
|
|
534
|
+
if (!seekPreservesTargetOrder(leaf, pushdown)) {
|
|
535
|
+
log('decline: merge join propagates the probe order and the seek cannot reproduce it');
|
|
536
|
+
return null;
|
|
537
|
+
}
|
|
538
|
+
// Merge-arm-only gate 2: do not trade a streaming operator for an
|
|
539
|
+
// unbounded materialization. When the key source's row estimate already
|
|
540
|
+
// exceeds the runtime's own seek threshold — the same expression
|
|
541
|
+
// `emitKeySetSemiJoin` uses for its `push` decision — the seek is very
|
|
542
|
+
// unlikely to fire and the rewrite is then pure loss: the same scan the
|
|
543
|
+
// merge join did, plus a probe Set the merge join never built. Heuristic
|
|
544
|
+
// in both directions (the estimate is advisory, and it counts ROWS where
|
|
545
|
+
// the runtime counts DISTINCT non-null keys), so it can only cost an
|
|
546
|
+
// optimization, never a row. Absent estimate ⇒ proceed, the same posture
|
|
547
|
+
// the rest of the rule takes toward advisory numbers. The PHYSICAL
|
|
548
|
+
// estimate is read because the logical `estimatedRows` getter reads
|
|
549
|
+
// `undefined` through a physical access node. NOTE: inert on the memory
|
|
550
|
+
// backend today (its row estimate for a freshly-populated table reads 0)
|
|
551
|
+
// — this gate exists for modules that report real cardinality.
|
|
552
|
+
const keyRows = node.right.physical.estimatedRows;
|
|
553
|
+
if (keyRows !== undefined && keyRows > Math.min(pushdown.maxKeys, pushdown.breakEvenKeys)) {
|
|
554
|
+
log('decline: key source estimate %d exceeds the seek threshold min(%d, %d)', keyRows, pushdown.maxKeys, pushdown.breakEvenKeys);
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
339
558
|
const keySetJoin = new KeySetSemiJoinNode(node.scope, leaf, node.right, pair.leftAttrId, pair.rightAttrId, pushdown);
|
|
340
|
-
|
|
341
|
-
|
|
559
|
+
// For a seek target, re-apply the module-enforced predicate DIRECTLY above
|
|
560
|
+
// the node — inside the peeled wrappers, because a peeled trivial Project
|
|
561
|
+
// may not carry the predicate's columns. The node exposes the target's full
|
|
562
|
+
// attribute set, so the predicate's column references resolve here.
|
|
563
|
+
const replacement = residual !== undefined
|
|
564
|
+
? new FilterNode(leaf.scope, keySetJoin, residual)
|
|
565
|
+
: keySetJoin;
|
|
566
|
+
log('Replaced %s semi join with KeySetSemiJoin on %s.%s via %s (breakEven=%d%s)', node instanceof MergeJoinNode ? 'merge' : 'hash', leaf.tableSchema.name, leaf.tableSchema.columns[cols.seekCol]?.name, pushdown.indexName, pushdown.breakEvenKeys, residual !== undefined ? ', pushed predicate re-applied' : '');
|
|
567
|
+
return rebuildChain(node.left, leaf, replacement);
|
|
342
568
|
}
|
|
343
569
|
//# sourceMappingURL=rule-key-set-seek.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-key-set-seek.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-key-set-seek.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rule-key-set-seek.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-key-set-seek.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-monotonic-range-access.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-monotonic-range-access.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-monotonic-range-access.d.ts","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-monotonic-range-access.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAyN7D,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CAQ1F"}
|
|
@@ -86,7 +86,7 @@ function leafWithRangeBound(leaf, rb) {
|
|
|
86
86
|
return new IndexScanNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.providesOrdering, undefined, leaf.advertisement, rb, leaf.suppressMonotonic, leaf.orderingLoadBearing);
|
|
87
87
|
}
|
|
88
88
|
// IndexSeekNode
|
|
89
|
-
return new IndexSeekNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.seekKeys, leaf.isRange, leaf.providesOrdering, undefined, leaf.advertisement, rb, leaf.suppressMonotonic);
|
|
89
|
+
return new IndexSeekNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.seekKeys, leaf.isRange, leaf.providesOrdering, undefined, leaf.advertisement, rb, leaf.suppressMonotonic, leaf.orderingLoadBearing, leaf.pushedConstraints);
|
|
90
90
|
}
|
|
91
91
|
/** Clone a leaf, suppressing the lifted `monotonicOn` advertisement. */
|
|
92
92
|
function leafWithMonotonicSuppressed(leaf) {
|
|
@@ -96,7 +96,7 @@ function leafWithMonotonicSuppressed(leaf) {
|
|
|
96
96
|
if (leaf instanceof IndexScanNode) {
|
|
97
97
|
return new IndexScanNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.providesOrdering, undefined, leaf.advertisement, leaf.rangeBoundedOn, true, leaf.orderingLoadBearing);
|
|
98
98
|
}
|
|
99
|
-
return new IndexSeekNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.seekKeys, leaf.isRange, leaf.providesOrdering, undefined, leaf.advertisement, leaf.rangeBoundedOn, true);
|
|
99
|
+
return new IndexSeekNode(leaf.scope, leaf.source, leaf.filterInfo, leaf.indexName, leaf.seekKeys, leaf.isRange, leaf.providesOrdering, undefined, leaf.advertisement, leaf.rangeBoundedOn, true, leaf.orderingLoadBearing, leaf.pushedConstraints);
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
102
|
* Annotation pass for a physical access leaf. Sets `rangeBoundedOn` when the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-monotonic-range-access.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-monotonic-range-access.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rule-monotonic-range-access.js","sourceRoot":"","sources":["../../../../../src/planner/rules/access/rule-monotonic-range-access.ts"],"names":[],"mappings":"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"}
|