@quereus/quereus 4.6.0 → 4.7.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/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 +9 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +36 -10
- 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 +15 -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 +4 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -4
- 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/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/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 +8 -11
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.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/{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/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/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +3 -69
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +16 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +62 -2
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/module.d.ts +26 -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/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,4 +1,4 @@
|
|
|
1
|
-
import { PlanNode, isRelationalNode,
|
|
1
|
+
import { PlanNode, isRelationalNode, asScalarNodes } from './plan-node.js';
|
|
2
2
|
import { PlanNodeType } from './plan-node-type.js';
|
|
3
3
|
/**
|
|
4
4
|
* Represents constraint checking for DML operations.
|
|
@@ -57,40 +57,35 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
57
57
|
if (this.notNullDefaults) {
|
|
58
58
|
this.notNullDefaults.forEach(d => children.push(d.defaultNode));
|
|
59
59
|
}
|
|
60
|
+
// Add mutation context value expressions so the optimizer can rewrite them too.
|
|
61
|
+
if (this.mutationContextValues) {
|
|
62
|
+
children.push(...this.mutationContextValues.values());
|
|
63
|
+
}
|
|
60
64
|
return children;
|
|
61
65
|
}
|
|
62
66
|
withChildren(newChildren) {
|
|
63
67
|
const constraintCount = this.constraintChecks.length;
|
|
64
68
|
const defaultCount = this.notNullDefaults?.length ?? 0;
|
|
65
|
-
const
|
|
69
|
+
const ctxKeys = [...(this.mutationContextValues?.keys() ?? [])];
|
|
70
|
+
const expectedChildren = 1 + constraintCount + defaultCount + ctxKeys.length;
|
|
66
71
|
if (newChildren.length !== expectedChildren) {
|
|
67
72
|
throw new Error(`ConstraintCheckNode expects ${expectedChildren} children, got ${newChildren.length}`);
|
|
68
73
|
}
|
|
69
74
|
const newSource = newChildren[0];
|
|
70
|
-
const newConstraintExprs = newChildren.slice(1, 1 + constraintCount);
|
|
71
|
-
const newDefaultExprs = newChildren.slice(1 + constraintCount);
|
|
75
|
+
const newConstraintExprs = asScalarNodes(newChildren.slice(1, 1 + constraintCount), 'ConstraintCheckNode constraint');
|
|
76
|
+
const newDefaultExprs = asScalarNodes(newChildren.slice(1 + constraintCount, 1 + constraintCount + defaultCount), 'ConstraintCheckNode default');
|
|
77
|
+
const newCtxExprs = asScalarNodes(newChildren.slice(1 + constraintCount + defaultCount), 'ConstraintCheckNode context');
|
|
72
78
|
// Type check the source
|
|
73
79
|
if (!isRelationalNode(newSource)) {
|
|
74
80
|
throw new Error('ConstraintCheckNode: first child must be a RelationalPlanNode');
|
|
75
81
|
}
|
|
76
|
-
// Type check constraint expressions
|
|
77
|
-
for (let i = 0; i < newConstraintExprs.length; i++) {
|
|
78
|
-
const expr = newConstraintExprs[i];
|
|
79
|
-
if (!isScalarNode(expr)) {
|
|
80
|
-
throw new Error(`ConstraintCheckNode: constraint child ${i + 1} must be a ScalarPlanNode`);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
for (let i = 0; i < newDefaultExprs.length; i++) {
|
|
84
|
-
const expr = newDefaultExprs[i];
|
|
85
|
-
if (!isScalarNode(expr)) {
|
|
86
|
-
throw new Error(`ConstraintCheckNode: default child ${i + 1} must be a ScalarPlanNode`);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
82
|
// Return same instance if nothing changed
|
|
83
|
+
const ctxExprs = [...(this.mutationContextValues?.values() ?? [])];
|
|
90
84
|
const constraintsUnchanged = newConstraintExprs.every((expr, i) => expr === this.constraintChecks[i].expression);
|
|
91
85
|
const defaultsUnchanged = !this.notNullDefaults
|
|
92
86
|
|| newDefaultExprs.every((expr, i) => expr === this.notNullDefaults[i].defaultNode);
|
|
93
|
-
|
|
87
|
+
const ctxUnchanged = newCtxExprs.every((e, i) => e === ctxExprs[i]);
|
|
88
|
+
if (newSource === this.source && constraintsUnchanged && defaultsUnchanged && ctxUnchanged) {
|
|
94
89
|
return this;
|
|
95
90
|
}
|
|
96
91
|
// Rebuild constraint checks with new expressions
|
|
@@ -104,8 +99,11 @@ export class ConstraintCheckNode extends PlanNode {
|
|
|
104
99
|
defaultNode: newDefaultExprs[i],
|
|
105
100
|
}))
|
|
106
101
|
: undefined;
|
|
102
|
+
const newContextValues = this.mutationContextValues
|
|
103
|
+
? new Map(ctxKeys.map((k, i) => [k, newCtxExprs[i]]))
|
|
104
|
+
: undefined;
|
|
107
105
|
// Create new instance
|
|
108
|
-
return new ConstraintCheckNode(this.scope, newSource, this.table, this.operation, this.oldRowDescriptor, this.newRowDescriptor, this.flatRowDescriptor, newConstraintChecks,
|
|
106
|
+
return new ConstraintCheckNode(this.scope, newSource, this.table, this.operation, this.oldRowDescriptor, this.newRowDescriptor, this.flatRowDescriptor, newConstraintChecks, newContextValues, this.contextAttributes, this.contextDescriptor, this.onConflict, newNotNullDefaults);
|
|
109
107
|
}
|
|
110
108
|
get estimatedRows() {
|
|
111
109
|
return this.source.estimatedRows;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraint-check-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/constraint-check-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAoF,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"constraint-check-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/constraint-check-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,11 @@ import type * as AST from '../../parser/ast.js';
|
|
|
7
7
|
* This is a DDL operation that adds an assertion to the schema.
|
|
8
8
|
*/
|
|
9
9
|
export declare class CreateAssertionNode extends VoidNode {
|
|
10
|
+
readonly schemaName: string;
|
|
10
11
|
readonly name: string;
|
|
11
12
|
readonly checkExpression: AST.Expression;
|
|
12
13
|
readonly nodeType = PlanNodeType.CreateAssertion;
|
|
13
|
-
constructor(scope: Scope, name: string, checkExpression: AST.Expression);
|
|
14
|
+
constructor(scope: Scope, schemaName: string, name: string, checkExpression: AST.Expression);
|
|
14
15
|
toString(): string;
|
|
15
16
|
getLogicalAttributes(): Record<string, unknown>;
|
|
16
17
|
computePhysical(_children: readonly PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;aAK7B,IAAI,EAAE,MAAM;aACZ,eAAe,EAAE,GAAG,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"create-assertion-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;aAK7B,UAAU,EAAE,MAAM;aAClB,IAAI,EAAE,MAAM;aACZ,eAAe,EAAE,GAAG,CAAC,UAAU;IANjD,SAAkB,QAAQ,gCAAgC;gBAGxD,KAAK,EAAE,KAAK,EACI,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,GAAG,CAAC,UAAU;IAKxC,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ/C,eAAe,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAGhG"}
|
|
@@ -5,19 +5,22 @@ import { PlanNodeType } from './plan-node-type.js';
|
|
|
5
5
|
* This is a DDL operation that adds an assertion to the schema.
|
|
6
6
|
*/
|
|
7
7
|
export class CreateAssertionNode extends VoidNode {
|
|
8
|
+
schemaName;
|
|
8
9
|
name;
|
|
9
10
|
checkExpression;
|
|
10
11
|
nodeType = PlanNodeType.CreateAssertion;
|
|
11
|
-
constructor(scope, name, checkExpression) {
|
|
12
|
+
constructor(scope, schemaName, name, checkExpression) {
|
|
12
13
|
super(scope);
|
|
14
|
+
this.schemaName = schemaName;
|
|
13
15
|
this.name = name;
|
|
14
16
|
this.checkExpression = checkExpression;
|
|
15
17
|
}
|
|
16
18
|
toString() {
|
|
17
|
-
return `CREATE ASSERTION ${this.name}`;
|
|
19
|
+
return `CREATE ASSERTION ${this.schemaName}.${this.name}`;
|
|
18
20
|
}
|
|
19
21
|
getLogicalAttributes() {
|
|
20
22
|
return {
|
|
23
|
+
schemaName: this.schemaName,
|
|
21
24
|
name: this.name,
|
|
22
25
|
checkExpression: this.checkExpression.toString?.() || 'complex expression',
|
|
23
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAK7B;IACA;
|
|
1
|
+
{"version":3,"file":"create-assertion-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/create-assertion-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA2B,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAK7B;IACA;IACA;IANA,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC;IAE1D,YACE,KAAY,EACI,UAAkB,EAClB,IAAY,EACZ,eAA+B;QAE/C,KAAK,CAAC,KAAK,CAAC,CAAC;QAJG,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAQ;QACZ,oBAAe,GAAf,eAAe,CAAgB;IAGjD,CAAC;IAEQ,QAAQ;QACf,OAAO,oBAAoB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5D,CAAC;IAEQ,oBAAoB;QAC3B,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,IAAI,oBAAoB;SAC3E,CAAC;IACJ,CAAC;IAEQ,eAAe,CAAC,SAAwC;QAC/D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -37,25 +37,35 @@ export declare class CTENode extends PlanNode implements CTEPlanNode, CTEScopeNo
|
|
|
37
37
|
readonly materializationHint: 'materialized' | 'not_materialized' | undefined;
|
|
38
38
|
readonly isRecursive: boolean;
|
|
39
39
|
/**
|
|
40
|
-
* Resolved materialization decision for emission,
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
40
|
+
* Resolved materialization decision for emission: when true, emitCTE buffers
|
|
41
|
+
* this CTE's rows once per statement execution and every reference reads that
|
|
42
|
+
* one shared buffer. Set at build time for a data-modifying body (whose write
|
|
43
|
+
* must run exactly once), and by the materialization-advisory pass for a
|
|
44
|
+
* multi-referenced or MATERIALIZED-hinted read-only body.
|
|
44
45
|
*/
|
|
45
46
|
readonly materialize: boolean;
|
|
46
47
|
readonly nodeType = PlanNodeType.CTE;
|
|
47
48
|
readonly isCTECapable: true;
|
|
49
|
+
/**
|
|
50
|
+
* Stable identity object for this CTE, minted once when the CTE is built and
|
|
51
|
+
* threaded through every optimizer rebuild. Two `CTENode` instances that
|
|
52
|
+
* describe the SAME source CTE share one descriptor, which is what lets
|
|
53
|
+
* emitCTE's per-execution buffer be shared across them (plan ids are not:
|
|
54
|
+
* a node reachable from two parents can be rebuilt once per parent path).
|
|
55
|
+
* Mirrors `RecursiveCTENode.tableDescriptor`.
|
|
56
|
+
*/
|
|
48
57
|
readonly tableDescriptor: TableDescriptor;
|
|
49
58
|
private attributesCache;
|
|
50
59
|
private typeCache;
|
|
51
60
|
constructor(scope: Scope, cteName: string, columns: string[] | undefined, source: RelationalPlanNode, materializationHint: 'materialized' | 'not_materialized' | undefined, isRecursive?: boolean,
|
|
52
61
|
/**
|
|
53
|
-
* Resolved materialization decision for emission,
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
62
|
+
* Resolved materialization decision for emission: when true, emitCTE buffers
|
|
63
|
+
* this CTE's rows once per statement execution and every reference reads that
|
|
64
|
+
* one shared buffer. Set at build time for a data-modifying body (whose write
|
|
65
|
+
* must run exactly once), and by the materialization-advisory pass for a
|
|
66
|
+
* multi-referenced or MATERIALIZED-hinted read-only body.
|
|
57
67
|
*/
|
|
58
|
-
materialize?: boolean);
|
|
68
|
+
materialize?: boolean, tableDescriptor?: TableDescriptor);
|
|
59
69
|
private buildAttributes;
|
|
60
70
|
private buildType;
|
|
61
71
|
getAttributes(): readonly Attribute[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cte-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAoB,MAAM,gBAAgB,CAAC;AACrJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC1C,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,2DAA2D;IAC3D,aAAa,IAAI,SAAS,SAAS,EAAE,CAAC;IAEtC,uCAAuC;IACvC,OAAO,IAAI,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,QAAS,YAAW,WAAW,EAAE,YAAY,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"cte-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAoB,MAAM,gBAAgB,CAAC;AACrJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC1C,2BAA2B;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,2DAA2D;IAC3D,aAAa,IAAI,SAAS,SAAS,EAAE,CAAC;IAEtC,uCAAuC;IACvC,OAAO,IAAI,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,mBAAmB;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;CAC1C;AAED;;;GAGG;AACH,qBAAa,OAAQ,SAAQ,QAAS,YAAW,WAAW,EAAE,YAAY,EAAE,UAAU;aAkBpE,OAAO,EAAE,MAAM;aACf,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS;aAC7B,MAAM,EAAE,kBAAkB;aAC1B,mBAAmB,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS;aACpE,WAAW,EAAE,OAAO;IACpC;;;;;;OAMG;aACa,WAAW,EAAE,OAAO;IA7BrC,QAAQ,CAAC,QAAQ,oBAAoB;IACrC,QAAQ,CAAC,YAAY,EAAG,IAAI,CAAU;IACtC;;;;;;;OAOG;IACH,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAE1C,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,SAAS,CAAuB;gBAGvC,KAAK,EAAE,KAAK,EACI,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,EAC7B,MAAM,EAAE,kBAAkB,EAC1B,mBAAmB,EAAE,cAAc,GAAG,kBAAkB,GAAG,SAAS,EACpE,WAAW,GAAE,OAAe;IAC5C;;;;;;OAMG;IACa,WAAW,GAAE,OAAe,EAC5C,eAAe,CAAC,EAAE,eAAe;IAUlC,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,SAAS;IAejB,aAAa,IAAI,SAAS,SAAS,EAAE;IAIrC,OAAO,IAAI,YAAY;IAIvB,WAAW,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI5C,YAAY,IAAI,SAAS,CAAC,kBAAkB,CAAC;IAI7C,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IAgCxD,YAAY,IAAI,kBAAkB;IAIzB,QAAQ,IAAI,MAAM;IAWlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUxD"}
|
|
@@ -14,17 +14,26 @@ export class CTENode extends PlanNode {
|
|
|
14
14
|
materialize;
|
|
15
15
|
nodeType = PlanNodeType.CTE;
|
|
16
16
|
isCTECapable = true;
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Stable identity object for this CTE, minted once when the CTE is built and
|
|
19
|
+
* threaded through every optimizer rebuild. Two `CTENode` instances that
|
|
20
|
+
* describe the SAME source CTE share one descriptor, which is what lets
|
|
21
|
+
* emitCTE's per-execution buffer be shared across them (plan ids are not:
|
|
22
|
+
* a node reachable from two parents can be rebuilt once per parent path).
|
|
23
|
+
* Mirrors `RecursiveCTENode.tableDescriptor`.
|
|
24
|
+
*/
|
|
25
|
+
tableDescriptor;
|
|
18
26
|
attributesCache;
|
|
19
27
|
typeCache;
|
|
20
28
|
constructor(scope, cteName, columns, source, materializationHint, isRecursive = false,
|
|
21
29
|
/**
|
|
22
|
-
* Resolved materialization decision for emission,
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
30
|
+
* Resolved materialization decision for emission: when true, emitCTE buffers
|
|
31
|
+
* this CTE's rows once per statement execution and every reference reads that
|
|
32
|
+
* one shared buffer. Set at build time for a data-modifying body (whose write
|
|
33
|
+
* must run exactly once), and by the materialization-advisory pass for a
|
|
34
|
+
* multi-referenced or MATERIALIZED-hinted read-only body.
|
|
26
35
|
*/
|
|
27
|
-
materialize = false) {
|
|
36
|
+
materialize = false, tableDescriptor) {
|
|
28
37
|
// Self-cost only: the source flows in via getChildren(). Self is the CTE
|
|
29
38
|
// materialization overhead.
|
|
30
39
|
super(scope, 10);
|
|
@@ -34,6 +43,7 @@ export class CTENode extends PlanNode {
|
|
|
34
43
|
this.materializationHint = materializationHint;
|
|
35
44
|
this.isRecursive = isRecursive;
|
|
36
45
|
this.materialize = materialize;
|
|
46
|
+
this.tableDescriptor = tableDescriptor ?? {}; // Identity object for table context lookup
|
|
37
47
|
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
38
48
|
this.typeCache = new Cached(() => this.buildType());
|
|
39
49
|
}
|
|
@@ -86,8 +96,10 @@ export class CTENode extends PlanNode {
|
|
|
86
96
|
if (newSource === this.source) {
|
|
87
97
|
return this;
|
|
88
98
|
}
|
|
89
|
-
// Create new instance with updated source
|
|
90
|
-
|
|
99
|
+
// Create new instance with updated source. `tableDescriptor` is threaded
|
|
100
|
+
// through so a rebuilt copy still shares the original's identity — see the
|
|
101
|
+
// field's doc comment.
|
|
102
|
+
return new CTENode(this.scope, this.cteName, this.columns, newSource, this.materializationHint, this.isRecursive, this.materialize, this.tableDescriptor);
|
|
91
103
|
}
|
|
92
104
|
getCTESource() {
|
|
93
105
|
return this.source;
|
|
@@ -96,7 +108,11 @@ export class CTENode extends PlanNode {
|
|
|
96
108
|
const recursiveText = this.isRecursive ? 'RECURSIVE ' : '';
|
|
97
109
|
const columnsText = this.columns ? `(${this.columns.join(', ')})` : '';
|
|
98
110
|
const materializationText = this.materializationHint ? ` ${this.materializationHint.toUpperCase()}` : '';
|
|
99
|
-
|
|
111
|
+
// The resolved decision, which is NOT the hint: a data-modifying body is
|
|
112
|
+
// always buffered and a multi-referenced one usually is, hint or none.
|
|
113
|
+
// Matches RecursiveCTENode.toString().
|
|
114
|
+
const bufferedText = this.materialize ? ' [buffered]' : '';
|
|
115
|
+
return `${recursiveText}CTE ${this.cteName}${columnsText}${materializationText}${bufferedText}`;
|
|
100
116
|
}
|
|
101
117
|
getLogicalAttributes() {
|
|
102
118
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cte-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2F,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAErJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA8B9C;;;GAGG;AACH,MAAM,OAAO,OAAQ,SAAQ,QAAQ;
|
|
1
|
+
{"version":3,"file":"cte-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/cte-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA2F,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAErJ,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AA8B9C;;;GAGG;AACH,MAAM,OAAO,OAAQ,SAAQ,QAAQ;IAkBnB;IACA;IACA;IACA;IACA;IAQA;IA7BR,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC;IAC5B,YAAY,GAAG,IAAa,CAAC;IACtC;;;;;;;OAOG;IACM,eAAe,CAAkB;IAElC,eAAe,CAAsB;IACrC,SAAS,CAAuB;IAExC,YACC,KAAY,EACI,OAAe,EACf,OAA6B,EAC7B,MAA0B,EAC1B,mBAAoE,EACpE,cAAuB,KAAK;IAC5C;;;;;;OAMG;IACa,cAAuB,KAAK,EAC5C,eAAiC;QAEjC,yEAAyE;QACzE,4BAA4B;QAC5B,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAjBD,YAAO,GAAP,OAAO,CAAQ;QACf,YAAO,GAAP,OAAO,CAAsB;QAC7B,WAAM,GAAN,MAAM,CAAoB;QAC1B,wBAAmB,GAAnB,mBAAmB,CAAiD;QACpE,gBAAW,GAAX,WAAW,CAAiB;QAQ5B,gBAAW,GAAX,WAAW,CAAiB;QAM5C,IAAI,CAAC,eAAe,GAAG,eAAe,IAAI,EAAE,CAAC,CAAC,2CAA2C;QACzF,IAAI,CAAC,eAAe,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IAEO,eAAe;QACtB,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAErF,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI;YACrC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,cAAc,EAAE,OAAO,IAAI,CAAC,OAAO,EAAE;SACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,SAAS;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO;YACN,SAAS,EAAE,UAAU;YACrB,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,kDAAkD;YAC1E,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;aACf,CAAC,CAAC;YACH,IAAI,EAAE,EAAE,EAAE,gCAAgC;YAC1C,cAAc,EAAE,EAAE;SAClB,CAAC;IACH,CAAC;IAED,aAAa;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACnC,CAAC;IAED,OAAO;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IAC7B,CAAC;IAED,WAAW;QACV,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,YAAY;QACX,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,YAAY,CAAC,WAAgC;QAC5C,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC;QAEhC,aAAa;QACb,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAChE,CAAC;QAED,0CAA0C;QAC1C,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACb,CAAC;QAED,yEAAyE;QACzE,2EAA2E;QAC3E,uBAAuB;QACvB,OAAO,IAAI,OAAO,CACjB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,EACZ,SAA+B,EAC/B,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACpB,CAAC;IACH,CAAC;IAED,YAAY;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAEQ,QAAQ;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,yEAAyE;QACzE,uEAAuE;QACvE,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,OAAO,GAAG,aAAa,OAAO,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,mBAAmB,GAAG,YAAY,EAAE,CAAC;IACjG,CAAC;IAEQ,oBAAoB;QAC5B,OAAO;YACN,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;SACzB,CAAC;IACH,CAAC;CACD"}
|
|
@@ -11,14 +11,32 @@ export declare class DeleteNode extends PlanNode implements RelationalPlanNode {
|
|
|
11
11
|
readonly source: RelationalPlanNode;
|
|
12
12
|
readonly oldRowDescriptor?: RowDescriptor | undefined;
|
|
13
13
|
readonly flatRowDescriptor?: RowDescriptor | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Mutation context value expressions.
|
|
16
|
+
*
|
|
17
|
+
* NOTE: deliberately NOT exposed via `getChildren` (OPT-009): no emitter or rule reads
|
|
18
|
+
* this map from this node — only `DmlExecutorNode` / `ConstraintCheckNode` consume it,
|
|
19
|
+
* and they expose their copies. It is therefore a pass-through reference that goes
|
|
20
|
+
* stale (holds pre-rewrite subtrees) once the optimizer rebuilds those nodes. If
|
|
21
|
+
* anything ever starts reading it here, expose it as a child first.
|
|
22
|
+
*/
|
|
14
23
|
readonly mutationContextValues?: Map<string, ScalarPlanNode> | undefined;
|
|
15
24
|
readonly contextAttributes?: Attribute[] | undefined;
|
|
16
25
|
readonly contextDescriptor?: RowDescriptor | undefined;
|
|
17
26
|
readonly nodeType = PlanNodeType.Delete;
|
|
18
27
|
constructor(scope: Scope, table: TableReferenceNode, source: RelationalPlanNode, // Typically a FilterNode wrapping a TableReferenceNode
|
|
19
28
|
oldRowDescriptor?: RowDescriptor | undefined, // For constraint checking
|
|
20
|
-
flatRowDescriptor?: RowDescriptor | undefined,
|
|
21
|
-
|
|
29
|
+
flatRowDescriptor?: RowDescriptor | undefined,
|
|
30
|
+
/**
|
|
31
|
+
* Mutation context value expressions.
|
|
32
|
+
*
|
|
33
|
+
* NOTE: deliberately NOT exposed via `getChildren` (OPT-009): no emitter or rule reads
|
|
34
|
+
* this map from this node — only `DmlExecutorNode` / `ConstraintCheckNode` consume it,
|
|
35
|
+
* and they expose their copies. It is therefore a pass-through reference that goes
|
|
36
|
+
* stale (holds pre-rewrite subtrees) once the optimizer rebuilds those nodes. If
|
|
37
|
+
* anything ever starts reading it here, expose it as a child first.
|
|
38
|
+
*/
|
|
39
|
+
mutationContextValues?: Map<string, ScalarPlanNode> | undefined, contextAttributes?: Attribute[] | undefined, // Mutation context attributes
|
|
22
40
|
contextDescriptor?: RowDescriptor | undefined);
|
|
23
41
|
getType(): RelationType;
|
|
24
42
|
getAttributes(): readonly Attribute[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/delete-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAoB,MAAM,gBAAgB,CAAC;AACvK,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D;;GAEG;AACH,qBAAa,UAAW,SAAQ,QAAS,YAAW,kBAAkB;aAKlD,KAAK,EAAE,kBAAkB;aACzB,MAAM,EAAE,kBAAkB;aAC1B,gBAAgB,CAAC,EAAE,aAAa;aAChC,iBAAiB,CAAC,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"delete-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/delete-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAoB,MAAM,gBAAgB,CAAC;AACvK,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAG7D;;GAEG;AACH,qBAAa,UAAW,SAAQ,QAAS,YAAW,kBAAkB;aAKlD,KAAK,EAAE,kBAAkB;aACzB,MAAM,EAAE,kBAAkB;aAC1B,gBAAgB,CAAC,EAAE,aAAa;aAChC,iBAAiB,CAAC,EAAE,aAAa;IACjD;;;;;;;;OAQG;aACa,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC;aACnD,iBAAiB,CAAC,EAAE,SAAS,EAAE;aAC/B,iBAAiB,CAAC,EAAE,aAAa;IAnBnD,SAAkB,QAAQ,uBAAuB;gBAG/C,KAAK,EAAE,KAAK,EACI,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,kBAAkB,EAAE,uDAAuD;IACnF,gBAAgB,CAAC,EAAE,aAAa,YAAA,EAAE,0BAA0B;IAC5D,iBAAiB,CAAC,EAAE,aAAa,YAAA;IACjD;;;;;;;;OAQG;IACa,qBAAqB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,YAAA,EACnD,iBAAiB,CAAC,EAAE,SAAS,EAAE,YAAA,EAAE,8BAA8B;IAC/D,iBAAiB,CAAC,EAAE,aAAa,YAAA;IAKpD,OAAO,IAAI,YAAY;IAItB,aAAa,IAAI,SAAS,SAAS,EAAE;IAQrC,YAAY,IAAI,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IAKjE,WAAW,IAAI,SAAS,QAAQ,EAAE;IAKlC,YAAY,CAAC,WAAW,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ;IA0BxD,eAAe,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAO9C,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAEtC;IAEQ,QAAQ,IAAI,MAAM;IAIlB,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAYzD"}
|
|
@@ -15,8 +15,17 @@ export class DeleteNode extends PlanNode {
|
|
|
15
15
|
nodeType = PlanNodeType.Delete;
|
|
16
16
|
constructor(scope, table, source, // Typically a FilterNode wrapping a TableReferenceNode
|
|
17
17
|
oldRowDescriptor, // For constraint checking
|
|
18
|
-
flatRowDescriptor,
|
|
19
|
-
|
|
18
|
+
flatRowDescriptor,
|
|
19
|
+
/**
|
|
20
|
+
* Mutation context value expressions.
|
|
21
|
+
*
|
|
22
|
+
* NOTE: deliberately NOT exposed via `getChildren` (OPT-009): no emitter or rule reads
|
|
23
|
+
* this map from this node — only `DmlExecutorNode` / `ConstraintCheckNode` consume it,
|
|
24
|
+
* and they expose their copies. It is therefore a pass-through reference that goes
|
|
25
|
+
* stale (holds pre-rewrite subtrees) once the optimizer rebuilds those nodes. If
|
|
26
|
+
* anything ever starts reading it here, expose it as a child first.
|
|
27
|
+
*/
|
|
28
|
+
mutationContextValues, contextAttributes, // Mutation context attributes
|
|
20
29
|
contextDescriptor) {
|
|
21
30
|
super(scope);
|
|
22
31
|
this.table = table;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/delete-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA6G,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvK,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,QAAQ;IAKpB;IACA;IACA;IACA;
|
|
1
|
+
{"version":3,"file":"delete-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/delete-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { TableReferenceNode } from './reference.js';
|
|
|
5
5
|
import type { RelationType } from '../../common/datatype.js';
|
|
6
6
|
import type { ConflictResolution } from '../../common/constants.js';
|
|
7
7
|
import { RowOp } from '../../common/types.js';
|
|
8
|
+
import type { ConstraintCheck, NotNullDefaultPlan } from './constraint-check-node.js';
|
|
8
9
|
/**
|
|
9
10
|
* Represents a planned UPSERT clause for INSERT operations.
|
|
10
11
|
* This contains the pre-built plan nodes for ON CONFLICT DO UPDATE handling.
|
|
@@ -34,6 +35,19 @@ export interface UpsertClausePlan {
|
|
|
34
35
|
* - unqualified column names (existing row values) via existingRowDescriptor
|
|
35
36
|
*/
|
|
36
37
|
assignments?: Map<number, ScalarPlanNode>;
|
|
38
|
+
/**
|
|
39
|
+
* Column indices whose entry in {@link assignments} is an implicit
|
|
40
|
+
* generated-column recompute rather than a user-written SET, listed in
|
|
41
|
+
* `generatedColumnTopoOrder`. The runtime evaluates these in a SECOND pass,
|
|
42
|
+
* after the user assignments have been applied and coerced into the updated
|
|
43
|
+
* row, so a generated column derives from the post-update image (and a
|
|
44
|
+
* generated-from-generated column sees the freshly computed value).
|
|
45
|
+
*
|
|
46
|
+
* Their expressions bind bare column names to the EXISTING-row attributes —
|
|
47
|
+
* the same attributes the user assignments read — but the second pass
|
|
48
|
+
* re-binds those attribute ids to the composed row via a cloned descriptor.
|
|
49
|
+
*/
|
|
50
|
+
generatedAssignmentColumns?: number[];
|
|
37
51
|
/** For 'update' action: optional WHERE condition plan */
|
|
38
52
|
whereCondition?: ScalarPlanNode;
|
|
39
53
|
/** Row descriptor for NEW.* references (proposed insert values) */
|
|
@@ -41,6 +55,29 @@ export interface UpsertClausePlan {
|
|
|
41
55
|
/** Row descriptor for existing row references (conflict row) */
|
|
42
56
|
existingRowDescriptor?: RowDescriptor;
|
|
43
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* UPDATE-shaped row validation for an INSERT's `on conflict … do update` arm.
|
|
60
|
+
*
|
|
61
|
+
* The arm composes its row *inside* the executor and writes it directly, so it can
|
|
62
|
+
* never reach the statement's ConstraintCheckNode (which is INSERT-shaped, and sits
|
|
63
|
+
* above the executor, seeing only the proposed insert row). This carries what
|
|
64
|
+
* `buildUpdateStmt` would have built for the same write: OLD = the conflicting stored
|
|
65
|
+
* row, NEW = the composed row.
|
|
66
|
+
*
|
|
67
|
+
* One set is shared by every clause of a multi-clause statement — the checks are a
|
|
68
|
+
* property of the table and the operation, not of the clause. The clause only decides
|
|
69
|
+
* *which* row is composed; the row is bound at runtime.
|
|
70
|
+
*
|
|
71
|
+
* Set only when at least one clause takes the `update` action.
|
|
72
|
+
*/
|
|
73
|
+
export interface UpsertUpdateValidation {
|
|
74
|
+
/** UPDATE-scoped CHECKs plus child-side and parent-side FK checks. */
|
|
75
|
+
checks: ConstraintCheck[];
|
|
76
|
+
/** Flat OLD|NEW descriptor the checks' column references bind through. */
|
|
77
|
+
flatRowDescriptor: RowDescriptor;
|
|
78
|
+
/** DEFAULT evaluators for NOT NULL columns — per-constraint REPLACE substitution. */
|
|
79
|
+
notNullDefaults: NotNullDefaultPlan[];
|
|
80
|
+
}
|
|
44
81
|
/**
|
|
45
82
|
* Executes actual database insert/update/delete operations after constraint validation.
|
|
46
83
|
* This node performs the actual vtab.update operations and yields the affected rows.
|
|
@@ -69,6 +106,12 @@ export declare class DmlExecutorNode extends PlanNode implements RelationalPlanN
|
|
|
69
106
|
* spine) all leave it unset.
|
|
70
107
|
*/
|
|
71
108
|
readonly lensRouted: boolean;
|
|
109
|
+
/**
|
|
110
|
+
* UPDATE-shaped validation for the `on conflict … do update` arm — see
|
|
111
|
+
* {@link UpsertUpdateValidation}. Set only on an INSERT whose statement has at
|
|
112
|
+
* least one `update`-action clause.
|
|
113
|
+
*/
|
|
114
|
+
readonly upsertUpdateValidation?: UpsertUpdateValidation | undefined;
|
|
72
115
|
readonly nodeType = PlanNodeType.UpdateExecutor;
|
|
73
116
|
constructor(scope: Scope, source: RelationalPlanNode, table: TableReferenceNode, operation: RowOp, onConflict?: ConflictResolution | undefined, // Used for INSERT operations (legacy OR clause)
|
|
74
117
|
mutationContextValues?: Map<string, ScalarPlanNode> | undefined, // Mutation context value expressions
|
|
@@ -88,10 +131,24 @@ export declare class DmlExecutorNode extends PlanNode implements RelationalPlanN
|
|
|
88
131
|
* slot), and the multi-source / decomposition insert fan-out (no single basis
|
|
89
132
|
* spine) all leave it unset.
|
|
90
133
|
*/
|
|
91
|
-
lensRouted?: boolean
|
|
134
|
+
lensRouted?: boolean,
|
|
135
|
+
/**
|
|
136
|
+
* UPDATE-shaped validation for the `on conflict … do update` arm — see
|
|
137
|
+
* {@link UpsertUpdateValidation}. Set only on an INSERT whose statement has at
|
|
138
|
+
* least one `update`-action clause.
|
|
139
|
+
*/
|
|
140
|
+
upsertUpdateValidation?: UpsertUpdateValidation | undefined);
|
|
92
141
|
getType(): RelationType;
|
|
93
142
|
getAttributes(): readonly Attribute[];
|
|
94
143
|
getRelations(): readonly [RelationalPlanNode, TableReferenceNode];
|
|
144
|
+
/** Upsert-clause expressions in canonical child order: per clause, assignments then WHERE. */
|
|
145
|
+
private upsertExpressions;
|
|
146
|
+
/**
|
|
147
|
+
* The DO UPDATE arm's validation expressions, in canonical child order: CHECK / FK
|
|
148
|
+
* expressions then NOT NULL DEFAULT evaluators. They MUST be children — the FK
|
|
149
|
+
* existence probes are `not exists (…)` subqueries, which do not work unoptimized.
|
|
150
|
+
*/
|
|
151
|
+
private validationExpressions;
|
|
95
152
|
getChildren(): readonly PlanNode[];
|
|
96
153
|
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
97
154
|
get estimatedRows(): number | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dml-executor-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/dml-executor-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"dml-executor-node.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/dml-executor-node.ts"],"names":[],"mappings":"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"}
|