@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,220 @@
|
|
|
1
|
+
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
2
|
+
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
3
|
+
import { TableReferenceNode } from '../nodes/reference.js';
|
|
4
|
+
import { buildTableReference } from '../building/table.js';
|
|
5
|
+
import { raiseMutationDiagnostic } from './mutation-diagnostic.js';
|
|
6
|
+
import { rewriteViewInsert, rewriteViewUpdate, rewriteViewDelete } from './single-source.js';
|
|
7
|
+
import { isJoinBody, propagateMultiSource } from './multi-source.js';
|
|
8
|
+
import { propagateDecomposition } from './decomposition.js';
|
|
9
|
+
/**
|
|
10
|
+
* Mutation propagation classifier — the dual of `binding-extractor` /
|
|
11
|
+
* `change-scope`, walking a planned view body from the user-visible relation
|
|
12
|
+
* down to base-table references to decide whether a deterministic decomposition
|
|
13
|
+
* exists at plan time (see `docs/view-updateability.md` § Mutation Propagation).
|
|
14
|
+
*
|
|
15
|
+
* **Phase 1 scope.** Only the *single-source projection-and-filter* shape is
|
|
16
|
+
* decomposable: the relational spine from the body root to a base table may
|
|
17
|
+
* contain only pass-through operators (Project / Filter / Sort / Limit /
|
|
18
|
+
* Distinct / Alias / Retrieve) and must terminate at exactly one
|
|
19
|
+
* `TableReferenceNode`. Joins, aggregates, set-ops, windows, recursive CTEs and
|
|
20
|
+
* VALUES bodies are rejected with a structured reason; the broader FD/EC-driven
|
|
21
|
+
* fan-out is Phase 2+.
|
|
22
|
+
*
|
|
23
|
+
* `Sort` / `Limit` / `Distinct` are tolerated *here* only so the walk can reach
|
|
24
|
+
* the base table through them; the single-source rewrite layer
|
|
25
|
+
* (`mutation/single-source.ts`) separately rejects `LIMIT`/`OFFSET`/`DISTINCT`
|
|
26
|
+
* bodies, since a predicate-conjoin cannot faithfully reproduce a row-count
|
|
27
|
+
* window or duplicate-collapse (a mutation would otherwise escape the window).
|
|
28
|
+
*
|
|
29
|
+
* The walk descends only *relational* children (`getRelations()`), so scalar
|
|
30
|
+
* subqueries embedded in predicates/projections never pollute the base-table
|
|
31
|
+
* count.
|
|
32
|
+
*/
|
|
33
|
+
/** Pass-through relational operators that a phase-1 decomposition tolerates. */
|
|
34
|
+
const PASSTHROUGH_NODES = new Set([
|
|
35
|
+
PlanNodeType.Retrieve,
|
|
36
|
+
PlanNodeType.Filter,
|
|
37
|
+
PlanNodeType.Project,
|
|
38
|
+
PlanNodeType.Distinct,
|
|
39
|
+
PlanNodeType.Sort,
|
|
40
|
+
PlanNodeType.LimitOffset,
|
|
41
|
+
PlanNodeType.Alias,
|
|
42
|
+
// A lens-boundary FD marker is row-preserving and single-source; tolerated so
|
|
43
|
+
// a lens-over-lens body walk can reach the base table through it. (The
|
|
44
|
+
// standard lens mutation walks the compiled body over basis tables, where
|
|
45
|
+
// this node never appears — see docs/lens.md § FD contribution.)
|
|
46
|
+
PlanNodeType.AssertedKeys,
|
|
47
|
+
]);
|
|
48
|
+
/** Map a disallowed body operator to a structured rejection reason. */
|
|
49
|
+
function reasonForOperator(nodeType) {
|
|
50
|
+
switch (nodeType) {
|
|
51
|
+
case PlanNodeType.Join:
|
|
52
|
+
case PlanNodeType.NestedLoopJoin:
|
|
53
|
+
case PlanNodeType.HashJoin:
|
|
54
|
+
case PlanNodeType.MergeJoin:
|
|
55
|
+
case PlanNodeType.AsofScan:
|
|
56
|
+
case PlanNodeType.FanOutLookupJoin:
|
|
57
|
+
return 'unsupported-join';
|
|
58
|
+
case PlanNodeType.Aggregate:
|
|
59
|
+
case PlanNodeType.StreamAggregate:
|
|
60
|
+
case PlanNodeType.HashAggregate:
|
|
61
|
+
return 'unsupported-aggregate';
|
|
62
|
+
case PlanNodeType.SetOperation:
|
|
63
|
+
return 'unsupported-set-op';
|
|
64
|
+
case PlanNodeType.Window:
|
|
65
|
+
return 'unsupported-window';
|
|
66
|
+
case PlanNodeType.RecursiveCTE:
|
|
67
|
+
case PlanNodeType.InternalRecursiveCTERef:
|
|
68
|
+
return 'recursive-cte';
|
|
69
|
+
default:
|
|
70
|
+
return 'no-base-lineage';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Classify a planned view body for phase-1 mutability. Returns the single base
|
|
75
|
+
* table when the body is a single-source projection-and-filter, or a structured
|
|
76
|
+
* rejection naming the obstructing operator.
|
|
77
|
+
*/
|
|
78
|
+
export function classifyViewBody(body) {
|
|
79
|
+
const tableRefs = [];
|
|
80
|
+
let rejection;
|
|
81
|
+
const visit = (node) => {
|
|
82
|
+
if (rejection)
|
|
83
|
+
return;
|
|
84
|
+
if (node instanceof TableReferenceNode) {
|
|
85
|
+
tableRefs.push(node);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (isRelationalNode(node) && !PASSTHROUGH_NODES.has(node.nodeType)) {
|
|
89
|
+
rejection = {
|
|
90
|
+
kind: 'rejected',
|
|
91
|
+
reason: reasonForOperator(node.nodeType),
|
|
92
|
+
detail: `view body operator '${node.nodeType}' is not updateable in phase 1`,
|
|
93
|
+
};
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
for (const child of node.getRelations()) {
|
|
97
|
+
visit(child);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
visit(body);
|
|
101
|
+
if (rejection)
|
|
102
|
+
return rejection;
|
|
103
|
+
if (tableRefs.length === 0) {
|
|
104
|
+
return {
|
|
105
|
+
kind: 'rejected',
|
|
106
|
+
reason: 'no-base-lineage',
|
|
107
|
+
detail: 'view body reaches no base table (e.g. a VALUES body); no recoverable base operation',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (tableRefs.length > 1) {
|
|
111
|
+
return {
|
|
112
|
+
kind: 'rejected',
|
|
113
|
+
reason: 'unsupported-join',
|
|
114
|
+
detail: `view body references ${tableRefs.length} base tables; multi-source decomposition is phase 2`,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return { kind: 'single-source', baseTable: tableRefs[0] };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The decomposition storage shape to fan a mutation out across, or `undefined`
|
|
121
|
+
* when the target is not a decomposition-backed logical table.
|
|
122
|
+
*
|
|
123
|
+
* Gated to the **synthesized** get body: a `primary-storage` advertisement with
|
|
124
|
+
* no `declare lens` override means the registered body is exactly the
|
|
125
|
+
* `compileDecompositionBody` join (`schema/lens-compiler.ts`), so the
|
|
126
|
+
* advertisement faithfully describes its members. A plain view / MV / name-match
|
|
127
|
+
* lens has no slot or no storage advertisement ⇒ `undefined` (unchanged path); an
|
|
128
|
+
* overridden lens carries a hand-authored body the advertisement does not
|
|
129
|
+
* describe, so it stays on the generic path too.
|
|
130
|
+
*/
|
|
131
|
+
export function decompositionStorage(ctx, view) {
|
|
132
|
+
const slot = ctx.schemaManager.getSchema(view.schemaName)?.getLensSlot(view.name);
|
|
133
|
+
if (!slot || slot.override || slot.advertisement?.role !== 'primary-storage')
|
|
134
|
+
return undefined;
|
|
135
|
+
return slot.advertisement.storage;
|
|
136
|
+
}
|
|
137
|
+
/** Resolve the base table named by a rewritten base-table DML statement. */
|
|
138
|
+
function resolveBaseTable(ctx, statement) {
|
|
139
|
+
return buildTableReference({ type: 'table', table: statement.table }, ctx).tableRef;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Decompose a view-/MV-mediated mutation into an ordered list of base-table
|
|
143
|
+
* operations — the single propagation path for all view mutations.
|
|
144
|
+
*
|
|
145
|
+
* - A **single-source** projection-and-filter spine reuses the relocated rewrite
|
|
146
|
+
* (`single-source.ts`) to produce exactly one `BaseOp`.
|
|
147
|
+
* - A **two-table key-preserving inner join** body routes to the planned-body
|
|
148
|
+
* walk (`multi-source.ts`), which reads `updateLineage` to emit an ordered
|
|
149
|
+
* multi-element `BaseOp[]` for `update` / `delete` (insert is a later phase).
|
|
150
|
+
*
|
|
151
|
+
* Broader shapes (outer joins, set-ops, aggregates, > 2 tables) stay
|
|
152
|
+
* diagnosed-and-rejected with a structured reason.
|
|
153
|
+
*/
|
|
154
|
+
export function propagate(ctx, view, req,
|
|
155
|
+
/**
|
|
156
|
+
* A CTE-name DML target's `ctxSelfRead` (the body context with the target name
|
|
157
|
+
* re-added to `cteNodes`, resolving to the eager self-read capture), threaded into
|
|
158
|
+
* the single-source UPDATE/DELETE rewrite so a user-clause self-read `from t`
|
|
159
|
+
* resolves to the frozen capture (docs/view-updateability.md § Common Table
|
|
160
|
+
* Expressions — self-reference). Ignored for insert and for the join / decomposition
|
|
161
|
+
* / set-op paths (none of which take the single-source self-read capture path). The
|
|
162
|
+
* BODY is still analysed under `ctx` (target-excluded), so its own `from base`
|
|
163
|
+
* reaches the real table.
|
|
164
|
+
*/
|
|
165
|
+
descendCtx) {
|
|
166
|
+
// A logical table backed by a decomposition advertisement is registered as a
|
|
167
|
+
// view whose body is the synthesized `anchor ⋈ members` join. Routing it
|
|
168
|
+
// through the generic two-table join path below would be unsound (that path
|
|
169
|
+
// picks a single delete side, caps at two tables, and rejects the outer joins
|
|
170
|
+
// optional members ride). Intercept it and fan out off the advertisement.
|
|
171
|
+
const storage = decompositionStorage(ctx, view);
|
|
172
|
+
if (storage) {
|
|
173
|
+
return propagateDecomposition(ctx, view, storage, req);
|
|
174
|
+
}
|
|
175
|
+
// A binary set-operation body carrying membership flags is written through the
|
|
176
|
+
// per-branch fan-out, which needs a plan-level capture (the affected rows + their
|
|
177
|
+
// runtime membership probe) the AST `BaseOp[]` model cannot carry — so it is built
|
|
178
|
+
// directly by `building/view-mutation-builder.ts` (`buildSetOpMutation`), which
|
|
179
|
+
// intercepts before `propagate` runs. Reaching here means a direct/recursive
|
|
180
|
+
// `propagate` call on such a body (e.g. a nested set-op branch — `set-op-membership-nested`);
|
|
181
|
+
// guard it explicitly rather than mis-routing it into the single-source rewrite (which
|
|
182
|
+
// would reject `unsupported-set-op` with a misleading message). A plain (flag-less)
|
|
183
|
+
// set-op body is NOT intercepted here — a directly-reached *flag-less writable* body is
|
|
184
|
+
// handled in `view-mutation-builder.ts` (`set-op-flagless-predicate-honest-writes`, gated
|
|
185
|
+
// to real views); any other flag-less compound (a non-writable shape, or an ephemeral
|
|
186
|
+
// CTE / inline target) falls through to the single-source spine below and rejects
|
|
187
|
+
// `unsupported-set-op` via `classifyViewBody`'s established "not updateable in phase 1"
|
|
188
|
+
// diagnostic, unchanged. The AST peek is inlined (not imported from `set-op.ts`) to keep
|
|
189
|
+
// the dependency one-directional — `set-op.ts` imports `propagate`, never the reverse.
|
|
190
|
+
const so = view.selectAst;
|
|
191
|
+
if (so.type === 'select' && so.compound && so.compound.op !== 'diff'
|
|
192
|
+
&& so.compound.existence && so.compound.existence.length > 0) {
|
|
193
|
+
raiseMutationDiagnostic({
|
|
194
|
+
reason: 'unsupported-set-op',
|
|
195
|
+
table: view.name,
|
|
196
|
+
message: `cannot write through view '${view.name}': a nested / recursively-reached set-operation membership body is not yet decomposable (binary, non-nested set-op writes are built via buildSetOpMutation; nested subtree writes are set-op-membership-nested)`,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
// A join body decomposes through the multi-source planned-body walk; a
|
|
200
|
+
// single-table body through the single-source spine. The peek is a cheap AST
|
|
201
|
+
// check that builds no plan, so the single-source path is unchanged in cost.
|
|
202
|
+
if (isJoinBody(view.selectAst)) {
|
|
203
|
+
return propagateMultiSource(ctx, view, req);
|
|
204
|
+
}
|
|
205
|
+
switch (req.op) {
|
|
206
|
+
case 'insert': {
|
|
207
|
+
const statement = rewriteViewInsert(ctx, req.stmt, view);
|
|
208
|
+
return [{ table: resolveBaseTable(ctx, statement), op: 'insert', statement }];
|
|
209
|
+
}
|
|
210
|
+
case 'update': {
|
|
211
|
+
const statement = rewriteViewUpdate(ctx, req.stmt, view, descendCtx);
|
|
212
|
+
return [{ table: resolveBaseTable(ctx, statement), op: 'update', statement }];
|
|
213
|
+
}
|
|
214
|
+
case 'delete': {
|
|
215
|
+
const statement = rewriteViewDelete(ctx, req.stmt, view, descendCtx);
|
|
216
|
+
return [{ table: resolveBaseTable(ctx, statement), op: 'delete', statement }];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=propagate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagate.js","sourceRoot":"","sources":["../../../../src/planner/mutation/propagate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type * as AST from '../../parser/ast.js';
|
|
2
|
+
import type { PlanningContext } from '../planning-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* The one scope-aware column-substitution primitive the view-mutation backward
|
|
5
|
+
* path shares (`docs/view-updateability.md` § Selection).
|
|
6
|
+
*
|
|
7
|
+
* Three callers used to each carry a near-parallel copy of "rewrite column
|
|
8
|
+
* references X→Y in an expression / query, scope-aware (shadowing, taint, deep
|
|
9
|
+
* subquery descent)":
|
|
10
|
+
* - `single-source.ts` — the view-column → base-term descent and the
|
|
11
|
+
* correlation-qualifier of a substituted base term (both DEEP / scope-aware),
|
|
12
|
+
* - `multi-source.ts` — view-column → alias-qualified base term,
|
|
13
|
+
* - `lens-enforcement.ts` — logical → basis column rewriting.
|
|
14
|
+
*
|
|
15
|
+
* They share a shadowing/taint model and differ only in the substitution map and
|
|
16
|
+
* the qualification rule. This module owns the structural tree-walker
|
|
17
|
+
* ({@link transformExpr} and the clones built on it), the FROM-source column-name
|
|
18
|
+
* resolution that drives the shadow set ({@link collectFromColumnNames}), and the
|
|
19
|
+
* scope-aware descent ({@link transformScopedExpr} / {@link transformScopedQuery})
|
|
20
|
+
* parameterized by a {@link ScopeContext} value object. Each caller supplies a
|
|
21
|
+
* `ScopeContext` (its substitution closure + taint policy + reject builders); the
|
|
22
|
+
* descent itself — shadow accumulation across nested scopes, the
|
|
23
|
+
* `unsupported-subquery-correlation` taint logic, sibling-leg scoping — is shared.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Structurally clone an expression, substituting column references via
|
|
27
|
+
* `substitute`. A substituted replacement is cloned but NOT re-substituted
|
|
28
|
+
* (the replacement is already in target terms).
|
|
29
|
+
*
|
|
30
|
+
* Subquery operands (`subquery` / `exists` / `in … (select …)`) are descended
|
|
31
|
+
* into via the optional `descend` transformer, so a column reference nested
|
|
32
|
+
* inside a correlated subquery of a user predicate / assigned value is rewritten
|
|
33
|
+
* to its lineage (scope-aware — see {@link transformScopedQuery}). With `descend`
|
|
34
|
+
* omitted the subquery operand is passed through structurally — byte-identical to
|
|
35
|
+
* a plain structural rewrite — which keeps every top-level-only caller (and
|
|
36
|
+
* {@link cloneExpr}'s no-substitution clone) unchanged.
|
|
37
|
+
*/
|
|
38
|
+
export declare function transformExpr(expr: AST.Expression, substitute: (col: AST.ColumnExpr) => AST.Expression | undefined, descend?: (query: AST.QueryExpr) => AST.QueryExpr): AST.Expression;
|
|
39
|
+
/** Deep structural clone of an expression, including any nested subqueries. */
|
|
40
|
+
export declare function cloneExpr(expr: AST.Expression): AST.Expression;
|
|
41
|
+
/**
|
|
42
|
+
* Substitute every `new.<name>`-qualified column reference in an authored
|
|
43
|
+
* inverse expression (docs/view-updateability.md § Authored inverses) — at any
|
|
44
|
+
* depth, including inside subquery operands (a `new.` ref correlates to the
|
|
45
|
+
* written view row wherever it appears; `new` is a reserved qualifier no FROM
|
|
46
|
+
* source legitimately shadows). The replacement is cloned by `transformExpr`,
|
|
47
|
+
* so `resolve` may return a shared expression.
|
|
48
|
+
*/
|
|
49
|
+
export declare function substituteNewRefs(expr: AST.Expression, resolve: (name: string) => AST.Expression): AST.Expression;
|
|
50
|
+
/** Deep structural clone of a relation-producing subquery (no substitution). */
|
|
51
|
+
export declare function cloneQueryExpr(query: AST.QueryExpr): AST.QueryExpr;
|
|
52
|
+
/**
|
|
53
|
+
* Apply a column substitution uniformly through a subquery's structure — NOT
|
|
54
|
+
* scope-aware. The substitution decides purely on the column's own qualifier
|
|
55
|
+
* (e.g. {@link cloneQueryExpr}'s no-op, or the multi-source SET-value qualifier
|
|
56
|
+
* strip), so the enclosing scope is irrelevant and the same `substitute` is
|
|
57
|
+
* applied at every nesting depth. The `with` clause is cloned without
|
|
58
|
+
* substitution — a CTE body cannot correlate to the enclosing query, so it
|
|
59
|
+
* needs no rewrite, only severed sharing (see {@link cloneWithClause}).
|
|
60
|
+
*/
|
|
61
|
+
export declare function mapQueryExprUniform(query: AST.QueryExpr, substitute: (col: AST.ColumnExpr) => AST.Expression | undefined): AST.QueryExpr;
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the lowercased set of column names a subquery's FROM sources introduce
|
|
64
|
+
* into scope, or `null` when any source's columns cannot be resolved statically
|
|
65
|
+
* (a TVF, a `select *` / unnamed-projection subquery source, or an unknown name
|
|
66
|
+
* such as a CTE reference). A `null` marks the scope (and everything nested in
|
|
67
|
+
* it) **tainted**: a descent can no longer prove an unqualified reference is
|
|
68
|
+
* *not* a local column, so the {@link ScopeContext} decides whether to reject or
|
|
69
|
+
* carry the taint forward.
|
|
70
|
+
*/
|
|
71
|
+
export declare function collectFromColumnNames(ctx: PlanningContext, from: readonly AST.FromClause[] | undefined): Set<string> | null;
|
|
72
|
+
/**
|
|
73
|
+
* The caller-specific knobs of a scope-aware substitution. The descent
|
|
74
|
+
* ({@link transformScopedQuery}) owns the shadow accumulation / taint
|
|
75
|
+
* propagation / sibling-leg scoping; this object owns only what differs between
|
|
76
|
+
* callers: the per-column substitution rule and how to treat an unresolvable
|
|
77
|
+
* scope or an embedded data-modifying subquery.
|
|
78
|
+
*/
|
|
79
|
+
interface ScopeContextBase {
|
|
80
|
+
/**
|
|
81
|
+
* Build the per-column substitution closure for ONE scope, given the set of
|
|
82
|
+
* column names shadowed by this (and enclosing) scopes, whether the scope is
|
|
83
|
+
* tainted (an enclosing scope's columns proved unresolvable), and the set of FROM
|
|
84
|
+
* **aliases** bound by this (and enclosing) scopes. Returns the replacement
|
|
85
|
+
* expression for a column, or `undefined` to leave it untouched. May throw a
|
|
86
|
+
* structured diagnostic (e.g. a tainted scope rejecting an unqualified,
|
|
87
|
+
* correlation-ambiguous reference).
|
|
88
|
+
*
|
|
89
|
+
* `aliasShadowed` is the alias-only analog of `shadowed` (built from
|
|
90
|
+
* {@link collectFromAliases}, never tainted — a FROM alias is always statically
|
|
91
|
+
* known). It lets a context distinguish a genuine outer-correlation qualifier from
|
|
92
|
+
* a qualifier that names a locally-shadowed FROM source: a view-name-qualified ref
|
|
93
|
+
* (`t.id`) is an outer view-column correlation UNLESS `t` is also a local FROM
|
|
94
|
+
* alias (the self-read `select t.id from t` over the eager capture), in which case
|
|
95
|
+
* it is the capture's own column and stays local. Implementers that do not care
|
|
96
|
+
* about alias shadowing simply ignore the parameter.
|
|
97
|
+
*/
|
|
98
|
+
makeSubstitute(shadowed: ReadonlySet<string>, tainted: boolean, aliasShadowed: ReadonlySet<string>): (col: AST.ColumnExpr) => AST.Expression | undefined;
|
|
99
|
+
/** Raise the structured diagnostic for an embedded data-modifying (INSERT/UPDATE/DELETE) subquery. */
|
|
100
|
+
rejectDmlSubquery(): never;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The caller-specific knobs of a scope-aware substitution. The descent
|
|
104
|
+
* ({@link transformScopedQuery}) owns the shadow accumulation / taint
|
|
105
|
+
* propagation / sibling-leg scoping; this object owns only what differs between
|
|
106
|
+
* callers: the per-column substitution rule and how to treat an unresolvable
|
|
107
|
+
* scope or an embedded data-modifying subquery.
|
|
108
|
+
*
|
|
109
|
+
* The `unresolvableScope` policy — for when a scope's FROM columns are
|
|
110
|
+
* unresolvable (`collectFromColumnNames` returns `null`) — is a discriminated
|
|
111
|
+
* union: `'taint'` carries `tainted = true` forward (the substitution decides
|
|
112
|
+
* per-reference); `'reject'` raises `rejectUnresolvableScope` immediately rather
|
|
113
|
+
* than risk a silent mis-bind, and the union requires the handler be supplied
|
|
114
|
+
* exactly with that policy (so the descent never needs a non-null assertion).
|
|
115
|
+
*/
|
|
116
|
+
export type ScopeContext = ScopeContextBase & ({
|
|
117
|
+
readonly unresolvableScope: 'taint';
|
|
118
|
+
rejectUnresolvableScope?: undefined;
|
|
119
|
+
} | {
|
|
120
|
+
readonly unresolvableScope: 'reject';
|
|
121
|
+
rejectUnresolvableScope(): never;
|
|
122
|
+
});
|
|
123
|
+
/**
|
|
124
|
+
* Scope-aware substitution over an expression, entered at the outermost scope
|
|
125
|
+
* (no shadowing, untainted). Used to rewrite a substituted *term* whose own
|
|
126
|
+
* correlation refs must be (re-)bound (the single-source base-term qualifier).
|
|
127
|
+
*/
|
|
128
|
+
export declare function transformScopedExpr(ctx: PlanningContext, scope: ScopeContext, expr: AST.Expression): AST.Expression;
|
|
129
|
+
/**
|
|
130
|
+
* Scope-aware transform of an inner `QueryExpr`. Rewrites column references
|
|
131
|
+
* correlated to the outer scope per the {@link ScopeContext}, while leaving
|
|
132
|
+
* subquery-local same-named columns untouched.
|
|
133
|
+
*
|
|
134
|
+
* `shadowed` is the set of column names introduced by ENCLOSING subquery scopes;
|
|
135
|
+
* `tainted` is set once an enclosing scope's columns proved unresolvable (so the
|
|
136
|
+
* `ScopeContext`'s substitution can reject an unqualified, ambiguous reference at
|
|
137
|
+
* this depth or below). A `select`'s own FROM column names join the shadow set
|
|
138
|
+
* for its clauses and any subquery nested in them; a sibling compound / union leg
|
|
139
|
+
* keeps the incoming `shadowed` / `tainted` (it correlates to the same outer
|
|
140
|
+
* scope, not to this select's FROM).
|
|
141
|
+
*/
|
|
142
|
+
export declare function transformScopedQuery(ctx: PlanningContext, scope: ScopeContext, query: AST.QueryExpr, shadowed: ReadonlySet<string>, tainted: boolean, aliasShadowed?: ReadonlySet<string>): AST.QueryExpr;
|
|
143
|
+
/**
|
|
144
|
+
* The lowercased set of FROM aliases a subquery's FROM sources bind into scope.
|
|
145
|
+
* Unlike {@link collectFromColumnNames} this NEVER returns `null` and needs no
|
|
146
|
+
* `PlanningContext`: a FROM alias is always statically known from the FROM clause
|
|
147
|
+
* itself, even when the source's *columns* are unresolvable (a `select *` / TVF /
|
|
148
|
+
* CTE still binds its own alias), so alias shadowing needs no taint signal.
|
|
149
|
+
*
|
|
150
|
+
* table -> alias ?? table.name
|
|
151
|
+
* subquerySource -> alias (always present)
|
|
152
|
+
* functionSource -> alias ?? name.name
|
|
153
|
+
* join -> union(left, right)
|
|
154
|
+
*/
|
|
155
|
+
export declare function collectFromAliases(from: readonly AST.FromClause[] | undefined): Set<string>;
|
|
156
|
+
/**
|
|
157
|
+
* Alias-shadow-aware structural substitution over an expression, entered at the
|
|
158
|
+
* outermost scope (no inner FROM aliases shadow yet). `substitute` receives each
|
|
159
|
+
* column AND the set of FROM aliases shadowing at the column's depth, so a
|
|
160
|
+
* qualifier shadowed by an inner value-subquery FROM alias can be left local
|
|
161
|
+
* (per innermost-scope SQL rules) instead of routed by the cross-source strip.
|
|
162
|
+
*
|
|
163
|
+
* Mirrors {@link transformScopedQuery}'s scope rules — a select's own FROM
|
|
164
|
+
* aliases join the shadow set for its clauses and any subquery nested in them; a
|
|
165
|
+
* compound / union leg keeps the incoming set (it correlates to the same outer
|
|
166
|
+
* scope); VALUES has no FROM — but threads ONLY an alias set: no column-name
|
|
167
|
+
* shadow set, no taint, no reject. An embedded INSERT/UPDATE/DELETE … RETURNING
|
|
168
|
+
* subquery is cloned through structurally (no substitution), exactly matching the
|
|
169
|
+
* cross-source strip's prior {@link mapQueryExprUniform} behaviour.
|
|
170
|
+
*/
|
|
171
|
+
export declare function transformAliasScopedExpr(expr: AST.Expression, substitute: (col: AST.ColumnExpr, aliasShadow: ReadonlySet<string>) => AST.Expression | undefined): AST.Expression;
|
|
172
|
+
/**
|
|
173
|
+
* Alias-shadow-aware transform of an inner `QueryExpr`, threading the FROM-alias
|
|
174
|
+
* shadow set exactly as {@link transformScopedQuery} threads its column-name
|
|
175
|
+
* `shadowed` set: a `select`'s own FROM aliases join the set for its clauses and
|
|
176
|
+
* nested subqueries; a sibling compound / union leg keeps the incoming set; a
|
|
177
|
+
* VALUES body (no FROM) keeps it too; a DML … RETURNING subquery clones through.
|
|
178
|
+
*/
|
|
179
|
+
export declare function transformAliasScopedQuery(query: AST.QueryExpr, substitute: (col: AST.ColumnExpr, aliasShadow: ReadonlySet<string>) => AST.Expression | undefined, aliasShadow?: ReadonlySet<string>): AST.QueryExpr;
|
|
180
|
+
export {};
|
|
181
|
+
//# sourceMappingURL=scope-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-transform.d.ts","sourceRoot":"","sources":["../../../../src/planner/mutation/scope-transform.ts"],"names":[],"mappings":"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"}
|