@quereus/quereus 3.2.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/src/common/datatype.d.ts +12 -0
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/types.d.ts +24 -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 +37 -9
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +62 -106
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +163 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +235 -21
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +28 -0
- package/dist/src/core/database-external-changes.d.ts.map +1 -0
- package/dist/src/core/database-external-changes.js +242 -0
- package/dist/src/core/database-external-changes.js.map +1 -0
- package/dist/src/core/database-internal.d.ts +50 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +1253 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views.js +3064 -0
- package/dist/src/core/database-materialized-views.js.map +1 -0
- package/dist/src/core/database-options.d.ts +4 -0
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js +10 -0
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +19 -3
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +30 -3
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +19 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +63 -3
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +203 -11
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +493 -29
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +137 -0
- package/dist/src/core/derived-row-validator.d.ts.map +1 -0
- package/dist/src/core/derived-row-validator.js +314 -0
- package/dist/src/core/derived-row-validator.js.map +1 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +30 -9
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +135 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +795 -120
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -10
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +32 -0
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +3 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +229 -0
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +10 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts +2 -0
- package/dist/src/func/builtins/mutation.d.ts.map +1 -0
- package/dist/src/func/builtins/mutation.js +53 -0
- package/dist/src/func/builtins/mutation.js.map +1 -0
- package/dist/src/func/builtins/schema.d.ts +2 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +713 -26
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.js +1 -1
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/registration.d.ts +9 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +4 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +25 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +27 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +353 -21
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/index.d.ts +14 -1
- package/dist/src/parser/index.d.ts.map +1 -1
- package/dist/src/parser/index.js +19 -0
- package/dist/src/parser/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts +9 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -0
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +277 -8
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1393 -471
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +12 -8
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +4 -0
- 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 +8 -4
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
- package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
- package/dist/src/planner/analysis/authored-inverse.js +267 -0
- package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/binding-extractor.js +9 -6
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +34 -4
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +115 -7
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +174 -46
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/coarsened-key.js +228 -0
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.js +341 -0
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +13 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +220 -21
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
- package/dist/src/planner/analysis/coverage-prover.js +1038 -0
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
- package/dist/src/planner/analysis/key-filter.d.ts +22 -0
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
- package/dist/src/planner/analysis/key-filter.js +105 -0
- package/dist/src/planner/analysis/key-filter.js.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +51 -13
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
- package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
- package/dist/src/planner/analysis/update-lineage.js +322 -0
- package/dist/src/planner/analysis/update-lineage.js.map +1 -0
- package/dist/src/planner/analysis/view-complement.d.ts +42 -0
- package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
- package/dist/src/planner/analysis/view-complement.js +54 -0
- package/dist/src/planner/analysis/view-complement.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +211 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +18 -1
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +33 -5
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +63 -28
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +9 -0
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +41 -12
- 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 +94 -0
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/declare-schema.d.ts +1 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
- package/dist/src/planner/building/declare-schema.js +4 -1
- package/dist/src/planner/building/declare-schema.js.map +1 -1
- package/dist/src/planner/building/default-scope.d.ts +26 -0
- package/dist/src/planner/building/default-scope.d.ts.map +1 -0
- package/dist/src/planner/building/default-scope.js +41 -0
- package/dist/src/planner/building/default-scope.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts +19 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +116 -34
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +118 -0
- package/dist/src/planner/building/dml-target.d.ts.map +1 -0
- package/dist/src/planner/building/dml-target.js +282 -0
- package/dist/src/planner/building/dml-target.js.map +1 -0
- package/dist/src/planner/building/drop-index.d.ts.map +1 -1
- package/dist/src/planner/building/drop-index.js +4 -1
- package/dist/src/planner/building/drop-index.js.map +1 -1
- package/dist/src/planner/building/drop-view.d.ts.map +1 -1
- package/dist/src/planner/building/drop-view.js +4 -2
- package/dist/src/planner/building/drop-view.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +60 -21
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +160 -129
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts +45 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +257 -88
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
- package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
- package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/building/materialized-view.d.ts +16 -0
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
- package/dist/src/planner/building/materialized-view.js +57 -0
- package/dist/src/planner/building/materialized-view.js.map +1 -0
- package/dist/src/planner/building/returning-star.d.ts +32 -0
- package/dist/src/planner/building/returning-star.d.ts.map +1 -0
- package/dist/src/planner/building/returning-star.js +45 -0
- package/dist/src/planner/building/returning-star.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +51 -13
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +84 -11
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +10 -2
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +7 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +6 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +18 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +30 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +8 -2
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +26 -4
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +8 -5
- 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 +164 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/set-object-tags.d.ts +7 -0
- package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
- package/dist/src/planner/building/set-object-tags.js +38 -0
- package/dist/src/planner/building/set-object-tags.js.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.js +37 -0
- package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
- package/dist/src/planner/building/update.d.ts +18 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +134 -58
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
- package/dist/src/planner/building/view-mutation-builder.js +1158 -0
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
- package/dist/src/planner/building/with.d.ts +11 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +48 -10
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +83 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +114 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +38 -4
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -6
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +2 -1
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +7 -1
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +39 -1
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +18 -2
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +131 -0
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
- package/dist/src/planner/mutation/backward-body.js +135 -0
- package/dist/src/planner/mutation/backward-body.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +364 -0
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
- package/dist/src/planner/mutation/decomposition.d.ts +273 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
- package/dist/src/planner/mutation/decomposition.js +1719 -0
- package/dist/src/planner/mutation/decomposition.js.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.js +745 -0
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
- package/dist/src/planner/mutation/multi-source.d.ts +568 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/multi-source.js +2915 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.js +31 -0
- package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts +97 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
- package/dist/src/planner/mutation/propagate.js +220 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -0
- package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
- package/dist/src/planner/mutation/scope-transform.js +574 -0
- package/dist/src/planner/mutation/scope-transform.js.map +1 -0
- package/dist/src/planner/mutation/set-op.d.ts +242 -0
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
- package/dist/src/planner/mutation/set-op.js +1687 -0
- package/dist/src/planner/mutation/set-op.js.map +1 -0
- package/dist/src/planner/mutation/single-source.d.ts +261 -0
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/single-source.js +1096 -0
- package/dist/src/planner/mutation/single-source.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts +6 -4
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +11 -9
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +5 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +27 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
- package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/analyze-node.js +21 -1
- package/dist/src/planner/nodes/analyze-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +33 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +2 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +4 -1
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +32 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +27 -3
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
- package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
- package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +63 -13
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +6 -16
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +41 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +78 -8
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +33 -6
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +131 -10
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts +12 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +52 -3
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +2 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +9 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +265 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +12 -0
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +14 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +103 -16
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +63 -30
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +7 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +10 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +20 -0
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +71 -14
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
- package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
- package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
- package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +302 -18
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +8 -7
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +8 -23
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +2 -0
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +18 -2
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +23 -3
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +6 -0
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/values-node.d.ts +3 -1
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +26 -0
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/view-mutation-node.js +273 -0
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
- package/dist/src/planner/nodes/window-function.d.ts +17 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +15 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js +3 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +372 -39
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +1 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +8 -27
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +9 -3
- 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 +56 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +8 -7
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +14 -21
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +42 -5
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +25 -9
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +19 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +5 -2
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- 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 +10 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +2 -2
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +16 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +47 -4
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +14 -0
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +66 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +228 -36
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +501 -84
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +27 -1
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +80 -6
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +26 -3
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +182 -33
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
- package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
- package/dist/src/planner/util/set-op-wrapper.js +82 -0
- package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +13 -1
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +7 -1
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +30 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +38 -4
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +38 -5
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +10 -8
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +664 -108
- 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 +2 -1
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +24 -9
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
- package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
- package/dist/src/runtime/emit/asserted-keys.js +13 -0
- package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +24 -19
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +24 -36
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/block.d.ts.map +1 -1
- package/dist/src/runtime/emit/block.js +11 -2
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +12 -4
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +50 -1
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +8 -0
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +16 -1
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/delete.d.ts.map +1 -1
- package/dist/src/runtime/emit/delete.js +15 -5
- package/dist/src/runtime/emit/delete.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +413 -193
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +10 -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 +17 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/envelope-scan.js +22 -0
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts +10 -2
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +128 -38
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view.js +187 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +19 -5
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +10 -5
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +101 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.js +57 -0
- package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +140 -24
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +110 -5
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +34 -6
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
- package/dist/src/runtime/emit/view-mutation.js +299 -0
- package/dist/src/runtime/emit/view-mutation.js.map +1 -0
- package/dist/src/runtime/emit/window.js +29 -5
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +580 -172
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +5 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +17 -1
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +10 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/basis-backfill.d.ts +63 -0
- package/dist/src/schema/basis-backfill.d.ts.map +1 -0
- package/dist/src/schema/basis-backfill.js +161 -0
- package/dist/src/schema/basis-backfill.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +115 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +249 -22
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +42 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/column.d.ts +16 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +182 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -0
- package/dist/src/schema/constraint-builder.js +424 -0
- package/dist/src/schema/constraint-builder.js.map +1 -0
- package/dist/src/schema/ddl-generator.d.ts +86 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +316 -20
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +51 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +61 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +106 -0
- package/dist/src/schema/derivation.d.ts.map +1 -0
- package/dist/src/schema/derivation.js +25 -0
- package/dist/src/schema/derivation.js.map +1 -0
- package/dist/src/schema/function.d.ts +13 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-ack.d.ts +90 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -0
- package/dist/src/schema/lens-ack.js +361 -0
- package/dist/src/schema/lens-ack.js.map +1 -0
- package/dist/src/schema/lens-compiler.d.ts +62 -0
- package/dist/src/schema/lens-compiler.d.ts.map +1 -0
- package/dist/src/schema/lens-compiler.js +1594 -0
- package/dist/src/schema/lens-compiler.js.map +1 -0
- package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
- package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
- package/dist/src/schema/lens-fk-discovery.js +336 -0
- package/dist/src/schema/lens-fk-discovery.js.map +1 -0
- package/dist/src/schema/lens-prover.d.ts +336 -0
- package/dist/src/schema/lens-prover.d.ts.map +1 -0
- package/dist/src/schema/lens-prover.js +1988 -0
- package/dist/src/schema/lens-prover.js.map +1 -0
- package/dist/src/schema/lens.d.ts +254 -0
- package/dist/src/schema/lens.d.ts.map +1 -0
- package/dist/src/schema/lens.js +21 -0
- package/dist/src/schema/lens.js.map +1 -0
- package/dist/src/schema/manager.d.ts +676 -18
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +1573 -238
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
- package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
- package/dist/src/schema/mapping-advertisement-tags.js +216 -0
- package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
- package/dist/src/schema/rename-rewriter.d.ts +45 -4
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +412 -19
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
- package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags-policy.js +34 -0
- package/dist/src/schema/reserved-tags-policy.js.map +1 -0
- package/dist/src/schema/reserved-tags.d.ts +170 -0
- package/dist/src/schema/reserved-tags.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags.js +507 -0
- package/dist/src/schema/reserved-tags.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts +158 -2
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +1460 -78
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +8 -3
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +22 -2
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/schema.d.ts +25 -1
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +36 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +259 -10
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +309 -26
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +78 -0
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
- package/dist/src/schema/unique-enforcement.js +93 -0
- package/dist/src/schema/unique-enforcement.js.map +1 -0
- package/dist/src/schema/view.d.ts +83 -2
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +67 -1
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/schema/window-function.d.ts +9 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/types/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +71 -36
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/comparison.d.ts +24 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +34 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/mutation-statement.d.ts.map +1 -1
- package/dist/src/util/mutation-statement.js +4 -1
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/dist/src/util/serialization.d.ts +9 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +26 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/backing-host.d.ts +286 -0
- package/dist/src/vtab/backing-host.d.ts.map +1 -0
- package/dist/src/vtab/backing-host.js +118 -0
- package/dist/src/vtab/backing-host.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +21 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -5
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
- package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
- package/dist/src/vtab/mapping-advertisement.js +2 -0
- package/dist/src/vtab/mapping-advertisement.js.map +1 -0
- package/dist/src/vtab/memory/index.d.ts +64 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +119 -12
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +38 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +112 -24
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +1050 -91
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +5 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +17 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +82 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +15 -5
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/types.d.ts +20 -2
- package/dist/src/vtab/memory/types.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +46 -24
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -5
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +203 -4
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -0
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
2
|
+
import { TableReferenceNode } from '../nodes/reference.js';
|
|
3
|
+
import { buildSelectStmt } from '../building/select.js';
|
|
4
|
+
import { resolveBaseSite } from '../analysis/update-lineage.js';
|
|
5
|
+
import { raiseMutationDiagnostic } from './mutation-diagnostic.js';
|
|
6
|
+
/**
|
|
7
|
+
* The relational source a planned view body's lowered base columns resolve against: the
|
|
8
|
+
* **outermost** relational node from the root that carries a **registered output scope** —
|
|
9
|
+
* the `JoinNode` for a columnar / n-way join body (its nested joins ride inside via
|
|
10
|
+
* `getRelations()`), or the FROM relation (the aliased base table) for an anchor-only body
|
|
11
|
+
* with no join (a value-only EAV decomposition). The capture builds its
|
|
12
|
+
* `Project(Filter(source))` on this node and resolves the member-relationId-qualified base
|
|
13
|
+
* columns against its scope, so the returned node **must** be the one the scope was registered
|
|
14
|
+
* on (`buildFrom`/`buildJoin` register on the FROM `AliasNode` / `JoinNode`, NOT the inner
|
|
15
|
+
* `TableReferenceNode` an anchor-only body would otherwise surface). `outputScopes` is the
|
|
16
|
+
* builder's node→scope map; we return the first node reachable from `root` that has an entry,
|
|
17
|
+
* falling back to `root` only if none does (defensive — every body analyzed here has a scoped
|
|
18
|
+
* FROM). (§ Round-Trip Laws and the Derived Backward Walk; the decomposition dual of
|
|
19
|
+
* `analyzeJoinView`'s `joinNode`, the generalized `findJoinNode` in multi-source.ts.)
|
|
20
|
+
*/
|
|
21
|
+
export function findBodySource(root, outputScopes) {
|
|
22
|
+
let scoped;
|
|
23
|
+
const visit = (n) => {
|
|
24
|
+
if (scoped)
|
|
25
|
+
return;
|
|
26
|
+
// The outermost scoped node is the FROM relation: a JoinNode (join body) or the FROM
|
|
27
|
+
// AliasNode/table (anchor-only body). Both carry the combined column scope the capture
|
|
28
|
+
// resolves against; an inner TableReferenceNode (deeper) carries none.
|
|
29
|
+
if (isRelationalNode(n) && outputScopes.has(n)) {
|
|
30
|
+
scoped = n;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const child of n.getRelations())
|
|
34
|
+
visit(child);
|
|
35
|
+
};
|
|
36
|
+
visit(root);
|
|
37
|
+
return scoped ?? root;
|
|
38
|
+
}
|
|
39
|
+
/** Collect every `TableReferenceNode` in a planned body's relational spine, indexed by plan-node id. */
|
|
40
|
+
export function collectTableRefs(root) {
|
|
41
|
+
const out = new Map();
|
|
42
|
+
const visit = (n) => {
|
|
43
|
+
if (n instanceof TableReferenceNode) {
|
|
44
|
+
out.set(Number(n.id), n);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
for (const child of n.getRelations())
|
|
48
|
+
visit(child);
|
|
49
|
+
};
|
|
50
|
+
visit(root);
|
|
51
|
+
return out;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Plan a view body once and read its threaded `updateLineage` into a per-column
|
|
55
|
+
* backward map. The caller must already have rejected any structural shape it does
|
|
56
|
+
* not accept (the multi-source walk rejects `select *` / non-inner joins up front;
|
|
57
|
+
* the decomposition body is synthesized with an explicit projection list). A
|
|
58
|
+
* remaining `select *` projection or projection/attribute arity mismatch surfaces
|
|
59
|
+
* a structured `no-base-lineage` diagnostic here.
|
|
60
|
+
*/
|
|
61
|
+
export function analyzeBodyLineage(ctx, view) {
|
|
62
|
+
if (view.selectAst.type !== 'select') {
|
|
63
|
+
raiseMutationDiagnostic({
|
|
64
|
+
reason: 'no-base-lineage',
|
|
65
|
+
table: view.name,
|
|
66
|
+
message: `view '${view.name}' has a ${view.selectAst.type.toUpperCase()} body, which has no recoverable base operation`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const sel = view.selectAst;
|
|
70
|
+
const bodyPlan = buildSelectStmt(ctx, sel);
|
|
71
|
+
if (!isRelationalNode(bodyPlan)) {
|
|
72
|
+
raiseMutationDiagnostic({
|
|
73
|
+
reason: 'no-base-lineage',
|
|
74
|
+
table: view.name,
|
|
75
|
+
message: `view '${view.name}' body did not produce a relation`,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const root = bodyPlan;
|
|
79
|
+
const tableRefsById = collectTableRefs(root);
|
|
80
|
+
const attrs = root.getAttributes();
|
|
81
|
+
const lineage = root.physical.updateLineage;
|
|
82
|
+
const projections = sel.columns;
|
|
83
|
+
if (projections.length !== attrs.length) {
|
|
84
|
+
raiseMutationDiagnostic({
|
|
85
|
+
reason: 'no-base-lineage',
|
|
86
|
+
table: view.name,
|
|
87
|
+
message: `cannot write through view '${view.name}': projection/attribute arity mismatch (${projections.length} vs ${attrs.length})`,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
const viewColToBaseRef = new Map();
|
|
91
|
+
const columns = [];
|
|
92
|
+
projections.forEach((rc, i) => {
|
|
93
|
+
const attr = attrs[i];
|
|
94
|
+
const displayName = view.columns?.[i] ?? attr.name;
|
|
95
|
+
const name = displayName.toLowerCase();
|
|
96
|
+
if (rc.type === 'all') {
|
|
97
|
+
// Defensive: callers reject `select *` first (it has no 1:1 projection→base
|
|
98
|
+
// routing). Reaching here is a caller bug, not a user shape.
|
|
99
|
+
raiseMutationDiagnostic({
|
|
100
|
+
reason: 'no-base-lineage',
|
|
101
|
+
table: view.name,
|
|
102
|
+
message: `cannot write through view '${view.name}': a 'select *' body has no per-column base lineage`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// The projection's source expression is already in base terms (it lives in the
|
|
106
|
+
// body's own FROM scope), so it is the substitution target for user
|
|
107
|
+
// predicates / assignments written against this output column.
|
|
108
|
+
const baseTermExpr = rc.expr;
|
|
109
|
+
viewColToBaseRef.set(name, baseTermExpr);
|
|
110
|
+
const resolved = resolveBaseSite(lineage?.get(attr.id));
|
|
111
|
+
columns.push({
|
|
112
|
+
name,
|
|
113
|
+
displayName,
|
|
114
|
+
baseTableId: resolved.table,
|
|
115
|
+
baseColumn: resolved.baseColumn,
|
|
116
|
+
writable: resolved.writable,
|
|
117
|
+
nullExtended: resolved.nullExtended,
|
|
118
|
+
...(resolved.inverse ? { inverse: resolved.inverse } : {}),
|
|
119
|
+
...(resolved.domain ? { domain: resolved.domain } : {}),
|
|
120
|
+
...(resolved.existenceComponent ? { existenceComponent: resolved.existenceComponent } : {}),
|
|
121
|
+
...(resolved.existenceGuard ? { existenceGuard: resolved.existenceGuard } : {}),
|
|
122
|
+
...(resolved.authored ? { authored: resolved.authored } : {}),
|
|
123
|
+
baseTermExpr,
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
// The relational source the lowered base-term columns resolve against + its combined
|
|
127
|
+
// column scope, captured from the SINGLE plan above (the body is planned once). The
|
|
128
|
+
// decomposition value capture / the EAV follow-up build their `Project(Filter(source))`
|
|
129
|
+
// over these rather than re-planning a cloned body (multi-source layers its own typed
|
|
130
|
+
// `findJoinNode` accessor on `root`; the two find the same outermost join).
|
|
131
|
+
const bodySource = findBodySource(root, ctx.outputScopes);
|
|
132
|
+
const bodyScope = ctx.outputScopes.get(bodySource);
|
|
133
|
+
return { sel, root, tableRefsById, viewColToBaseRef, columns, bodySource, bodyScope };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=backward-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backward-body.js","sourceRoot":"","sources":["../../../../src/planner/mutation/backward-body.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type * as AST from '../../parser/ast.js';
|
|
2
|
+
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Flatten a single-source CTE/subquery body's linear chain of sibling-CTE reads down to a
|
|
5
|
+
* body over the terminal base table. Returns the ORIGINAL object identity when nothing is
|
|
6
|
+
* inlined (the FROM is already a base table / view / MV, or not a single CTE source), so the
|
|
7
|
+
* common single-level path is provably untouched.
|
|
8
|
+
*
|
|
9
|
+
* @param body the target body (a CTE's `query` or an inline subquery's body).
|
|
10
|
+
* @param visible the CTEs that resolve in `body`'s FROM, **in definition order** (the
|
|
11
|
+
* prefix of the WITH clause up to — and excluding — a CTE-name target).
|
|
12
|
+
* @param targetName the CTE-name target's own name, which must NOT be inlined (its body's
|
|
13
|
+
* same-named FROM source is the REAL outer table — the load-bearing shadow
|
|
14
|
+
* case). Undefined for an inline-subquery target (no own-name to shadow).
|
|
15
|
+
*/
|
|
16
|
+
export declare function flattenCteBody(ctx: PlanningContext, body: AST.QueryExpr, visible: ReadonlyArray<AST.CommonTableExpr>, targetName?: string): AST.QueryExpr;
|
|
17
|
+
//# sourceMappingURL=cte-flatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cte-flatten.d.ts","sourceRoot":"","sources":["../../../../src/planner/mutation/cte-flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA6C9D;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,GAAG,CAAC,SAAS,EACnB,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,EAC3C,UAAU,CAAC,EAAE,MAAM,GACjB,GAAG,CAAC,SAAS,CAEf"}
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { transformExpr, cloneExpr, transformAliasScopedQuery } from './scope-transform.js';
|
|
2
|
+
import { combineAnd } from './single-source.js';
|
|
3
|
+
import { raiseMutationDiagnostic } from './mutation-diagnostic.js';
|
|
4
|
+
/**
|
|
5
|
+
* Multi-level CTE-body flattener (`docs/view-updateability.md` § Common Table
|
|
6
|
+
* Expressions — multi-level CTE body).
|
|
7
|
+
*
|
|
8
|
+
* A CTE-name (or inline-subquery) DML target whose body is a single-source
|
|
9
|
+
* projection-and-filter that reads ANOTHER CTE —
|
|
10
|
+
*
|
|
11
|
+
* with a as (select id, color from ml), t as (select * from a) update t …
|
|
12
|
+
*
|
|
13
|
+
* — used to reject `no-base-lineage`: the body's FROM resolves to a `CTEReferenceNode`,
|
|
14
|
+
* not a base `TableReferenceNode`, so the mutation-propagation walk found no recoverable
|
|
15
|
+
* base operation. This module collapses such a **linear single-source chain** down to a
|
|
16
|
+
* flat `SELECT … FROM <terminal base table> …` by *pure syntactic AST composition*
|
|
17
|
+
* (projection substitution + filter conjunction), so the produced body is byte-equivalent
|
|
18
|
+
* to collapsing the whole chain into one CTE body. Every downstream consumer — `analyzeView`,
|
|
19
|
+
* `classifyViewBody`, the INSERT/UPDATE/DELETE rewriters, RETURNING — then runs unchanged on
|
|
20
|
+
* a genuine single base-table body.
|
|
21
|
+
*
|
|
22
|
+
* Crucially the flattener does **no** lineage / inverse reasoning: it substitutes references
|
|
23
|
+
* and conjoins filters. All the hard backward-composition (inverses, passthrough, authored
|
|
24
|
+
* inverses, computed columns) is recovered by the existing planner when `analyzeView`
|
|
25
|
+
* re-plans the flat body — so a `select id, v+1 as vp from ml2` inlined through two levels
|
|
26
|
+
* still inverts `set vp = 9` to `v = 8`.
|
|
27
|
+
*
|
|
28
|
+
* Non-updateable INTERMEDIATES (an aggregate / distinct / limit / set-op / join CTE in the
|
|
29
|
+
* chain) reject with *that intermediate's* body-shape reason, matching the diagnostic the
|
|
30
|
+
* equivalent collapsed body (or single-level CTE of that shape) raises. A non-updateable
|
|
31
|
+
* CONSUMER (the target body itself — `select sum(v) from a`) is carried through unchanged so
|
|
32
|
+
* the FINAL `analyzeView` on the flattened body rejects it with the same reason a collapsed
|
|
33
|
+
* body would.
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Defensive cap on chain depth. Non-recursive CTEs cannot truly cycle under
|
|
37
|
+
* definition-order visibility (a CTE inlines only against CTEs defined *before* it), but a
|
|
38
|
+
* visited-set + depth cap guard against a pathological AST and convert it into a structured
|
|
39
|
+
* diagnostic rather than a stack overflow.
|
|
40
|
+
*/
|
|
41
|
+
const MAX_FLATTEN_DEPTH = 64;
|
|
42
|
+
/**
|
|
43
|
+
* Flatten a single-source CTE/subquery body's linear chain of sibling-CTE reads down to a
|
|
44
|
+
* body over the terminal base table. Returns the ORIGINAL object identity when nothing is
|
|
45
|
+
* inlined (the FROM is already a base table / view / MV, or not a single CTE source), so the
|
|
46
|
+
* common single-level path is provably untouched.
|
|
47
|
+
*
|
|
48
|
+
* @param body the target body (a CTE's `query` or an inline subquery's body).
|
|
49
|
+
* @param visible the CTEs that resolve in `body`'s FROM, **in definition order** (the
|
|
50
|
+
* prefix of the WITH clause up to — and excluding — a CTE-name target).
|
|
51
|
+
* @param targetName the CTE-name target's own name, which must NOT be inlined (its body's
|
|
52
|
+
* same-named FROM source is the REAL outer table — the load-bearing shadow
|
|
53
|
+
* case). Undefined for an inline-subquery target (no own-name to shadow).
|
|
54
|
+
*/
|
|
55
|
+
export function flattenCteBody(ctx, body, visible, targetName) {
|
|
56
|
+
return flattenSelect(ctx, body, visible, targetName, 0, new Set());
|
|
57
|
+
}
|
|
58
|
+
function flattenSelect(ctx, body, visible, targetName, depth, visited) {
|
|
59
|
+
// A non-SELECT body (VALUES / DML) is terminal — `analyzeView` rejects it natively.
|
|
60
|
+
if (body.type !== 'select')
|
|
61
|
+
return body;
|
|
62
|
+
const inlineSource = singleCteSource(body, visible, targetName);
|
|
63
|
+
if (!inlineSource)
|
|
64
|
+
return body; // terminal: FROM is not a single inlinable-CTE source
|
|
65
|
+
const { inner, sourceName } = inlineSource;
|
|
66
|
+
const innerFlat = flattenInner(ctx, inner, visible, depth, visited);
|
|
67
|
+
return composeBody(ctx, body, innerFlat, inner, sourceName);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* If `body` is a single-source SELECT whose sole FROM source names a visible sibling CTE that
|
|
71
|
+
* may be inlined, return that CTE and the name the body references it by; otherwise undefined
|
|
72
|
+
* (the body is terminal — its FROM is a base table / view / MV, or it is not a plain
|
|
73
|
+
* single-source SELECT).
|
|
74
|
+
*/
|
|
75
|
+
function singleCteSource(body, visible, targetName) {
|
|
76
|
+
// A body carrying its OWN with clause is scoped to that clause — do not cross-inline the
|
|
77
|
+
// outer chain into it (treat as terminal; `analyzeView` proceeds/rejects). Low-risk corner.
|
|
78
|
+
if (body.withClause)
|
|
79
|
+
return undefined;
|
|
80
|
+
if (!body.from || body.from.length !== 1)
|
|
81
|
+
return undefined;
|
|
82
|
+
const fc = body.from[0];
|
|
83
|
+
if (fc.type !== 'table')
|
|
84
|
+
return undefined;
|
|
85
|
+
// A schema-qualified name (`main.a`) is never a bare CTE reference → a real object.
|
|
86
|
+
if (fc.table.schema)
|
|
87
|
+
return undefined;
|
|
88
|
+
const lcName = fc.table.name.toLowerCase();
|
|
89
|
+
// The CTE-name target's own name is shadowed OUT of its body — a same-named FROM source is
|
|
90
|
+
// the REAL outer table, not the CTE (SQL's non-recursive CTE scoping). Leave it terminal.
|
|
91
|
+
if (targetName && lcName === targetName.toLowerCase())
|
|
92
|
+
return undefined;
|
|
93
|
+
const inner = visible.find(c => c.name.toLowerCase() === lcName);
|
|
94
|
+
if (!inner)
|
|
95
|
+
return undefined; // not a visible sibling CTE → terminal base/view/MV source
|
|
96
|
+
return { inner, sourceName: fc.alias ?? fc.table.name };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Flatten the body of an inlinable inner CTE down to a single base-table SELECT, gating its
|
|
100
|
+
* shape FIRST so a non-updateable intermediate rejects with its own body-shape reason
|
|
101
|
+
* (`composeBody` only carries projection + filter, so silently inlining an aggregate /
|
|
102
|
+
* distinct / limit / set-op / join intermediate would DROP the disqualifying clause — hence
|
|
103
|
+
* the explicit reject here rather than at the final `analyzeView`).
|
|
104
|
+
*/
|
|
105
|
+
function flattenInner(ctx, inner, visible, depth, visited) {
|
|
106
|
+
const lcName = inner.name.toLowerCase();
|
|
107
|
+
if (visited.has(lcName) || depth >= MAX_FLATTEN_DEPTH) {
|
|
108
|
+
raiseMutationDiagnostic({
|
|
109
|
+
reason: 'no-base-lineage',
|
|
110
|
+
table: inner.name,
|
|
111
|
+
message: `cannot write through common table expression chain: inlining '${inner.name}' exceeded the supported nesting depth or revisited a CTE (possible cycle)`,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
assertInlinableInner(inner);
|
|
115
|
+
const prefix = ctesBefore(visible, inner);
|
|
116
|
+
const nextVisited = new Set(visited);
|
|
117
|
+
nextVisited.add(lcName);
|
|
118
|
+
// `assertInlinableInner` proved a SELECT body whose FROM is a single base table or a
|
|
119
|
+
// further CTE; `flattenSelect` returns a SELECT in both the terminal and composed cases.
|
|
120
|
+
return flattenSelect(ctx, inner.query, prefix, undefined, depth + 1, nextVisited);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Reject an inner (intermediate) CTE whose body shape cannot be faithfully inlined — the
|
|
124
|
+
* composition would silently drop the disqualifying clause. The reason mirrors `analyzeView` /
|
|
125
|
+
* `classifyViewBody` so the chain rejects with the same diagnostic the equivalent collapsed
|
|
126
|
+
* body or single-level CTE of that shape would. A SELECT whose FROM is a single `{type:'table'}`
|
|
127
|
+
* source (a base table OR a further sibling CTE) passes — the recursion handles the latter.
|
|
128
|
+
*/
|
|
129
|
+
function assertInlinableInner(inner) {
|
|
130
|
+
const q = inner.query;
|
|
131
|
+
const name = inner.name;
|
|
132
|
+
if (q.type !== 'select') {
|
|
133
|
+
reject('no-base-lineage', name, `cannot write through common table expression '${name}': its ${q.type.toUpperCase()} body has no recoverable base operation`);
|
|
134
|
+
}
|
|
135
|
+
// A body carrying its own WITH clause is scoped to that clause; inlining it would drop the
|
|
136
|
+
// nested CTEs its FROM may reference. Reject cleanly rather than risk a dangling reference.
|
|
137
|
+
if (q.withClause) {
|
|
138
|
+
reject('no-base-lineage', name, `cannot write through common table expression '${name}': a body that carries its own WITH clause is not inlinable and is not updateable in phase 1`);
|
|
139
|
+
}
|
|
140
|
+
if (q.distinct) {
|
|
141
|
+
reject('unsupported-distinct', name, `cannot write through common table expression '${name}': a DISTINCT intermediate has no 1:1 base-row lineage and is not updateable in phase 1`);
|
|
142
|
+
}
|
|
143
|
+
if (q.limit || q.offset) {
|
|
144
|
+
reject('unsupported-limit', name, `cannot write through common table expression '${name}': a LIMIT/OFFSET intermediate is not updateable in phase 1 (a mutation would escape the limited window)`);
|
|
145
|
+
}
|
|
146
|
+
if (q.groupBy || q.having) {
|
|
147
|
+
reject('unsupported-aggregate', name, `cannot write through common table expression '${name}': an aggregate/grouping intermediate is not updateable in phase 1`);
|
|
148
|
+
}
|
|
149
|
+
if (q.compound || q.union) {
|
|
150
|
+
reject('unsupported-set-op', name, `cannot write through common table expression '${name}': a set-operation intermediate is not updateable in phase 1`);
|
|
151
|
+
}
|
|
152
|
+
if (!q.from || q.from.length !== 1) {
|
|
153
|
+
reject('unsupported-join', name, `cannot write through common table expression '${name}': a multi-source (join) intermediate is not updateable in phase 1`);
|
|
154
|
+
}
|
|
155
|
+
const fc = q.from[0];
|
|
156
|
+
if (fc.type === 'join') {
|
|
157
|
+
reject('unsupported-join', name, `cannot write through common table expression '${name}': a join intermediate is not updateable in phase 1`);
|
|
158
|
+
}
|
|
159
|
+
if (fc.type !== 'table') {
|
|
160
|
+
// A FROM subquery source / table-valued function — no recoverable base lineage.
|
|
161
|
+
reject('no-base-lineage', name, `cannot write through common table expression '${name}': its body has no recoverable base table and is not updateable in phase 1`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Compose the consumer body over the already-flattened inner body: substitute references to
|
|
166
|
+
* the inner source with its defining expressions, conjoin the two filters, and re-point the
|
|
167
|
+
* FROM at the terminal base table. The consumer's own shape clauses (`distinct` / `limit` /
|
|
168
|
+
* `group by` / `compound` / …) ride through unchanged (carried by the spread, scalar clauses
|
|
169
|
+
* substituted) so a non-updateable CONSUMER is still rejected — by the final `analyzeView`.
|
|
170
|
+
*/
|
|
171
|
+
function composeBody(ctx, consumer, innerFlat, inner, sourceName) {
|
|
172
|
+
const lcSource = sourceName.toLowerCase();
|
|
173
|
+
// The inner's output columns: output-name → defining expression (already in base terms).
|
|
174
|
+
// `null` ⇒ the identity-strip fast path (`select *` inner with no rename): no map, no
|
|
175
|
+
// schema touch — substitution merely drops the `sourceName.` qualifier.
|
|
176
|
+
const innerColumns = resolveInnerColumns(ctx, innerFlat, inner);
|
|
177
|
+
const { topSubst, nestedSubst } = makeSubstitutions(lcSource, innerColumns);
|
|
178
|
+
// Alias-shadow-aware descent: a subquery nested in the consumer that re-binds `sourceName`
|
|
179
|
+
// as a LOCAL FROM alias shadows it, so a `sourceName.`-qualified ref there is local to the
|
|
180
|
+
// nested scope and is NOT rewritten to the inner CTE's defining term (silent-wrong otherwise).
|
|
181
|
+
const descend = (q) => transformAliasScopedQuery(q, nestedSubst);
|
|
182
|
+
const sub = (e) => transformExpr(e, topSubst, descend);
|
|
183
|
+
const columns = composeColumns(consumer.columns, innerFlat.columns, innerColumns, sub);
|
|
184
|
+
const consumerWhere = consumer.where ? sub(consumer.where) : undefined;
|
|
185
|
+
const innerWhere = innerFlat.where ? cloneExpr(innerFlat.where) : undefined;
|
|
186
|
+
const where = combineAnd(consumerWhere, innerWhere);
|
|
187
|
+
return {
|
|
188
|
+
...consumer,
|
|
189
|
+
withClause: undefined,
|
|
190
|
+
columns,
|
|
191
|
+
from: cloneTableFrom(innerFlat.from),
|
|
192
|
+
where,
|
|
193
|
+
// Substitute the carried-over scalar shape clauses so they bind against the terminal
|
|
194
|
+
// base table (a non-updateable consumer still rejects, but the plan must BUILD to reach
|
|
195
|
+
// the reject). The `compound` / `union` legs ride untouched — a set-op consumer rejects
|
|
196
|
+
// `unsupported-set-op` at the SetOperation node before any leg is evaluated.
|
|
197
|
+
groupBy: consumer.groupBy?.map(sub),
|
|
198
|
+
having: consumer.having ? sub(consumer.having) : undefined,
|
|
199
|
+
orderBy: consumer.orderBy?.map(ob => ({ ...ob, expr: sub(ob.expr) })),
|
|
200
|
+
limit: consumer.limit ? sub(consumer.limit) : undefined,
|
|
201
|
+
offset: consumer.offset ? sub(consumer.offset) : undefined,
|
|
202
|
+
defaults: mergeDefaults(innerFlat.defaults, consumer.defaults),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Resolve the inner flattened body's output columns to `{ name, defining-expr }` pairs, or
|
|
207
|
+
* `null` for the identity-strip fast path — a pure `select *` inner with no rename, where the
|
|
208
|
+
* consumer's references resolve to the base table by simply dropping the source qualifier (no
|
|
209
|
+
* schema lookup, no map). The only schema touch is a rename over a `select *` inner, which
|
|
210
|
+
* needs the base table's column list to pair the renamed names with positions.
|
|
211
|
+
*/
|
|
212
|
+
function resolveInnerColumns(ctx, innerFlat, inner) {
|
|
213
|
+
const rename = inner.columns;
|
|
214
|
+
if (isPureStar(innerFlat.columns)) {
|
|
215
|
+
if (!rename || rename.length === 0)
|
|
216
|
+
return null; // identity strip — no schema touch
|
|
217
|
+
const baseCols = baseColumnsOf(ctx, innerFlat);
|
|
218
|
+
if (!baseCols) {
|
|
219
|
+
reject('no-base-lineage', inner.name, `cannot write through common table expression '${inner.name}': a column rename over a 'select *' body whose source columns are not statically resolvable cannot be inlined`);
|
|
220
|
+
}
|
|
221
|
+
if (baseCols.length !== rename.length) {
|
|
222
|
+
reject('no-base-lineage', inner.name, `cannot write through common table expression '${inner.name}': its ${rename.length} renamed columns do not match the ${baseCols.length}-column base source`);
|
|
223
|
+
}
|
|
224
|
+
return rename.map((nm, i) => ({ name: nm, expr: columnExpr(baseCols[i]) }));
|
|
225
|
+
}
|
|
226
|
+
// Explicit projection: each output column maps to its (already base-term) defining
|
|
227
|
+
// expression, named by the rename list when present, else by the column's own output name.
|
|
228
|
+
const out = [];
|
|
229
|
+
innerFlat.columns.forEach((rc, i) => {
|
|
230
|
+
if (rc.type === 'all') {
|
|
231
|
+
// A `select *, extra` mix — too ambiguous to pair with a positional rename. The base
|
|
232
|
+
// columns expand identity-named; reject if a rename is present (it cannot be aligned).
|
|
233
|
+
if (rename && rename.length > 0) {
|
|
234
|
+
reject('no-base-lineage', inner.name, `cannot write through common table expression '${inner.name}': a column rename over a 'select *, …' projection cannot be inlined`);
|
|
235
|
+
}
|
|
236
|
+
const baseCols = baseColumnsOf(ctx, innerFlat);
|
|
237
|
+
if (!baseCols) {
|
|
238
|
+
reject('no-base-lineage', inner.name, `cannot write through common table expression '${inner.name}': a 'select *' projection whose source columns are not statically resolvable cannot be inlined`);
|
|
239
|
+
}
|
|
240
|
+
for (const bc of baseCols)
|
|
241
|
+
out.push({ name: bc, expr: columnExpr(bc) });
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
const name = rename?.[i] ?? rc.alias ?? inferredName(rc.expr);
|
|
245
|
+
if (name === undefined) {
|
|
246
|
+
reject('no-base-lineage', inner.name, `cannot write through common table expression '${inner.name}': an unnamed projection column cannot be referenced by an inlining consumer`);
|
|
247
|
+
}
|
|
248
|
+
out.push({ name, expr: rc.expr });
|
|
249
|
+
});
|
|
250
|
+
return out;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Build the two substitution closures threaded into the consumer rewrite:
|
|
254
|
+
* - `topSubst` rewrites a TOP-LEVEL reference to the inner source — bare (the body's single
|
|
255
|
+
* FROM source) or `sourceName`-qualified — to its inner defining expression.
|
|
256
|
+
* - `nestedSubst` (used inside subquery operands, where a bare name binds to the subquery's
|
|
257
|
+
* own scope) rewrites ONLY a `sourceName`-qualified correlation — and ONLY while `sourceName`
|
|
258
|
+
* is not shadowed by a nested FROM alias. A subquery that re-binds `sourceName` as a LOCAL
|
|
259
|
+
* FROM alias makes a `sourceName.`-qualified ref local to that scope (innermost-scope SQL
|
|
260
|
+
* rules), so it must NOT be rewritten to the inner CTE's defining term. The descent
|
|
261
|
+
* ({@link transformAliasScopedQuery}) threads the FROM-alias shadow set into `nestedSubst`.
|
|
262
|
+
* The identity-strip path mirrors the same split: `topSubst` drops the `sourceName.` qualifier;
|
|
263
|
+
* `nestedSubst` does too but only when `sourceName` is unshadowed. Bare names are left untouched
|
|
264
|
+
* (they already resolve to the base table after the FROM re-point).
|
|
265
|
+
*/
|
|
266
|
+
function makeSubstitutions(lcSource, innerColumns) {
|
|
267
|
+
if (innerColumns === null) {
|
|
268
|
+
const stripTop = (col) => col.table && col.table.toLowerCase() === lcSource ? { type: 'column', name: col.name } : undefined;
|
|
269
|
+
const stripNested = (col, aliasShadow) => col.table && col.table.toLowerCase() === lcSource && !aliasShadow.has(lcSource) ? { type: 'column', name: col.name } : undefined;
|
|
270
|
+
return { topSubst: stripTop, nestedSubst: stripNested };
|
|
271
|
+
}
|
|
272
|
+
const map = new Map();
|
|
273
|
+
for (const ic of innerColumns)
|
|
274
|
+
map.set(ic.name.toLowerCase(), ic.expr);
|
|
275
|
+
// transformExpr clones the returned replacement, so handing back the shared `ic.expr` is safe.
|
|
276
|
+
const lookup = (name) => map.get(name.toLowerCase());
|
|
277
|
+
const topSubst = (col) => {
|
|
278
|
+
if (col.table)
|
|
279
|
+
return col.table.toLowerCase() === lcSource ? lookup(col.name) : undefined;
|
|
280
|
+
return lookup(col.name);
|
|
281
|
+
};
|
|
282
|
+
const nestedSubst = (col, aliasShadow) => col.table && col.table.toLowerCase() === lcSource && !aliasShadow.has(lcSource) ? lookup(col.name) : undefined;
|
|
283
|
+
return { topSubst, nestedSubst };
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Build the flattened body's projection. A pure `select *` consumer passes the inner's output
|
|
287
|
+
* through (verbatim star for the identity case, else re-aliased to the inner output names — so
|
|
288
|
+
* a rename rides through); an explicit consumer substitutes each column's expression, pinning
|
|
289
|
+
* the consumer's output name as an alias so it survives the substitution.
|
|
290
|
+
*/
|
|
291
|
+
function composeColumns(consumerCols, innerFlatCols, innerColumns, sub) {
|
|
292
|
+
if (isPureStar(consumerCols)) {
|
|
293
|
+
if (innerColumns === null)
|
|
294
|
+
return innerFlatCols.map(cloneResultColumn);
|
|
295
|
+
return innerColumns.map(ic => ({ type: 'column', expr: cloneExpr(ic.expr), alias: ic.name }));
|
|
296
|
+
}
|
|
297
|
+
const out = [];
|
|
298
|
+
for (const rc of consumerCols) {
|
|
299
|
+
if (rc.type === 'all') {
|
|
300
|
+
if (innerColumns === null)
|
|
301
|
+
out.push({ type: 'all' });
|
|
302
|
+
else
|
|
303
|
+
for (const ic of innerColumns)
|
|
304
|
+
out.push({ type: 'column', expr: cloneExpr(ic.expr), alias: ic.name });
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
out.push({ type: 'column', expr: sub(rc.expr), alias: rc.alias ?? inferredName(rc.expr), inverse: cloneInverse(rc.inverse) });
|
|
308
|
+
}
|
|
309
|
+
return out;
|
|
310
|
+
}
|
|
311
|
+
/** Merge two `with defaults (…)` lists, consumer winning on a column-name collision. */
|
|
312
|
+
function mergeDefaults(innerDefaults, consumerDefaults) {
|
|
313
|
+
if (!innerDefaults && !consumerDefaults)
|
|
314
|
+
return undefined;
|
|
315
|
+
const byColumn = new Map();
|
|
316
|
+
for (const d of innerDefaults ?? [])
|
|
317
|
+
byColumn.set(d.column.toLowerCase(), d);
|
|
318
|
+
for (const d of consumerDefaults ?? [])
|
|
319
|
+
byColumn.set(d.column.toLowerCase(), d);
|
|
320
|
+
return [...byColumn.values()].map(d => ({ ...d, expr: cloneExpr(d.expr) }));
|
|
321
|
+
}
|
|
322
|
+
// --- small AST helpers -----------------------------------------------------
|
|
323
|
+
/** True iff a projection list is a single bare/`a.*` star (full passthrough). */
|
|
324
|
+
function isPureStar(cols) {
|
|
325
|
+
return cols.length === 1 && cols[0].type === 'all';
|
|
326
|
+
}
|
|
327
|
+
/** The output name a projection expression carries when unaliased — a column name, else none. */
|
|
328
|
+
function inferredName(expr) {
|
|
329
|
+
return expr.type === 'column' ? expr.name : undefined;
|
|
330
|
+
}
|
|
331
|
+
function columnExpr(name) {
|
|
332
|
+
return { type: 'column', name };
|
|
333
|
+
}
|
|
334
|
+
/** The CTEs of `visible` defined strictly before `inner` (its in-scope prior siblings). */
|
|
335
|
+
function ctesBefore(visible, inner) {
|
|
336
|
+
const idx = visible.indexOf(inner);
|
|
337
|
+
return idx <= 0 ? [] : visible.slice(0, idx);
|
|
338
|
+
}
|
|
339
|
+
/** Clone a (single terminal base-table) FROM clause, severing identifier sharing. */
|
|
340
|
+
function cloneTableFrom(from) {
|
|
341
|
+
return (from ?? []).map(fc => fc.type === 'table' ? { ...fc, table: { ...fc.table } } : { ...fc });
|
|
342
|
+
}
|
|
343
|
+
/** Structural clone of one projection column (used for the passthrough star case). The
|
|
344
|
+
* `with inverse` clause is deep-cloned too, severing all sharing with the source AST — the
|
|
345
|
+
* invariant the scope-transform clones uphold (in-place rewriters mutate the produced tree). */
|
|
346
|
+
function cloneResultColumn(rc) {
|
|
347
|
+
return rc.type === 'all' ? { ...rc } : { ...rc, expr: cloneExpr(rc.expr), inverse: cloneInverse(rc.inverse) };
|
|
348
|
+
}
|
|
349
|
+
/** Deep-clone a result column's `with inverse (col = expr, …)` list, severing expr sharing. */
|
|
350
|
+
function cloneInverse(inverse) {
|
|
351
|
+
return inverse?.map(a => ({ ...a, expr: cloneExpr(a.expr) }));
|
|
352
|
+
}
|
|
353
|
+
/** The base table's column names for a flattened body whose FROM is one base table, or null. */
|
|
354
|
+
function baseColumnsOf(ctx, innerFlat) {
|
|
355
|
+
const fc = innerFlat.from?.[0];
|
|
356
|
+
if (!fc || fc.type !== 'table')
|
|
357
|
+
return null;
|
|
358
|
+
const table = ctx.schemaManager.getTable(fc.table.schema, fc.table.name);
|
|
359
|
+
return table ? table.columns.map(c => c.name) : null;
|
|
360
|
+
}
|
|
361
|
+
function reject(reason, table, message) {
|
|
362
|
+
raiseMutationDiagnostic({ reason, table, message });
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=cte-flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cte-flatten.js","sourceRoot":"","sources":["../../../../src/planner/mutation/cte-flatten.ts"],"names":[],"mappings":"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"}
|