@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
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { QuereusError } from '../../common/errors.js';
|
|
2
|
+
import { StatusCode } from '../../common/types.js';
|
|
3
|
+
import { expressionToString } from '../../emit/ast-stringify.js';
|
|
4
|
+
import { columnReferencedInAst, columnReferencedInCheckExpression } from '../../schema/rename-rewriter.js';
|
|
5
|
+
import { buildColumnSourceResolver } from '../../schema/column-source-resolver.js';
|
|
6
|
+
/**
|
|
7
|
+
* The `ALTER TABLE … DROP COLUMN` guards over dependents that `runDropColumn` does not
|
|
8
|
+
* otherwise see: the DEFAULT of another column on the table itself, a CHECK constraint on
|
|
9
|
+
* the table itself, an assertion whose CHECK body names the column, and a foreign key in
|
|
10
|
+
* *another* table pointing **at** the column.
|
|
11
|
+
*
|
|
12
|
+
* Whether a dependent is removed with the column or blocks the drop turns on two
|
|
13
|
+
* questions: is it defined by a *column set* or by an *expression*, and does it live on
|
|
14
|
+
* the altered table or somewhere else?
|
|
15
|
+
*
|
|
16
|
+
* - **Structural** dependents **of the altered table** (a UNIQUE over the dropped column,
|
|
17
|
+
* the table's own FK using it as a child column) are defined by a *column set*. Losing
|
|
18
|
+
* a column makes them a different constraint, not a narrower one, so both vtab modules
|
|
19
|
+
* **remove them with the column**.
|
|
20
|
+
* - **Expression** dependents (a generated column's expression, a partial index's
|
|
21
|
+
* `WHERE`, and — here — a column DEFAULT, a CHECK expression and an assertion body) are
|
|
22
|
+
* arbitrary user-authored logic with no narrowed form at all. The only choices are
|
|
23
|
+
* delete-it-silently and refuse, and the engine **refuses**, `StatusCode.CONSTRAINT`.
|
|
24
|
+
* - **Dependents living in another table** — here, a foreign key whose *parent* column is
|
|
25
|
+
* the one being dropped — refuse regardless of shape. Removing one would silently
|
|
26
|
+
* weaken a constraint on a table the user did not name in the statement.
|
|
27
|
+
*
|
|
28
|
+
* Refuse is right for all four guards here because it is what the two expression guards
|
|
29
|
+
* already inside `runDropColumn` do (so the function gains no second policy), it is
|
|
30
|
+
* SQLite's position for the whole family, and — for the assertion arm —
|
|
31
|
+
* `assertNoAssertionDependsOn` already chose refuse for the *table* verb over the same
|
|
32
|
+
* assertion. Cascading here would make `drop table f` and `alter table f drop column x`
|
|
33
|
+
* disagree about the same object.
|
|
34
|
+
*
|
|
35
|
+
* Known cost, accepted: an **unnamed** table-level CHECK cannot be dropped
|
|
36
|
+
* (`DROP CONSTRAINT` resolves by name only), so refusing leaves such a column
|
|
37
|
+
* undroppable short of rebuilding the table — again SQLite's position. The refusal
|
|
38
|
+
* message quotes the constraint's expression so the user can at least see what is in
|
|
39
|
+
* the way.
|
|
40
|
+
*
|
|
41
|
+
* All four guards must run **before** `requireVtabModule` / `module.alterTable`, so a
|
|
42
|
+
* refused statement never reaches a persisting module and the table is left untouched
|
|
43
|
+
* rather than reverted.
|
|
44
|
+
*/
|
|
45
|
+
/**
|
|
46
|
+
* Refuses the drop when the DEFAULT of some OTHER column on `tableSchema` names the column.
|
|
47
|
+
*
|
|
48
|
+
* A default is evaluated against the row being written, so it names its siblings through
|
|
49
|
+
* the row-image qualifier — `b integer default (new.a + 1)`. Dropping `a` leaves that
|
|
50
|
+
* default uncompilable and the table unable to accept any new row at all, with an error
|
|
51
|
+
* naming a column the user deliberately removed. Refusing keeps the failure attached to
|
|
52
|
+
* the statement that caused it.
|
|
53
|
+
*
|
|
54
|
+
* Decided by {@link columnReferencedInCheckExpression}, the same seeded probe the CHECK
|
|
55
|
+
* guard below uses, and for the same two reasons: the seed owns the `new.` / `old.`
|
|
56
|
+
* row-image namespace a default is written in, and it is scope-**aware**, so a default
|
|
57
|
+
* whose subquery reads a like-named column on another table
|
|
58
|
+
* (`default ((select min(v) from u))`) does not false-refuse dropping this table's own `v`.
|
|
59
|
+
* Sharing the probe with the rename walk is what makes "the drop refuses exactly the
|
|
60
|
+
* references a rename would have rewritten" true — the same equivalence the CHECK guard
|
|
61
|
+
* rests on, case folding (`NEW.A`) and the `"new"`-named-table shadowing edge included.
|
|
62
|
+
*
|
|
63
|
+
* The dropped column's **own** default is skipped: it goes away with the column, so a
|
|
64
|
+
* self-naming default (`a integer default (new.a)`) is not something the drop orphans.
|
|
65
|
+
*
|
|
66
|
+
* The generated-column half of this pair is NOT here — `runDropColumn` already refuses off
|
|
67
|
+
* `generatedColumnDependencies`, the resolved column-index map `extractGeneratedColumnDependencies`
|
|
68
|
+
* builds. Two mechanisms for one policy, but the existing one predates this guard and its map
|
|
69
|
+
* is load-bearing elsewhere (evaluation order), so it stays where it is.
|
|
70
|
+
*/
|
|
71
|
+
export function assertNoColumnDefaultNamesColumn(db, tableSchema, columnName) {
|
|
72
|
+
const lowerColumn = columnName.toLowerCase();
|
|
73
|
+
const resolveColumnInSource = buildColumnSourceResolver(db.schemaManager);
|
|
74
|
+
for (const col of tableSchema.columns) {
|
|
75
|
+
if (col.name.toLowerCase() === lowerColumn)
|
|
76
|
+
continue;
|
|
77
|
+
if (!col.defaultValue)
|
|
78
|
+
continue;
|
|
79
|
+
if (!columnReferencedInCheckExpression(col.defaultValue, tableSchema.name, columnName, tableSchema.schemaName, resolveColumnInSource))
|
|
80
|
+
continue;
|
|
81
|
+
throw new QuereusError(`Cannot drop column '${columnName}' from '${tableSchema.name}': it is referenced by the DEFAULT of column '${col.name}'`, StatusCode.CONSTRAINT);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Refuses the drop when one of `tableSchema`'s own CHECK constraints names the column.
|
|
86
|
+
*
|
|
87
|
+
* "Names" is decided by {@link columnReferencedInCheckExpression} — a real rename to a
|
|
88
|
+
* sentinel over a throwaway clone of the body — so the guard refuses exactly the
|
|
89
|
+
* references `ALTER TABLE … RENAME COLUMN` would have rewritten, and the two
|
|
90
|
+
* definitions cannot drift. That scope-awareness is load-bearing rather than
|
|
91
|
+
* decorative: a CHECK may contain a subquery, so a depth-blind name match (what the
|
|
92
|
+
* partial-index guard next door can afford, its predicates admitting no subqueries)
|
|
93
|
+
* would false-refuse `check ((select min(v) from u) >= 0)` when dropping this table's
|
|
94
|
+
* own `v`.
|
|
95
|
+
*
|
|
96
|
+
* Only the constraints on `tableSchema.checkConstraints` at drop time are probed —
|
|
97
|
+
* the user's declared set. Lens- and FK-synthesized entries are attached to a write
|
|
98
|
+
* plan's constraint list, not to the catalog entry this reads.
|
|
99
|
+
*
|
|
100
|
+
* A CHECK naming the column through the row-image qualifiers — `check (new.a > 0)`,
|
|
101
|
+
* `check on delete (old.a > 0)` — refuses the drop just like the unqualified spelling:
|
|
102
|
+
* the same walk owns that namespace, shadowing edge included, so a CHECK whose subquery
|
|
103
|
+
* reads a real table named `"new"` still does not block dropping this table's own
|
|
104
|
+
* like-named column.
|
|
105
|
+
*/
|
|
106
|
+
export function assertNoCheckConstraintNamesColumn(db, tableSchema, columnName) {
|
|
107
|
+
const resolveColumnInSource = buildColumnSourceResolver(db.schemaManager);
|
|
108
|
+
for (const check of tableSchema.checkConstraints ?? []) {
|
|
109
|
+
if (!columnReferencedInCheckExpression(check.expr, tableSchema.name, columnName, tableSchema.schemaName, resolveColumnInSource))
|
|
110
|
+
continue;
|
|
111
|
+
// A table-level unnamed CHECK genuinely carries `name: undefined` — the
|
|
112
|
+
// `_check_<table>` spelling `manager.ts` produces is error text, not stored
|
|
113
|
+
// identity — so there is no name to quote and the expression stands in for one.
|
|
114
|
+
const referencedBy = check.name
|
|
115
|
+
? `CHECK constraint '${check.name}'`
|
|
116
|
+
: `the CHECK constraint (${expressionToString(check.expr)})`;
|
|
117
|
+
throw new QuereusError(`Cannot drop column '${columnName}' from '${tableSchema.name}': it is referenced by ${referencedBy}`, StatusCode.CONSTRAINT);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Refuses the drop when a live assertion's CHECK body names the column.
|
|
122
|
+
*
|
|
123
|
+
* Blast radius is why this one is worth a guard at all: `AssertionEvaluator`
|
|
124
|
+
* recompiles **every** live assertion on any commit that touched any table, so a
|
|
125
|
+
* single body left naming a dropped column makes every write to the whole database
|
|
126
|
+
* fail — including writes to tables that have nothing to do with the altered one.
|
|
127
|
+
*
|
|
128
|
+
* The walk is the unseeded {@link columnReferencedInAst}: an assertion body names its
|
|
129
|
+
* tables explicitly in its own FROM clauses, so there is no implicit binding to seed
|
|
130
|
+
* (unlike a CHECK). A body that names the table but not the column — `select *`
|
|
131
|
+
* included — is not a reference and does not block the drop.
|
|
132
|
+
*
|
|
133
|
+
* Scope is the altered table's OWN schema, matching `assertNoAssertionDependsOn` and
|
|
134
|
+
* `propagateColumnRenameToAssertions`, and carrying the same documented gap: an
|
|
135
|
+
* assertion living in schema A that names `B.t` explicitly is not caught. Tracked by
|
|
136
|
+
* `bug-rename-not-propagated-across-schemas`.
|
|
137
|
+
*/
|
|
138
|
+
export function assertNoAssertionNamesColumn(db, tableSchema, columnName) {
|
|
139
|
+
const schema = db.schemaManager.getSchema(tableSchema.schemaName);
|
|
140
|
+
if (!schema)
|
|
141
|
+
return;
|
|
142
|
+
const resolveColumnInSource = buildColumnSourceResolver(db.schemaManager);
|
|
143
|
+
for (const assertion of schema.getAllAssertions()) {
|
|
144
|
+
// An assertion with no `checkExpression` has no AST to scan and is skipped,
|
|
145
|
+
// exactly as the rename propagation and `assertNoAssertionDependsOn` skip it.
|
|
146
|
+
const check = assertion.checkExpression;
|
|
147
|
+
if (!check)
|
|
148
|
+
continue;
|
|
149
|
+
if (!columnReferencedInAst(check, tableSchema.name, columnName, tableSchema.schemaName, resolveColumnInSource))
|
|
150
|
+
continue;
|
|
151
|
+
throw new QuereusError(`Cannot drop column '${columnName}' from '${tableSchema.name}': it is referenced by assertion '${assertion.name}' — drop or redefine the assertion first`, StatusCode.CONSTRAINT);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Refuses the drop when some foreign key — in any schema, this table's own included —
|
|
156
|
+
* names the column among its **parent** columns.
|
|
157
|
+
*
|
|
158
|
+
* A foreign key stores its parent columns as *names* (`referencedColumnNames`) and
|
|
159
|
+
* re-resolves them against the parent's current shape on every write
|
|
160
|
+
* (`resolveReferencedColumns`, `schema/table.ts`). Dropping a named parent column therefore does not
|
|
161
|
+
* break the altered table at all — it makes the *referencing* table unwritable, with an
|
|
162
|
+
* error naming a column the user deliberately removed somewhere else. Refusing is the
|
|
163
|
+
* only way that failure stays attached to the statement that caused it.
|
|
164
|
+
*
|
|
165
|
+
* The refusal is **not** gated on `pragma foreign_keys`. The pragma decides whether the
|
|
166
|
+
* DML builders emit FK checks, so with it off the breakage is merely latent: the schema
|
|
167
|
+
* is still wrong and turning the pragma on later bricks the child table. The guards
|
|
168
|
+
* already in `runDropColumn` are likewise unconditional.
|
|
169
|
+
*
|
|
170
|
+
* Discovery goes through {@link SchemaManager.getReferencingForeignKeys} — the cached
|
|
171
|
+
* reverse index keyed by referenced `schema.table` that `DROP TABLE`'s parent-side guard
|
|
172
|
+
* already uses — rather than a fresh walk of every foreign key in every schema. Its key
|
|
173
|
+
* is `fk.referencedSchema ?? childTable.schemaName`, and `referencedSchema` is populated
|
|
174
|
+
* at build time from the declaration (`constraint-builder.ts`: `fk.schema ?? childSchemaName`),
|
|
175
|
+
* so the bucket a key lands in is the same parent
|
|
176
|
+
* `planner/building/foreign-key-builder.ts` resolves at enforcement time. That identity is
|
|
177
|
+
* what makes "the guard refuses exactly the drops enforcement would have choked on" true.
|
|
178
|
+
* An unqualified reference binds to the **child's own schema**, not through the session
|
|
179
|
+
* search path — a cross-schema key must qualify its parent (`references main.p(c)`) or it
|
|
180
|
+
* resolves to no parent at all.
|
|
181
|
+
*
|
|
182
|
+
* Two keys are skipped, both deliberately:
|
|
183
|
+
*
|
|
184
|
+
* - One with **no `referencedColumnNames`** (`references Parent` with no column list)
|
|
185
|
+
* falls back to the parent's primary key, which no name resolution can miss and which
|
|
186
|
+
* `runDropColumn` already refuses to drop. Not an oversight — there is no name here for
|
|
187
|
+
* this drop to invalidate.
|
|
188
|
+
* - A **self-referencing key that this same drop removes** — one on the altered table whose
|
|
189
|
+
* *child* columns include the dropped column (`x integer references t(x)`). The module
|
|
190
|
+
* removes the whole key as part of the drop, so nothing is left pointing at the missing
|
|
191
|
+
* name. Refusing there would turn away a legal drop.
|
|
192
|
+
*/
|
|
193
|
+
export function assertNoForeignKeyReferencesColumn(db, tableSchema, columnName) {
|
|
194
|
+
const lowerColumn = columnName.toLowerCase();
|
|
195
|
+
const droppedIndex = tableSchema.columnIndexMap.get(lowerColumn);
|
|
196
|
+
for (const { childTable, fk } of db.schemaManager.getReferencingForeignKeys(tableSchema.schemaName, tableSchema.name)) {
|
|
197
|
+
if (!namesParentColumn(fk, lowerColumn))
|
|
198
|
+
continue;
|
|
199
|
+
if (dropRemovesKeyOutright(tableSchema, childTable, fk, droppedIndex))
|
|
200
|
+
continue;
|
|
201
|
+
const fkName = fk.name ?? `_fk_${childTable.name}`;
|
|
202
|
+
throw new QuereusError(`Cannot drop column '${columnName}' from '${tableSchema.name}': it is referenced by foreign key '${fkName}' on table '${childTable.name}'`, StatusCode.CONSTRAINT);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Whether `fk` lists `lowerColumn` (already lowercased) among its declared parent columns.
|
|
207
|
+
* A key with no declared list targets the parent's primary key and matches nothing here —
|
|
208
|
+
* see the second skip in {@link assertNoForeignKeyReferencesColumn}'s doc comment.
|
|
209
|
+
*/
|
|
210
|
+
function namesParentColumn(fk, lowerColumn) {
|
|
211
|
+
const refNames = fk.referencedColumnNames;
|
|
212
|
+
if (!refNames || refNames.length === 0)
|
|
213
|
+
return false;
|
|
214
|
+
return refNames.some(name => name.toLowerCase() === lowerColumn);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Whether this drop takes the whole key with it: a **self**-referencing key, on the table
|
|
218
|
+
* being altered, holding the dropped column among its *child* columns. The module removes
|
|
219
|
+
* such a key as part of the drop, so no reference to the missing name survives it.
|
|
220
|
+
*/
|
|
221
|
+
function dropRemovesKeyOutright(tableSchema, childTable, fk, droppedIndex) {
|
|
222
|
+
if (droppedIndex === undefined)
|
|
223
|
+
return false;
|
|
224
|
+
if (childTable.name.toLowerCase() !== tableSchema.name.toLowerCase())
|
|
225
|
+
return false;
|
|
226
|
+
if (childTable.schemaName.toLowerCase() !== tableSchema.schemaName.toLowerCase())
|
|
227
|
+
return false;
|
|
228
|
+
return fk.columns.includes(droppedIndex);
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=drop-column-guards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop-column-guards.js","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-column-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-table.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"drop-table.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAM9D,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAiDpF"}
|
|
@@ -4,6 +4,7 @@ import { StatusCode } from '../../common/types.js';
|
|
|
4
4
|
import { dropMaintainedTable } from './materialized-view.js';
|
|
5
5
|
import { requireVtabModule } from '../../schema/table.js';
|
|
6
6
|
import { assertDdlTransactionPolicy } from './ddl-transaction-policy.js';
|
|
7
|
+
import { assertNoAssertionDependsOn } from './assertion-drop-guard.js';
|
|
7
8
|
export function emitDropTable(plan, ctx) {
|
|
8
9
|
const schemaManager = ctx.db.schemaManager;
|
|
9
10
|
const stmt = plan.statementAst; // AST.DropStmt
|
|
@@ -21,6 +22,11 @@ export function emitDropTable(plan, ctx) {
|
|
|
21
22
|
const target = rctx.db.schemaManager.getTable(targetSchemaName, objectName);
|
|
22
23
|
if (target) {
|
|
23
24
|
assertDdlTransactionPolicy(rctx.db, requireVtabModule(target), target.vtabModuleName, `DROP TABLE ${objectName}`);
|
|
25
|
+
// Before the maintained-table branch below, so DROP TABLE on a
|
|
26
|
+
// materialized view is guarded too. Gated on the table existing: an
|
|
27
|
+
// `IF EXISTS` drop of an absent name is a no-op with nothing to protect
|
|
28
|
+
// (and any assertion naming that name is already broken).
|
|
29
|
+
assertNoAssertionDependsOn(rctx.db, targetSchemaName, objectName, 'table');
|
|
24
30
|
}
|
|
25
31
|
// Ensure we're in a transaction before DDL (lazy/JIT transaction start)
|
|
26
32
|
await rctx.db._ensureTransaction();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-table.js","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"drop-table.js","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,UAAU,aAAa,CAAC,IAAmB,EAAE,GAAoB;IACtE,MAAM,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,eAAe;IAE/C,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,CAAC,oBAAoB,EAAE,CAAC;IAClF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAElC,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;QACjC,+CAA+C;QAC/C,qGAAqG;QACrG,MAAM,IAAI,YAAY,CAAC,yBAAyB,IAAI,CAAC,UAAU,sCAAsC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IAChI,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,IAAoB;QACtC,yEAAyE;QACzE,yEAAyE;QACzE,wDAAwD;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAC5E,IAAI,MAAM,EAAE,CAAC;YACZ,0BAA0B,CACzB,IAAI,CAAC,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,EACzD,cAAc,UAAU,EAAE,CAC1B,CAAC;YACF,+DAA+D;YAC/D,oEAAoE;YACpE,wEAAwE;YACxE,0DAA0D;YAC1D,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5E,CAAC;QAED,wEAAwE;QACxE,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAEnC,yEAAyE;QACzE,yEAAyE;QACzE,wEAAwE;QACxE,wCAAwC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAC1F,IAAI,UAAU,EAAE,CAAC;YAChB,MAAM,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,gBAAgB,IAAI,UAAU,GAAG,EAAE,CAAC;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-view.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"drop-view.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAK9D,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CAuEnF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QuereusError } from '../../common/errors.js';
|
|
2
2
|
import { StatusCode } from '../../common/types.js';
|
|
3
|
+
import { assertNoAssertionDependsOn } from './assertion-drop-guard.js';
|
|
3
4
|
export function emitDropView(plan, _ctx) {
|
|
4
5
|
async function run(rctx) {
|
|
5
6
|
// Ensure we're in a transaction before DDL (lazy/JIT transaction start)
|
|
@@ -17,6 +18,9 @@ export function emitDropView(plan, _ctx) {
|
|
|
17
18
|
// View doesn't exist but IF EXISTS was specified, so this is a no-op
|
|
18
19
|
return null;
|
|
19
20
|
}
|
|
21
|
+
// An assertion body may name a view exactly as it names a base table, and
|
|
22
|
+
// dropping it out from under one breaks every write to the database.
|
|
23
|
+
assertNoAssertionDependsOn(rctx.db, plan.schemaName, plan.viewName, 'view');
|
|
20
24
|
// Remove the view from the schema manager
|
|
21
25
|
const schema = rctx.db.schemaManager.getSchema(plan.schemaName);
|
|
22
26
|
if (!schema) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drop-view.js","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"drop-view.js","sourceRoot":"","sources":["../../../../src/runtime/emit/drop-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAEvE,MAAM,UAAU,YAAY,CAAC,IAAkB,EAAE,IAAqB;IACrE,KAAK,UAAU,GAAG,CAAC,IAAoB;QACtC,wEAAwE;QACxE,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAEnC,mEAAmE;QACnE,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,YAAY,CACrB,IAAI,IAAI,CAAC,QAAQ,uDAAuD,EACxE,UAAU,CAAC,KAAK,CAChB,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnF,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,YAAY,CACrB,SAAS,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,kBAAkB,EAC3D,UAAU,CAAC,KAAK,CAChB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,qEAAqE;YACrE,OAAO,IAAI,CAAC;QACb,CAAC;QAED,0EAA0E;QAC1E,qEAAqE;QACrE,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE5E,0CAA0C;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,YAAY,CACrB,WAAW,IAAI,CAAC,UAAU,kBAAkB,EAC5C,UAAU,CAAC,KAAK,CAChB,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CACrB,SAAS,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,kBAAkB,EAC3D,UAAU,CAAC,KAAK,CAChB,CAAC;QACH,CAAC;QAED,0EAA0E;QAC1E,2EAA2E;QAC3E,wDAAwD;QACxD,IAAI,OAAO,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC;gBACtD,IAAI,EAAE,cAAc;gBACpB,yCAAyC;gBACzC,2EAA2E;gBAC3E,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,UAAU,EAAE,YAAY,CAAC,IAAI;gBAC7B,SAAS,EAAE,YAAY;aACvB,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,wDAAwD;IACtE,CAAC;IAED,OAAO;QACN,MAAM,EAAE,EAAE;QACV,GAAG;QACH,IAAI,EAAE,YAAY,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,GAAG;KACrD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-set-semi-join.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAc5D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,QAAQ,EAAE,GACvB,UAAU,
|
|
1
|
+
{"version":3,"file":"key-set-semi-join.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AACxG,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAI/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAO,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAK3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAc5D;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,QAAQ,EAAE,GACvB,UAAU,CA4BZ;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA6G9F"}
|
|
@@ -39,9 +39,11 @@ export function stampMultiSeek(base, pushdown, keys) {
|
|
|
39
39
|
aConstraint: constraints.map(c => c.constraint),
|
|
40
40
|
aConstraintUsage: constraints.map(c => ({ argvIndex: c.argvIndex, omit: true })),
|
|
41
41
|
estimatedRows: BigInt(keys.length),
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
//
|
|
42
|
+
// The multi-seek is not an ordering plan, so report false — matching the
|
|
43
|
+
// literal-IN arm's shape. This is a plan-shape field no module runtime
|
|
44
|
+
// reads (direction rides `idxStr` / `accessPath`), so clearing it does
|
|
45
|
+
// not disturb the walk order the node may be claiming above: the seek
|
|
46
|
+
// emits in the scanned structure's key order either way.
|
|
45
47
|
orderByConsumed: false,
|
|
46
48
|
},
|
|
47
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-set-semi-join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,GAAG,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAC;AAS3D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC7B,IAAgB,EAChB,QAAwB,EACxB,IAAyB;IAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,UAAU,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QACzF,SAAS,EAAE,CAAC,GAAG,CAAC;KAChB,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,EAAE,WAAW,EACzE,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO;QACN,GAAG,IAAI;QACP,MAAM;QACN,WAAW;QACX,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,eAAe,EAAE;YAChB,GAAG,IAAI,CAAC,eAAe;YACvB,MAAM;YACN,WAAW,EAAE,WAAW,CAAC,MAAM;YAC/B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;YAC/C,gBAAgB,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC,
|
|
1
|
+
{"version":3,"file":"key-set-semi-join.js","sourceRoot":"","sources":["../../../../src/runtime/emit/key-set-semi-join.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,7 +82,7 @@ export interface BackingShape {
|
|
|
82
82
|
* until Phase 2). Re-planning here is cheap relative to materialization and keeps
|
|
83
83
|
* the create/refresh emitters free of optimizer plumbing.
|
|
84
84
|
*/
|
|
85
|
-
export declare function deriveBackingShape(db: Database, bodySql: string, explicitColumns: ReadonlyArray<string> | undefined): BackingShape;
|
|
85
|
+
export declare function deriveBackingShape(db: Database, schemaName: string, bodySql: string, explicitColumns: ReadonlyArray<string> | undefined): BackingShape;
|
|
86
86
|
/**
|
|
87
87
|
* Computes the backing table's *physical* primary key. When the body carries an
|
|
88
88
|
* `order by`, the ordering columns lead the key so the btree clusters (and scans)
|
|
@@ -111,7 +111,7 @@ export declare function buildBackingTableSchema(db: Database, schemaName: string
|
|
|
111
111
|
tags?: Readonly<Record<string, SqlValue>>): TableSchema;
|
|
112
112
|
/** Runs the body to completion and returns its rows (raw `Row` arrays). Uses the
|
|
113
113
|
* no-transaction-management primitive — the caller is already inside DDL execution. */
|
|
114
|
-
export declare function collectBodyRows(db: Database, bodySql: string): Promise<Row[]>;
|
|
114
|
+
export declare function collectBodyRows(db: Database, schemaName: string, bodySql: string): Promise<Row[]>;
|
|
115
115
|
/**
|
|
116
116
|
* Everything needed to materialize an MV — identity, canonical DDL, and the body
|
|
117
117
|
* in both AST and canonical-SQL form. Satisfied by the create plan node
|
|
@@ -445,7 +445,7 @@ export declare function isBodyIrrelevantTableChange(oldObject: TableSchema, newO
|
|
|
445
445
|
* which treats a failed analysis as "could not prove disjoint" ⇒ stale (the safe
|
|
446
446
|
* default) — it must never be swallowed into a false "disjoint" conclusion.
|
|
447
447
|
*/
|
|
448
|
-
export declare function referencedSourceColumns(db: Database, bodySql: string, qualifiedSource: string): Set<number>;
|
|
448
|
+
export declare function referencedSourceColumns(db: Database, schemaName: string, bodySql: string, qualifiedSource: string): Set<number>;
|
|
449
449
|
/**
|
|
450
450
|
* Recompile a LIVE materialized view's row-time plan in place after a **genuine**
|
|
451
451
|
* source `table_modified` (`oldObject !== newObject` — constraint/stats/tags-only OR
|
|
@@ -577,7 +577,7 @@ export declare function unlinkCoveredUniqueConstraints(db: Database, mv: Maintai
|
|
|
577
577
|
/** Re-validates a stale MV's body against the current source schemas. Throws the
|
|
578
578
|
* staleness diagnostic when the body no longer plans. Returns the optimized
|
|
579
579
|
* relational root on success. */
|
|
580
|
-
export declare function revalidateBody(db: Database, mvName: string, bodySql: string): RelationalPlanNode;
|
|
580
|
+
export declare function revalidateBody(db: Database, schemaName: string, mvName: string, bodySql: string): RelationalPlanNode;
|
|
581
581
|
/**
|
|
582
582
|
* Lowercased `schema.name` keys of every MV that is stale *right now*. The rename
|
|
583
583
|
* emitters snapshot this BEFORE the statement's first schema-change notify, so the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialized-view-helpers.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/materialized-view-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAc,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAEhD,OAAO,KAAK,EAAY,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAMrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,WAAW,EAAsF,MAAM,uBAAuB,CAAC;AAQ7I,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAA8B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAqB,KAAK,qBAAqB,EAAwB,MAAM,4BAA4B,CAAC;AAEjH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,4BAA4B,CAAC;AAahF,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CAS/F;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CASjH;AAED,uFAAuF;AACvF,MAAM,WAAW,YAAY;IAC5B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,0EAA0E;IAC1E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;0EAMsE;IACtE,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC;;;;sEAIkE;IAClE,aAAa,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;CACrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CACjC,EAAE,EAAE,QAAQ,EACZ,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,GAChD,YAAY,CAMd;
|
|
1
|
+
{"version":3,"file":"materialized-view-helpers.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/materialized-view-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,13 +74,15 @@ export function nullInNotNullSeededPkError(schemaName, viewName, columnName) {
|
|
|
74
74
|
* until Phase 2). Re-planning here is cheap relative to materialization and keeps
|
|
75
75
|
* the create/refresh emitters free of optimizer plumbing.
|
|
76
76
|
*/
|
|
77
|
-
export function deriveBackingShape(db, bodySql, explicitColumns) {
|
|
77
|
+
export function deriveBackingShape(db, schemaName, bodySql, explicitColumns) {
|
|
78
78
|
// Suppress the read-side rewrite: we are computing the MV body to derive/populate
|
|
79
79
|
// its OWN backing, so it must not be rewritten to read that backing.
|
|
80
|
-
return db.schemaManager.withSuppressedMaterializedViewRewrite(() => deriveBackingShapeUnguarded(db, bodySql, explicitColumns));
|
|
80
|
+
return db.schemaManager.withSuppressedMaterializedViewRewrite(() => deriveBackingShapeUnguarded(db, schemaName, bodySql, explicitColumns));
|
|
81
81
|
}
|
|
82
|
-
function deriveBackingShapeUnguarded(db, bodySql, explicitColumns) {
|
|
83
|
-
|
|
82
|
+
function deriveBackingShapeUnguarded(db, schemaName, bodySql, explicitColumns) {
|
|
83
|
+
// Home-schema path: the body's unqualified source names resolve next to the
|
|
84
|
+
// MV, independent of the session's schema path at re-plan time.
|
|
85
|
+
const plan = db.getPlan(bodySql, db._homeSchemaPath(schemaName));
|
|
84
86
|
const root = plan.getRelations()[0];
|
|
85
87
|
if (!root) {
|
|
86
88
|
throw new QuereusError('materialized view body produced no relation', StatusCode.INTERNAL);
|
|
@@ -278,12 +280,14 @@ tags) {
|
|
|
278
280
|
}
|
|
279
281
|
/** Runs the body to completion and returns its rows (raw `Row` arrays). Uses the
|
|
280
282
|
* no-transaction-management primitive — the caller is already inside DDL execution. */
|
|
281
|
-
export async function collectBodyRows(db, bodySql) {
|
|
283
|
+
export async function collectBodyRows(db, schemaName, bodySql) {
|
|
282
284
|
// Suppress the read-side rewrite for the whole prepare+iterate: this body is run
|
|
283
285
|
// to (re)compute the MV's OWN backing (create fill / refresh rebuild), so it must
|
|
284
286
|
// recompute from the source, never read the backing it is populating.
|
|
285
287
|
return db.schemaManager.withSuppressedMaterializedViewRewriteAsync(async () => {
|
|
286
288
|
const stmt = db.prepare(bodySql);
|
|
289
|
+
// Compile is deferred, so the override lands before any planning happens.
|
|
290
|
+
stmt._schemaPathOverride = db._homeSchemaPath(schemaName);
|
|
287
291
|
try {
|
|
288
292
|
const rows = [];
|
|
289
293
|
for await (const row of stmt._iterateRowsRaw()) {
|
|
@@ -392,7 +396,7 @@ function warnKeyCoarsening(schemaName, viewName, info) {
|
|
|
392
396
|
*/
|
|
393
397
|
export async function materializeView(db, def, preDerivedShape) {
|
|
394
398
|
const sm = db.schemaManager;
|
|
395
|
-
const shape = preDerivedShape ?? deriveBackingShape(db, def.bodySql, def.columns);
|
|
399
|
+
const shape = preDerivedShape ?? deriveBackingShape(db, def.schemaName, def.bodySql, def.columns);
|
|
396
400
|
// Lives here — not in deriveBackingShape — because the refresh path reaches a
|
|
397
401
|
// legitimate mismatch after a source ALTER (see the assert's docstring).
|
|
398
402
|
assertDeclaredColumnArity(def, shape);
|
|
@@ -403,7 +407,7 @@ export async function materializeView(db, def, preDerivedShape) {
|
|
|
403
407
|
const backingSchema = buildBackingTableSchema(db, def.schemaName, def.viewName, shape, def.backingModuleName, def.backingModuleArgs, def.tags);
|
|
404
408
|
const completeBacking = await sm.createBackingTable(backingSchema);
|
|
405
409
|
try {
|
|
406
|
-
const rows = await collectBodyRows(db, def.bodySql);
|
|
410
|
+
const rows = await collectBodyRows(db, def.schemaName, def.bodySql);
|
|
407
411
|
const host = resolveBackingHost(db, completeBacking);
|
|
408
412
|
// `replaceContents` runs NO derived-row constraint validation: this caller's
|
|
409
413
|
// backing is the MV-sugar shape (`buildBackingTableSchema` hard-codes empty
|
|
@@ -893,7 +897,7 @@ discardBackingOnFailure = false) {
|
|
|
893
897
|
// renamed positionally to it and the name check skipped; otherwise natural output
|
|
894
898
|
// names with the strict declared-shape check (the body must already be aliased to
|
|
895
899
|
// the declared names — the attach verb / implicit-create posture).
|
|
896
|
-
const shape = deriveBackingShape(db, bodySql, positionalRename ? recordedColumns : undefined);
|
|
900
|
+
const shape = deriveBackingShape(db, schemaName, bodySql, positionalRename ? recordedColumns : undefined);
|
|
897
901
|
// Explicit rename-list arity guard. `deriveBackingShape` sizes the shape to the
|
|
898
902
|
// BODY's arity (a surplus rename name is dropped, a missing one padded), so a
|
|
899
903
|
// list whose length disagrees with the body would otherwise record an
|
|
@@ -937,7 +941,7 @@ discardBackingOnFailure = false) {
|
|
|
937
941
|
reshapePlan = classification.plan;
|
|
938
942
|
}
|
|
939
943
|
assertNoDerivationCycle(db, schemaName, name, shape.sourceTables);
|
|
940
|
-
const rows = await collectBodyRows(db, bodySql);
|
|
944
|
+
const rows = await collectBodyRows(db, schemaName, bodySql);
|
|
941
945
|
// Shape-derived physical key (see assertDerivedRowsAreSet): under a reshape the
|
|
942
946
|
// table's own PK definition may carry pre-reshape indices; equivalent otherwise.
|
|
943
947
|
const shapePk = computeBackingPrimaryKey(shape)
|
|
@@ -1249,7 +1253,7 @@ export async function createMaintainedTable(db, stmt) {
|
|
|
1249
1253
|
const declared = sm.buildDeclaredTableSchema(stmt);
|
|
1250
1254
|
const recordedColumns = explicit ? declared.columns.map(c => c.name) : undefined;
|
|
1251
1255
|
const bodySql = astToString(stmt.maintained.select);
|
|
1252
|
-
const shape = deriveBackingShape(db, bodySql, explicit ? recordedColumns : undefined);
|
|
1256
|
+
const shape = deriveBackingShape(db, schemaName, bodySql, explicit ? recordedColumns : undefined);
|
|
1253
1257
|
const mismatch = describeAttachShapeMismatch(declared, shape, explicit);
|
|
1254
1258
|
if (mismatch) {
|
|
1255
1259
|
throw new QuereusError(`cannot create maintained table '${schemaName}.${name}': ${mismatch}`, StatusCode.ERROR, undefined, stmt.table.loc?.start.line, stmt.table.loc?.start.column);
|
|
@@ -1319,7 +1323,7 @@ export async function createMaintainedTable(db, stmt) {
|
|
|
1319
1323
|
*/
|
|
1320
1324
|
export async function rebuildBacking(db, mv) {
|
|
1321
1325
|
const bodySql = astToString(mv.derivation.selectAst);
|
|
1322
|
-
const rows = await collectBodyRows(db, bodySql);
|
|
1326
|
+
const rows = await collectBodyRows(db, mv.schemaName, bodySql);
|
|
1323
1327
|
const backing = db.schemaManager.getTable(mv.schemaName, mv.name);
|
|
1324
1328
|
if (!backing) {
|
|
1325
1329
|
throw new QuereusError(`Internal error: maintained table '${mv.name}' not found during rebuild`, StatusCode.INTERNAL);
|
|
@@ -1682,11 +1686,11 @@ function valueSemanticsChangedColumns(oldObject, newObject) {
|
|
|
1682
1686
|
* which treats a failed analysis as "could not prove disjoint" ⇒ stale (the safe
|
|
1683
1687
|
* default) — it must never be swallowed into a false "disjoint" conclusion.
|
|
1684
1688
|
*/
|
|
1685
|
-
export function referencedSourceColumns(db, bodySql, qualifiedSource) {
|
|
1689
|
+
export function referencedSourceColumns(db, schemaName, bodySql, qualifiedSource) {
|
|
1686
1690
|
const targetName = qualifiedSource.toLowerCase();
|
|
1687
1691
|
return db.schemaManager.withSuppressedMaterializedViewRewrite(() => {
|
|
1688
1692
|
const ast = new Parser().parse(bodySql);
|
|
1689
|
-
const { plan } = db._buildPlan([ast]);
|
|
1693
|
+
const { plan } = db._buildPlan([ast], undefined, db._homeSchemaPath(schemaName));
|
|
1690
1694
|
const referencedAttrIds = new Set();
|
|
1691
1695
|
const sourceRefs = [];
|
|
1692
1696
|
const visited = new Set();
|
|
@@ -1815,7 +1819,7 @@ export function tryRecompileMaterializedViewLive(db, mv, oldObject, newObject) {
|
|
|
1815
1819
|
try {
|
|
1816
1820
|
const d = mv.derivation;
|
|
1817
1821
|
const bodySql = astToString(d.selectAst);
|
|
1818
|
-
const shape = deriveBackingShape(db, bodySql, d.columns);
|
|
1822
|
+
const shape = deriveBackingShape(db, mv.schemaName, bodySql, d.columns);
|
|
1819
1823
|
if (!sameSourceTables(d.sourceTables, shape.sourceTables)) {
|
|
1820
1824
|
log('Marking materialized view %s.%s stale instead of recompiling: re-planned source tables (%s) disagree with the recorded set (%s) — REFRESH re-derives', mv.schemaName, mv.name, shape.sourceTables.join(', '), d.sourceTables.join(', '));
|
|
1821
1825
|
return false;
|
|
@@ -1857,7 +1861,7 @@ export function tryRecompileMaterializedViewLive(db, mv, oldObject, newObject) {
|
|
|
1857
1861
|
const valueChanged = valueSemanticsChangedColumns(oldObject, newObject);
|
|
1858
1862
|
if (valueChanged.size > 0) {
|
|
1859
1863
|
const source = `${newObject.schemaName}.${newObject.name}`.toLowerCase();
|
|
1860
|
-
const read = referencedSourceColumns(db, bodySql, source);
|
|
1864
|
+
const read = referencedSourceColumns(db, mv.schemaName, bodySql, source);
|
|
1861
1865
|
const collidingName = [...valueChanged].find(name => {
|
|
1862
1866
|
const idx = newObject.columnIndexMap.get(name);
|
|
1863
1867
|
return idx !== undefined && read.has(idx);
|
|
@@ -2061,7 +2065,13 @@ function describePhysicalPkChange(current, shape, renameMap) {
|
|
|
2061
2065
|
}
|
|
2062
2066
|
return null;
|
|
2063
2067
|
}
|
|
2064
|
-
/**
|
|
2068
|
+
/**
|
|
2069
|
+
* Lifts a {@link ReshapeColumnOp} onto the module's `SchemaChangeInfo` surface.
|
|
2070
|
+
* Never sets `ddl` — these are engine-internal backing reshapes, not statements the
|
|
2071
|
+
* application issued, and a module emits a schema-change event only for a call
|
|
2072
|
+
* carrying `ddl` (see `SchemaChangeInfo.ddl`), so every reshape stays silent on the
|
|
2073
|
+
* public schema channel.
|
|
2074
|
+
*/
|
|
2065
2075
|
function reshapeOpToChange(op) {
|
|
2066
2076
|
switch (op.kind) {
|
|
2067
2077
|
case 'rename':
|
|
@@ -2294,7 +2304,8 @@ export function tryResolveBackingHost(db, backingSchema) {
|
|
|
2294
2304
|
export function linkCoveredUniqueConstraints(db, mv, bodySql) {
|
|
2295
2305
|
// The coverage prover reasons over the body's SOURCE table; suppress the
|
|
2296
2306
|
// read-side rewrite so the body is not re-pointed at this MV's own backing.
|
|
2297
|
-
|
|
2307
|
+
// Home-schema path: the body's unqualified names resolve next to the MV.
|
|
2308
|
+
const root = db.schemaManager.withSuppressedMaterializedViewRewrite(() => db.getPlan(bodySql, db._homeSchemaPath(mv.schemaName)).getRelations()[0]);
|
|
2298
2309
|
if (!root)
|
|
2299
2310
|
return;
|
|
2300
2311
|
const sm = db.schemaManager;
|
|
@@ -2336,12 +2347,13 @@ export function unlinkCoveredUniqueConstraints(db, mv) {
|
|
|
2336
2347
|
/** Re-validates a stale MV's body against the current source schemas. Throws the
|
|
2337
2348
|
* staleness diagnostic when the body no longer plans. Returns the optimized
|
|
2338
2349
|
* relational root on success. */
|
|
2339
|
-
export function revalidateBody(db, mvName, bodySql) {
|
|
2350
|
+
export function revalidateBody(db, schemaName, mvName, bodySql) {
|
|
2340
2351
|
let root;
|
|
2341
2352
|
try {
|
|
2342
2353
|
// Re-validate the body against the SOURCE schemas; suppress the read-side
|
|
2343
|
-
// rewrite so it is not re-pointed at this MV's own backing.
|
|
2344
|
-
|
|
2354
|
+
// rewrite so it is not re-pointed at this MV's own backing. Home-schema
|
|
2355
|
+
// path: unqualified names resolve next to the MV, not the session path.
|
|
2356
|
+
root = db.schemaManager.withSuppressedMaterializedViewRewrite(() => db.getPlan(bodySql, db._homeSchemaPath(schemaName)).getRelations()[0]);
|
|
2345
2357
|
}
|
|
2346
2358
|
catch (e) {
|
|
2347
2359
|
const message = e instanceof Error ? e.message : String(e);
|
|
@@ -2595,7 +2607,7 @@ export async function restoreUnaffectedMaterializedViews(db, preStale) {
|
|
|
2595
2607
|
// Throws when the body no longer plans against the renamed catalog
|
|
2596
2608
|
// (e.g. a chained MV referencing a renamed-away output name) → catch
|
|
2597
2609
|
// below leaves it stale.
|
|
2598
|
-
const shape = deriveBackingShape(db, bodySql, d.columns);
|
|
2610
|
+
const shape = deriveBackingShape(db, mv.schemaName, bodySql, d.columns);
|
|
2599
2611
|
// The retry of a failure-marked MV must not revive an inconsistent record: a
|
|
2600
2612
|
// rewrite that threw between the in-place AST mutation and the derived-field
|
|
2601
2613
|
// re-key leaves the OLD derivation (un-re-keyed `sourceTables`) holding the
|
|
@@ -2648,7 +2660,7 @@ function sameSourceTables(a, b) {
|
|
|
2648
2660
|
* and cached plans scanning the backing directly recompile against the new names.
|
|
2649
2661
|
*/
|
|
2650
2662
|
async function renameShiftedBackingColumns(db, schema, mv, bodySql, preDerivedShape) {
|
|
2651
|
-
const shape = preDerivedShape ?? deriveBackingShape(db, bodySql, mv.derivation.columns);
|
|
2663
|
+
const shape = preDerivedShape ?? deriveBackingShape(db, mv.schemaName, bodySql, mv.derivation.columns);
|
|
2652
2664
|
const backing = schema.getTable(mv.name);
|
|
2653
2665
|
if (!backing) {
|
|
2654
2666
|
throw new QuereusError(`Internal error: maintained table '${mv.name}' not found during backing-column rename`, StatusCode.INTERNAL);
|