@quereus/quereus 3.3.0 → 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 -110
- 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 +793 -118
- 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 +276 -7
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1387 -469
- 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/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 +108 -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 +3 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +192 -9
- 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 +109 -30
- 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 +47 -0
- 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/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.js +3 -3
- 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 +18 -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/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 +124 -9
- 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.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +4 -5
- 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 +85 -11
- 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 +62 -27
- 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 +291 -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 +7 -6
- package/dist/src/planner/nodes/sort.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 +1 -0
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +16 -6
- 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 +2 -2
- 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-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +9 -0
- 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/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 +38 -1
- 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.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +19 -1
- 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 +9 -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 +12 -1
- 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 +4 -0
- 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 +9 -0
- 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-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 +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +4 -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/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 +177 -43
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +396 -101
- 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.map +1 -1
- package/dist/src/planner/util/key-utils.js +81 -12
- 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 +29 -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 +18 -5
- 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 +5 -9
- 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 +8 -2
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +15 -0
- 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/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 +15 -3
- 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/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
|
@@ -7,10 +7,31 @@ import { normalizePredicate } from '../analysis/predicate-normalizer.js';
|
|
|
7
7
|
import { combineJoinKeys, analyzeJoinKeyCoverage } from '../util/key-utils.js';
|
|
8
8
|
import { BinaryOpNode } from './scalar.js';
|
|
9
9
|
import { ColumnReferenceNode } from './reference.js';
|
|
10
|
-
import { buildJoinAttributes, buildJoinRelationType, estimateJoinRows, propagateJoinMonotonicOn, propagateJoinFds } from './join-utils.js';
|
|
10
|
+
import { buildJoinAttributes, buildJoinRelationType, estimateJoinRows, propagateJoinMonotonicOn, propagateJoinFds, propagateJoinInds } from './join-utils.js';
|
|
11
|
+
import { isValueDiscriminatingEquality } from '../analysis/comparison-collation.js';
|
|
12
|
+
import { deriveJoinUpdateLineage } from '../analysis/update-lineage.js';
|
|
11
13
|
/**
|
|
12
14
|
* Extract equi-join column index pairs from a join condition (AND-of-equalities).
|
|
13
15
|
* Returns pairs of {left, right} column indices.
|
|
16
|
+
*
|
|
17
|
+
* An equi-pair is a VALUE-level pairing fact — its consumers (join key
|
|
18
|
+
* coverage, FD/EC propagation, FK-alignment rules, join elimination, the
|
|
19
|
+
* coverage prover) all assume matched rows are value-equal on the pair, so a
|
|
20
|
+
* pair is only recognized when the comparison is value-discriminating
|
|
21
|
+
* (`isValueDiscriminatingEquality`): for textual columns, every collation
|
|
22
|
+
* either side contributes must be BINARY. A NOCASE comparison over a
|
|
23
|
+
* BINARY-keyed column matches several distinct key values, so a pair minted
|
|
24
|
+
* from it would falsely claim key coverage / preserved keys (ticket
|
|
25
|
+
* `collation-blind-equality-fact-extraction`). Declared-non-BINARY equi-joins
|
|
26
|
+
* therefore contribute NO pairs (a sound under-claim: keys combine as a cross
|
|
27
|
+
* product, eliminations don't fire). Physical join algorithm selection is
|
|
28
|
+
* unaffected — it uses its own extractor (`rules/join/equi-pair-extractor.ts`)
|
|
29
|
+
* and resolves collations at emit time.
|
|
30
|
+
*
|
|
31
|
+
* Operands must be **bare** `ColumnReferenceNode`s: a `COLLATE`-wrapped side
|
|
32
|
+
* (`l.x = r.b collate nocase`) is structurally rejected. That exclusion is
|
|
33
|
+
* load-bearing — do not "improve" this with a collate-unwrapping step without
|
|
34
|
+
* re-deriving the gate above against the wrapper's collation.
|
|
14
35
|
*/
|
|
15
36
|
export function extractEquiPairsFromCondition(condition, leftAttrs, rightAttrs) {
|
|
16
37
|
const pairs = [];
|
|
@@ -31,7 +52,8 @@ export function extractEquiPairsFromCondition(condition, leftAttrs, rightAttrs)
|
|
|
31
52
|
continue;
|
|
32
53
|
}
|
|
33
54
|
if (op === '=') {
|
|
34
|
-
if (n.left instanceof ColumnReferenceNode && n.right instanceof ColumnReferenceNode
|
|
55
|
+
if (n.left instanceof ColumnReferenceNode && n.right instanceof ColumnReferenceNode
|
|
56
|
+
&& isValueDiscriminatingEquality(n.left, n.right)) {
|
|
35
57
|
let lIdx = leftIdToIndex.get(n.left.attributeId);
|
|
36
58
|
let rIdx = rightIdToIndex.get(n.right.attributeId);
|
|
37
59
|
if (lIdx !== undefined && rIdx !== undefined) {
|
|
@@ -60,9 +82,10 @@ export class JoinNode extends PlanNode {
|
|
|
60
82
|
joinType;
|
|
61
83
|
condition;
|
|
62
84
|
usingColumns;
|
|
85
|
+
existence;
|
|
63
86
|
nodeType = PlanNodeType.Join;
|
|
64
87
|
attributesCache;
|
|
65
|
-
constructor(scope, left, right, joinType, condition, usingColumns) {
|
|
88
|
+
constructor(scope, left, right, joinType, condition, usingColumns, existence) {
|
|
66
89
|
// Cost estimate: base cost is sum of children plus join cost
|
|
67
90
|
const leftCost = left.getTotalCost();
|
|
68
91
|
const rightCost = right.getTotalCost();
|
|
@@ -76,6 +99,7 @@ export class JoinNode extends PlanNode {
|
|
|
76
99
|
this.joinType = joinType;
|
|
77
100
|
this.condition = condition;
|
|
78
101
|
this.usingColumns = usingColumns;
|
|
102
|
+
this.existence = existence;
|
|
79
103
|
this.attributesCache = new Cached(() => this.buildAttributes());
|
|
80
104
|
}
|
|
81
105
|
computePhysical(childrenPhysical) {
|
|
@@ -95,17 +119,60 @@ export class JoinNode extends PlanNode {
|
|
|
95
119
|
})).filter(p => p.leftAttrId !== undefined && p.rightAttrId !== undefined);
|
|
96
120
|
const totalCols = this.getAttributes().length;
|
|
97
121
|
const fdResult = propagateJoinFds(this.joinType, leftPhys, rightPhys, pairs, leftType.columns.length, totalCols, result.preservedKeys);
|
|
122
|
+
// Backward update-lineage: compose per-source lineage along the join FDs
|
|
123
|
+
// the forward pass computed (output attribute ids are preserved per side,
|
|
124
|
+
// so the maps merge directly). Outer joins wrap the non-preserved side's
|
|
125
|
+
// sites `null-extended` under the join predicate — annotation only; write
|
|
126
|
+
// materialization is a later phase. Each existence flag registers an
|
|
127
|
+
// `existence` site (read-only here) under the same join predicate.
|
|
128
|
+
const { updateLineage, attributeDefaults } = deriveJoinUpdateLineage(this.joinType, leftPhys?.updateLineage, rightPhys?.updateLineage, leftPhys?.attributeDefaults, rightPhys?.attributeDefaults, this.condition?.expression, this.existenceSites());
|
|
98
129
|
return {
|
|
99
130
|
estimatedRows: result.estimatedRows,
|
|
100
131
|
monotonicOn: propagateJoinMonotonicOn(this.joinType, leftPhys, rightPhys, attrIdPairs),
|
|
132
|
+
// `fdResult.fds` already covers `key → flag` for each preserved key: the
|
|
133
|
+
// forward walk's `withKeyFds` builds `key → all_other_cols` over the FULL
|
|
134
|
+
// output column count (which includes the appended flags), so a flag is a
|
|
135
|
+
// dependent of every preserved key and never a determinant — Invariant 1.
|
|
101
136
|
fds: fdResult.fds,
|
|
102
137
|
equivClasses: fdResult.equivClasses,
|
|
103
138
|
constantBindings: fdResult.constantBindings,
|
|
104
|
-
|
|
139
|
+
// Each flag carries a `{true,false}` enum domain (the clean-boolean point).
|
|
140
|
+
domainConstraints: this.withFlagDomains(fdResult.domainConstraints),
|
|
141
|
+
inds: propagateJoinInds(this.joinType, leftPhys, rightPhys, leftType.columns.length),
|
|
142
|
+
updateLineage,
|
|
143
|
+
attributeDefaults,
|
|
105
144
|
};
|
|
106
145
|
}
|
|
146
|
+
/** Output column index of the i-th existence flag (appended after both sides). */
|
|
147
|
+
flagColumnIndex(i) {
|
|
148
|
+
return this.left.getType().columns.length + this.right.getType().columns.length + i;
|
|
149
|
+
}
|
|
150
|
+
/** Existence sites for the backward lineage walk (empty when no flags). */
|
|
151
|
+
existenceSites() {
|
|
152
|
+
if (!this.existence || this.existence.length === 0)
|
|
153
|
+
return undefined;
|
|
154
|
+
return this.existence.map(spec => ({
|
|
155
|
+
attrId: spec.attrId,
|
|
156
|
+
side: spec.side,
|
|
157
|
+
componentTable: Number(spec.side === 'left' ? this.left.id : this.right.id),
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
/** Append a `{true,false}` enum domain constraint per existence flag. */
|
|
161
|
+
withFlagDomains(domains) {
|
|
162
|
+
if (!this.existence || this.existence.length === 0)
|
|
163
|
+
return domains;
|
|
164
|
+
const out = [...(domains ?? [])];
|
|
165
|
+
this.existence.forEach((_spec, i) => {
|
|
166
|
+
out.push({ kind: 'enum', column: this.flagColumnIndex(i), values: [true, false] });
|
|
167
|
+
});
|
|
168
|
+
return out;
|
|
169
|
+
}
|
|
170
|
+
/** True when this join exposes one or more `exists … as` match flags. */
|
|
171
|
+
get hasExistenceColumns() {
|
|
172
|
+
return !!this.existence && this.existence.length > 0;
|
|
173
|
+
}
|
|
107
174
|
buildAttributes() {
|
|
108
|
-
return buildJoinAttributes(this.left.getAttributes(), this.right.getAttributes(), this.joinType);
|
|
175
|
+
return buildJoinAttributes(this.left.getAttributes(), this.right.getAttributes(), this.joinType, undefined, this.existence);
|
|
109
176
|
}
|
|
110
177
|
getAttributes() {
|
|
111
178
|
return this.attributesCache.value;
|
|
@@ -117,7 +184,7 @@ export class JoinNode extends PlanNode {
|
|
|
117
184
|
// keys only survive when the other side's key is covered by the pairs).
|
|
118
185
|
const pairs = extractEquiPairsFromCondition(this.condition, this.left.getAttributes(), this.right.getAttributes());
|
|
119
186
|
const keys = combineJoinKeys(leftType.keys, rightType.keys, this.joinType, leftType.columns.length, pairs);
|
|
120
|
-
return buildJoinRelationType(leftType, rightType, this.joinType, keys);
|
|
187
|
+
return buildJoinRelationType(leftType, rightType, this.joinType, keys, this.existence);
|
|
121
188
|
}
|
|
122
189
|
getChildren() {
|
|
123
190
|
return this.condition ? [this.left, this.right, this.condition] : [this.left, this.right];
|
|
@@ -148,8 +215,10 @@ export class JoinNode extends PlanNode {
|
|
|
148
215
|
if (!leftChanged && !rightChanged && !conditionChanged) {
|
|
149
216
|
return this;
|
|
150
217
|
}
|
|
151
|
-
// Create new instance - JoinNode creates new attributes by combining left and
|
|
152
|
-
|
|
218
|
+
// Create new instance - JoinNode creates new attributes by combining left and
|
|
219
|
+
// right. The existence specs carry pre-minted stable attribute ids, so they
|
|
220
|
+
// are threaded verbatim (the appended flag columns survive the rebuild).
|
|
221
|
+
return new JoinNode(this.scope, newLeft, newRight, this.joinType, newCondition, this.usingColumns, this.existence);
|
|
153
222
|
}
|
|
154
223
|
get estimatedRows() {
|
|
155
224
|
return estimateJoinRows(this.left.estimatedRows, this.right.estimatedRows, this.joinType);
|
|
@@ -171,6 +240,7 @@ export class JoinNode extends PlanNode {
|
|
|
171
240
|
joinType: this.joinType,
|
|
172
241
|
hasCondition: !!this.condition,
|
|
173
242
|
usingColumns: this.usingColumns,
|
|
243
|
+
existence: this.existence?.map(e => `exists ${e.side} as ${e.name}`),
|
|
174
244
|
leftRows: this.left.estimatedRows,
|
|
175
245
|
rightRows: this.right.estimatedRows
|
|
176
246
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"join-node.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { Attribute, ConstantBinding, DomainConstraint, FunctionalDependency, MonotonicOnInfo, PhysicalProperties } from './plan-node.js';
|
|
2
|
-
import type { JoinType } from './join-node.js';
|
|
3
|
-
import type { RelationType, ColRef } from '../../common/datatype.js';
|
|
1
|
+
import type { Attribute, ConstantBinding, DomainConstraint, FunctionalDependency, InclusionDependency, MonotonicOnInfo, PhysicalProperties } from './plan-node.js';
|
|
2
|
+
import type { JoinType, ExistenceColumnSpec } from './join-node.js';
|
|
3
|
+
import type { RelationType, ColRef, ScalarType } from '../../common/datatype.js';
|
|
4
4
|
/**
|
|
5
5
|
* An equi-join pair: left attribute = right attribute.
|
|
6
6
|
* Attribute IDs are stable across plan transformations.
|
|
@@ -16,14 +16,20 @@ export interface EquiJoinPair {
|
|
|
16
16
|
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
17
17
|
* attributes are computed from the left/right inputs and the join type.
|
|
18
18
|
*/
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* The scalar type of an existence (`exists … as`) match flag: a clean
|
|
21
|
+
* `{true,false}` boolean, genuinely NOT NULL (the null-extension test the column
|
|
22
|
+
* replaces), and read-only (derived at the combinator).
|
|
23
|
+
*/
|
|
24
|
+
export declare const EXISTENCE_FLAG_TYPE: ScalarType;
|
|
25
|
+
export declare function buildJoinAttributes(leftAttrs: readonly Attribute[], rightAttrs: readonly Attribute[], joinType: JoinType, preserveAttributeIds?: readonly Attribute[], existence?: readonly ExistenceColumnSpec[]): Attribute[];
|
|
20
26
|
/**
|
|
21
27
|
* Build the `RelationType` for a join result.
|
|
22
28
|
*
|
|
23
29
|
* Semi/anti joins return the left type shape. All other join types combine
|
|
24
30
|
* columns from both sides with appropriate nullable marking.
|
|
25
31
|
*/
|
|
26
|
-
export declare function buildJoinRelationType(leftType: RelationType, rightType: RelationType, joinType: JoinType, keys?: ReadonlyArray<ReadonlyArray<ColRef
|
|
32
|
+
export declare function buildJoinRelationType(leftType: RelationType, rightType: RelationType, joinType: JoinType, keys?: ReadonlyArray<ReadonlyArray<ColRef>>, existence?: readonly ExistenceColumnSpec[]): RelationType;
|
|
27
33
|
/**
|
|
28
34
|
* Propagate `monotonicOn` through a join operator.
|
|
29
35
|
*
|
|
@@ -54,7 +60,13 @@ export declare function propagateJoinMonotonicOn(joinType: JoinType, leftPhys: P
|
|
|
54
60
|
* - right outer: mirror of left outer.
|
|
55
61
|
* - full outer: drop both sides' FDs/ECs (conservative).
|
|
56
62
|
* - semi / anti: left's FDs/ECs survive; no right contribution and no equi-pair
|
|
57
|
-
* FDs (right columns are not in the output).
|
|
63
|
+
* FDs (right columns are not in the output). Left rows pass ≤1:1, so kinds
|
|
64
|
+
* are preserved verbatim.
|
|
65
|
+
* - Fan-out kind downgrade (inner/cross/left/right): a side that is NOT
|
|
66
|
+
* preserved (no preserved key lies within it) is fanned out — its surviving
|
|
67
|
+
* FDs, guarded ones included, are downgraded `'unique'` → `'determination'`
|
|
68
|
+
* via `downgradeUniqueFds` so the kind invariant holds before any reader
|
|
69
|
+
* trusts it.
|
|
58
70
|
*/
|
|
59
71
|
export declare function propagateJoinFds(joinType: JoinType, leftPhys: PhysicalProperties | undefined, rightPhys: PhysicalProperties | undefined, equiPairs: ReadonlyArray<{
|
|
60
72
|
left: number;
|
|
@@ -65,6 +77,21 @@ export declare function propagateJoinFds(joinType: JoinType, leftPhys: PhysicalP
|
|
|
65
77
|
constantBindings?: ReadonlyArray<ConstantBinding>;
|
|
66
78
|
domainConstraints?: ReadonlyArray<DomainConstraint>;
|
|
67
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Propagate inclusion dependencies through a join operator. The IND analogue of
|
|
82
|
+
* `propagateJoinFds` — it MUST stay consistent with that function and
|
|
83
|
+
* `analyzeJoinKeyCoverage`.
|
|
84
|
+
*
|
|
85
|
+
* INDs assert per-row existence in another relation, so a NULL-padded side can
|
|
86
|
+
* violate the claim and is dropped conservatively:
|
|
87
|
+
* - inner / cross: union of left INDs and `shiftInds(right, leftColumnCount)`.
|
|
88
|
+
* - left (preserved = left): keep left INDs; drop the right side's INDs (the
|
|
89
|
+
* right columns are NULL-padded for unmatched left rows).
|
|
90
|
+
* - right (preserved = right): keep `shiftInds(right, leftColumnCount)`; drop left.
|
|
91
|
+
* - semi / anti: keep left INDs only (right columns are not in the output).
|
|
92
|
+
* - full: drop both (either side can be NULL-padded).
|
|
93
|
+
*/
|
|
94
|
+
export declare function propagateJoinInds(joinType: JoinType, leftPhys: PhysicalProperties | undefined, rightPhys: PhysicalProperties | undefined, leftColumnCount: number): ReadonlyArray<InclusionDependency> | undefined;
|
|
68
95
|
/**
|
|
69
96
|
* Estimate the number of output rows for a join given the input cardinalities.
|
|
70
97
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"join-utils.d.ts","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnK,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAa,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAgB5F;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAKjC,CAAC;AAEF,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,SAAS,SAAS,EAAE,EAC/B,UAAU,EAAE,SAAS,SAAS,EAAE,EAChC,QAAQ,EAAE,QAAQ,EAClB,oBAAoB,CAAC,EAAE,SAAS,SAAS,EAAE,EAC3C,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,GACxC,SAAS,EAAE,CAqBb;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,YAAY,EACvB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAC3C,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,GACxC,YAAY,CAyCd;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACvC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,SAAS,EAAE,kBAAkB,GAAG,SAAS,EACzC,SAAS,EAAE,aAAa,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GACnE,SAAS,eAAe,EAAE,GAAG,SAAS,CA8BxC;AAsBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,SAAS,EAAE,kBAAkB,GAAG,SAAS,EACzC,SAAS,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,EACzD,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EACxB,aAAa,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GACjD;IACF,GAAG,CAAC,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,gBAAgB,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAClD,iBAAiB,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;CACpD,CAuHA;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAChC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,kBAAkB,GAAG,SAAS,EACxC,SAAS,EAAE,kBAAkB,GAAG,SAAS,EACzC,eAAe,EAAE,MAAM,GACrB,aAAa,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAwBhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,QAAQ,EAAE,QAAQ,GAChB,MAAM,GAAG,SAAS,CAoBpB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BOOLEAN_TYPE } from '../../types/builtin-types.js';
|
|
2
|
+
import { addEquivalence, addFd, closeConstantBindingsOverEcs, mergeConstantBindings, mergeDomainConstraints, mergeEquivClasses, mergeFds, mergeInds, shiftConstantBindings, shiftDomainConstraints, shiftEquivClasses, shiftFds, shiftInds, superkeyToFd, } from '../util/fd-utils.js';
|
|
2
3
|
/**
|
|
3
4
|
* Build the output attributes for a join node.
|
|
4
5
|
*
|
|
@@ -6,7 +7,18 @@ import { addEquivalence, addFd, closeConstantBindingsOverEcs, mergeConstantBindi
|
|
|
6
7
|
* logical JoinNode) the preserved set is returned directly. Otherwise the
|
|
7
8
|
* attributes are computed from the left/right inputs and the join type.
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* The scalar type of an existence (`exists … as`) match flag: a clean
|
|
12
|
+
* `{true,false}` boolean, genuinely NOT NULL (the null-extension test the column
|
|
13
|
+
* replaces), and read-only (derived at the combinator).
|
|
14
|
+
*/
|
|
15
|
+
export const EXISTENCE_FLAG_TYPE = {
|
|
16
|
+
typeClass: 'scalar',
|
|
17
|
+
logicalType: BOOLEAN_TYPE,
|
|
18
|
+
nullable: false,
|
|
19
|
+
isReadOnly: true,
|
|
20
|
+
};
|
|
21
|
+
export function buildJoinAttributes(leftAttrs, rightAttrs, joinType, preserveAttributeIds, existence) {
|
|
10
22
|
if (preserveAttributeIds)
|
|
11
23
|
return preserveAttributeIds.slice();
|
|
12
24
|
if (joinType === 'semi' || joinType === 'anti')
|
|
@@ -20,6 +32,13 @@ export function buildJoinAttributes(leftAttrs, rightAttrs, joinType, preserveAtt
|
|
|
20
32
|
const isNullable = joinType === 'left' || joinType === 'full';
|
|
21
33
|
attributes.push(isNullable ? { ...attr, type: { ...attr.type, nullable: true } } : attr);
|
|
22
34
|
}
|
|
35
|
+
// Existence flags are appended AFTER both sides — boolean NOT NULL, never
|
|
36
|
+
// marked nullable (the clean-boolean point), with their pre-minted stable ids.
|
|
37
|
+
if (existence) {
|
|
38
|
+
for (const spec of existence) {
|
|
39
|
+
attributes.push({ id: spec.attrId, name: spec.name, type: EXISTENCE_FLAG_TYPE });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
23
42
|
return attributes;
|
|
24
43
|
}
|
|
25
44
|
/**
|
|
@@ -28,7 +47,7 @@ export function buildJoinAttributes(leftAttrs, rightAttrs, joinType, preserveAtt
|
|
|
28
47
|
* Semi/anti joins return the left type shape. All other join types combine
|
|
29
48
|
* columns from both sides with appropriate nullable marking.
|
|
30
49
|
*/
|
|
31
|
-
export function buildJoinRelationType(leftType, rightType, joinType, keys) {
|
|
50
|
+
export function buildJoinRelationType(leftType, rightType, joinType, keys, existence) {
|
|
32
51
|
if (joinType === 'semi' || joinType === 'anti') {
|
|
33
52
|
return {
|
|
34
53
|
typeClass: 'relation',
|
|
@@ -39,6 +58,10 @@ export function buildJoinRelationType(leftType, rightType, joinType, keys) {
|
|
|
39
58
|
rowConstraints: leftType.rowConstraints,
|
|
40
59
|
};
|
|
41
60
|
}
|
|
61
|
+
const existenceColumns = (existence ?? []).map(spec => ({
|
|
62
|
+
name: spec.name,
|
|
63
|
+
type: EXISTENCE_FLAG_TYPE,
|
|
64
|
+
}));
|
|
42
65
|
const combinedColumns = [
|
|
43
66
|
...leftType.columns.map(col => {
|
|
44
67
|
const isNullable = joinType === 'right' || joinType === 'full';
|
|
@@ -48,6 +71,8 @@ export function buildJoinRelationType(leftType, rightType, joinType, keys) {
|
|
|
48
71
|
const isNullable = joinType === 'left' || joinType === 'full';
|
|
49
72
|
return isNullable ? { ...col, type: { ...col.type, nullable: true } } : col;
|
|
50
73
|
}),
|
|
74
|
+
// Existence flags appended after both sides; never part of any join key.
|
|
75
|
+
...existenceColumns,
|
|
51
76
|
];
|
|
52
77
|
const isSet = (joinType === 'inner' || joinType === 'cross') &&
|
|
53
78
|
leftType.isSet && rightType.isSet;
|
|
@@ -106,6 +131,23 @@ export function propagateJoinMonotonicOn(joinType, leftPhys, rightPhys, equiPair
|
|
|
106
131
|
}
|
|
107
132
|
return result.length > 0 ? result : undefined;
|
|
108
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Downgrade a fanned-out side's `'unique'` FDs to `'determination'`. A fanning
|
|
136
|
+
* join duplicates that side's rows, destroying determinant row-uniqueness
|
|
137
|
+
* while every value claim survives unchanged. Applies to guarded FDs too: a
|
|
138
|
+
* guarded partial-unique FD crossing a fanning join is no longer row-unique
|
|
139
|
+
* even within its guard's scope (the duplicated rows still satisfy the guard).
|
|
140
|
+
* Preserves object identity for FDs that are already determinations.
|
|
141
|
+
*
|
|
142
|
+
* This downgrade fully replaces the former `dropSideKeyFds`: the value claims
|
|
143
|
+
* survive as determinations (feeding ORDER BY pruning / GROUP BY
|
|
144
|
+
* simplification downstream), and the kind-aware readers
|
|
145
|
+
* (`isUniqueDeterminant`) never read them as uniqueness claims (ticket
|
|
146
|
+
* fd-determination-reader-side-rule).
|
|
147
|
+
*/
|
|
148
|
+
function downgradeUniqueFds(fds) {
|
|
149
|
+
return fds.map(fd => (fd.kind === 'unique' ? { ...fd, kind: 'determination' } : fd));
|
|
150
|
+
}
|
|
109
151
|
/**
|
|
110
152
|
* Propagate functional dependencies and equivalence classes through a join.
|
|
111
153
|
*
|
|
@@ -118,7 +160,13 @@ export function propagateJoinMonotonicOn(joinType, leftPhys, rightPhys, equiPair
|
|
|
118
160
|
* - right outer: mirror of left outer.
|
|
119
161
|
* - full outer: drop both sides' FDs/ECs (conservative).
|
|
120
162
|
* - semi / anti: left's FDs/ECs survive; no right contribution and no equi-pair
|
|
121
|
-
* FDs (right columns are not in the output).
|
|
163
|
+
* FDs (right columns are not in the output). Left rows pass ≤1:1, so kinds
|
|
164
|
+
* are preserved verbatim.
|
|
165
|
+
* - Fan-out kind downgrade (inner/cross/left/right): a side that is NOT
|
|
166
|
+
* preserved (no preserved key lies within it) is fanned out — its surviving
|
|
167
|
+
* FDs, guarded ones included, are downgraded `'unique'` → `'determination'`
|
|
168
|
+
* via `downgradeUniqueFds` so the kind invariant holds before any reader
|
|
169
|
+
* trusts it.
|
|
122
170
|
*/
|
|
123
171
|
export function propagateJoinFds(joinType, leftPhys, rightPhys, equiPairs, leftColumnCount, totalColumnCount, preservedKeys) {
|
|
124
172
|
const leftFds = leftPhys?.fds ?? [];
|
|
@@ -155,12 +203,29 @@ export function propagateJoinFds(joinType, leftPhys, rightPhys, equiPairs, leftC
|
|
|
155
203
|
switch (joinType) {
|
|
156
204
|
case 'inner':
|
|
157
205
|
case 'cross': {
|
|
158
|
-
|
|
206
|
+
// A fanning (non-1:1) join duplicates the rows of a side whose unique key is
|
|
207
|
+
// not preserved (no preserved key lies entirely within that side's columns).
|
|
208
|
+
// Such a side's FDs remain true as value claims but no longer encode
|
|
209
|
+
// uniqueness in the product — downgrade them (guarded FDs included) to
|
|
210
|
+
// 'determination'. The kind-aware readers (`isUniqueDeterminant`) are what
|
|
211
|
+
// keep a downstream projection from re-deriving a spurious key off them
|
|
212
|
+
// (ticket fd-determination-reader-side-rule, replacing `dropSideKeyFds`).
|
|
213
|
+
const leftPreserved = preservedKeys.some(k => k.every(i => i < leftColumnCount));
|
|
214
|
+
const rightPreserved = preservedKeys.some(k => k.every(i => i >= leftColumnCount));
|
|
215
|
+
const keptLeftFds = leftPreserved ? leftFds : downgradeUniqueFds(leftFds);
|
|
216
|
+
const keptRightFds = rightPreserved ? rightFds : downgradeUniqueFds(rightFds);
|
|
217
|
+
let fds = mergeFds(keptLeftFds, shiftFds(keptRightFds, leftColumnCount), opts);
|
|
159
218
|
let equiv = mergeEquivClasses(leftEC, shiftEquivClasses(rightEC, leftColumnCount));
|
|
219
|
+
// An equi-pair `{L}↔{R'}` is a value-equality claim: emit both directions
|
|
220
|
+
// unconditionally as 'determination'. Uniqueness facts live exclusively on
|
|
221
|
+
// the preserved-key FDs layered below (`withKeyFds` mints 'unique'); a
|
|
222
|
+
// determination is never read as a uniqueness claim by the kind-aware
|
|
223
|
+
// readers, so no endpoint gate is needed. The EC merge stays unconditional
|
|
224
|
+
// too — value equality also carries constant propagation.
|
|
160
225
|
for (const p of equiPairs) {
|
|
161
226
|
const rShifted = p.right + leftColumnCount;
|
|
162
|
-
fds = addFd(fds, { determinants: [p.left], dependents: [rShifted] }, opts);
|
|
163
|
-
fds = addFd(fds, { determinants: [rShifted], dependents: [p.left] }, opts);
|
|
227
|
+
fds = addFd(fds, { determinants: [p.left], dependents: [rShifted], kind: 'determination' }, opts);
|
|
228
|
+
fds = addFd(fds, { determinants: [rShifted], dependents: [p.left], kind: 'determination' }, opts);
|
|
164
229
|
equiv = addEquivalence(equiv, p.left, rShifted);
|
|
165
230
|
}
|
|
166
231
|
fds = withKeyFds(fds);
|
|
@@ -173,13 +238,25 @@ export function propagateJoinFds(joinType, leftPhys, rightPhys, equiPairs, leftC
|
|
|
173
238
|
return wrap(fds, equiv, bindings, domains);
|
|
174
239
|
}
|
|
175
240
|
case 'left': {
|
|
241
|
+
// A LEFT join fans out left rows when the equi-predicate does not cover a
|
|
242
|
+
// right-side key (one left row can match several right rows). When left's
|
|
243
|
+
// key is therefore NOT preserved, downgrade its FDs (guarded included) to
|
|
244
|
+
// 'determination' — mirrors the inner/cross arm; the kind-aware readers
|
|
245
|
+
// keep a downstream key-dropping projection from re-deriving the left key.
|
|
246
|
+
const leftPreserved = preservedKeys.some(k => k.every(i => i < leftColumnCount));
|
|
247
|
+
const keptLeftFds = leftPreserved ? leftFds : downgradeUniqueFds(leftFds);
|
|
176
248
|
// Left's bindings survive on left's columns; right's are dropped (the
|
|
177
249
|
// NULL-padding from unmatched left rows breaks any right-side pin).
|
|
178
|
-
const fds = withKeyFds(
|
|
250
|
+
const fds = withKeyFds(keptLeftFds.slice());
|
|
179
251
|
return wrap(fds, leftEC.map(c => c.slice()), leftBindings.map(b => ({ ...b })), leftDomains.slice());
|
|
180
252
|
}
|
|
181
253
|
case 'right': {
|
|
182
|
-
|
|
254
|
+
// Mirror of LEFT: a RIGHT join fans out right rows when the equi-predicate
|
|
255
|
+
// does not cover a left-side key. Downgrade the right side's FDs when no
|
|
256
|
+
// preserved key lies within the right side.
|
|
257
|
+
const rightPreserved = preservedKeys.some(k => k.every(i => i >= leftColumnCount));
|
|
258
|
+
const keptRightFds = rightPreserved ? rightFds : downgradeUniqueFds(rightFds);
|
|
259
|
+
let fds = shiftFds(keptRightFds, leftColumnCount);
|
|
183
260
|
fds = withKeyFds(fds);
|
|
184
261
|
const equiv = shiftEquivClasses(rightEC, leftColumnCount);
|
|
185
262
|
const bindings = shiftConstantBindings(rightBindings, leftColumnCount);
|
|
@@ -197,6 +274,44 @@ export function propagateJoinFds(joinType, leftPhys, rightPhys, equiPairs, leftC
|
|
|
197
274
|
return {};
|
|
198
275
|
}
|
|
199
276
|
}
|
|
277
|
+
/**
|
|
278
|
+
* Propagate inclusion dependencies through a join operator. The IND analogue of
|
|
279
|
+
* `propagateJoinFds` — it MUST stay consistent with that function and
|
|
280
|
+
* `analyzeJoinKeyCoverage`.
|
|
281
|
+
*
|
|
282
|
+
* INDs assert per-row existence in another relation, so a NULL-padded side can
|
|
283
|
+
* violate the claim and is dropped conservatively:
|
|
284
|
+
* - inner / cross: union of left INDs and `shiftInds(right, leftColumnCount)`.
|
|
285
|
+
* - left (preserved = left): keep left INDs; drop the right side's INDs (the
|
|
286
|
+
* right columns are NULL-padded for unmatched left rows).
|
|
287
|
+
* - right (preserved = right): keep `shiftInds(right, leftColumnCount)`; drop left.
|
|
288
|
+
* - semi / anti: keep left INDs only (right columns are not in the output).
|
|
289
|
+
* - full: drop both (either side can be NULL-padded).
|
|
290
|
+
*/
|
|
291
|
+
export function propagateJoinInds(joinType, leftPhys, rightPhys, leftColumnCount) {
|
|
292
|
+
const leftInds = leftPhys?.inds ?? [];
|
|
293
|
+
const rightInds = rightPhys?.inds ?? [];
|
|
294
|
+
let result;
|
|
295
|
+
switch (joinType) {
|
|
296
|
+
case 'inner':
|
|
297
|
+
case 'cross':
|
|
298
|
+
result = mergeInds(leftInds, shiftInds(rightInds, leftColumnCount));
|
|
299
|
+
break;
|
|
300
|
+
case 'left':
|
|
301
|
+
case 'semi':
|
|
302
|
+
case 'anti':
|
|
303
|
+
result = leftInds.slice();
|
|
304
|
+
break;
|
|
305
|
+
case 'right':
|
|
306
|
+
result = shiftInds(rightInds, leftColumnCount);
|
|
307
|
+
break;
|
|
308
|
+
case 'full':
|
|
309
|
+
default:
|
|
310
|
+
result = [];
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
return result.length > 0 ? result : undefined;
|
|
314
|
+
}
|
|
200
315
|
/**
|
|
201
316
|
* Estimate the number of output rows for a join given the input cardinalities.
|
|
202
317
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-utils.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"join-utils.js","sourceRoot":"","sources":["../../../../src/planner/nodes/join-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { PlanNode, type RelationalPlanNode, type UnaryRelationalNode, type Attribute, type PhysicalProperties } from './plan-node.js';
|
|
2
|
+
import type { RelationType, ScalarType } from '../../common/datatype.js';
|
|
3
|
+
import { PlanNodeType } from './plan-node-type.js';
|
|
4
|
+
import type { Scope } from '../scopes/scope.js';
|
|
5
|
+
import type { AccessForm, MappingAdvertisement } from '../../vtab/mapping-advertisement.js';
|
|
6
|
+
/**
|
|
7
|
+
* One side of the logical-PK join-back (D4): the marker source's output
|
|
8
|
+
* attribute paired with the auxiliary scan's aligned key attribute. The
|
|
9
|
+
* `columnIndex` is the position of the attribute in its own relation's output
|
|
10
|
+
* (for building a {@link ColumnReferenceNode}); `type` is its scalar type.
|
|
11
|
+
*/
|
|
12
|
+
export interface AuxJoinPair {
|
|
13
|
+
/** Marker-source (logical view body) PK attribute. */
|
|
14
|
+
readonly logicalPk: {
|
|
15
|
+
readonly attrId: number;
|
|
16
|
+
readonly columnIndex: number;
|
|
17
|
+
readonly type: ScalarType;
|
|
18
|
+
};
|
|
19
|
+
/** Auxiliary-scan key attribute aligned positionally to {@link logicalPk}. */
|
|
20
|
+
readonly auxKey: {
|
|
21
|
+
readonly attrId: number;
|
|
22
|
+
readonly columnIndex: number;
|
|
23
|
+
readonly type: ScalarType;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* An advertised access column the auxiliary serves: its logical column name, the
|
|
28
|
+
* marker-source (logical) output attribute the predicate references, and the
|
|
29
|
+
* auxiliary-scan attribute the predicate is rewritten to point at (D3 — the
|
|
30
|
+
* auxiliary's own backing basis column, so the auxiliary's module sees the
|
|
31
|
+
* predicate over its own column).
|
|
32
|
+
*/
|
|
33
|
+
export interface AuxAccessColumn {
|
|
34
|
+
readonly logicalColumn: string;
|
|
35
|
+
readonly logicalAttrId: number;
|
|
36
|
+
readonly auxRef: {
|
|
37
|
+
readonly attrId: number;
|
|
38
|
+
readonly columnIndex: number;
|
|
39
|
+
readonly type: ScalarType;
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A single routable auxiliary-access structure, fully resolved at build time
|
|
44
|
+
* (where the {@link PlanningContext} is in hand) so the rewrite rule has every
|
|
45
|
+
* attribute id / column index it needs without re-resolving the catalog.
|
|
46
|
+
*/
|
|
47
|
+
export interface RoutableAuxiliary {
|
|
48
|
+
readonly advertisement: MappingAdvertisement;
|
|
49
|
+
/**
|
|
50
|
+
* A scan over the auxiliary's single backing member relation (a
|
|
51
|
+
* `RetrieveNode` from `buildTableReference`, with its own fresh attribute
|
|
52
|
+
* ids). The rewrite rule pushes the column-rewritten predicate onto this
|
|
53
|
+
* scan and semi-joins it back to the logical body on the logical key.
|
|
54
|
+
*/
|
|
55
|
+
readonly auxScan: RelationalPlanNode;
|
|
56
|
+
/** Logical-PK ↔ auxiliary-key join pairs, in logical-PK order (D4). */
|
|
57
|
+
readonly joinPairs: readonly AuxJoinPair[];
|
|
58
|
+
/** Every advertised access column locatable on both the logical body and the auxiliary scan. */
|
|
59
|
+
readonly accessColumns: readonly AuxAccessColumn[];
|
|
60
|
+
/** The advertised served entries (columns + forms) — the form-matcher's input. */
|
|
61
|
+
readonly served: readonly {
|
|
62
|
+
readonly columns: readonly string[];
|
|
63
|
+
readonly forms: readonly AccessForm[];
|
|
64
|
+
}[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A unary pass-through marker wired around an inlined **lens** view body that
|
|
68
|
+
* carries the table's routable auxiliary-access advertisements (nd-tree spatial,
|
|
69
|
+
* vector knn, full-text, …) to the read-path-selection optimizer rule
|
|
70
|
+
* (`rule-lens-auxiliary-access`). See `docs/lens.md` § "The module mapping
|
|
71
|
+
* advertisement" and the design ticket `lens-access-shape-path-selection`.
|
|
72
|
+
*
|
|
73
|
+
* Modeled exactly on {@link AssertedKeysNode}: column shape and attribute IDs are
|
|
74
|
+
* the source's (pass-through `getType` / `getAttributes`), `computePhysical`
|
|
75
|
+
* passes every child physical property through unchanged, and the emitter
|
|
76
|
+
* (`runtime/emit/lens-auxiliary-access.ts`) emits the source directly — so when
|
|
77
|
+
* no predicate routes (the degrade case, D5) the node vanishes at runtime with
|
|
78
|
+
* zero cost, exactly like `emitAlias` / `emitAssertedKeys`.
|
|
79
|
+
*
|
|
80
|
+
* The build site (`planner/building/lens-auxiliary-access.ts`, called from
|
|
81
|
+
* `planner/building/select.ts`) only inlines the node when ≥1 auxiliary is
|
|
82
|
+
* routable; the optimizer rule consumes it (replacing it with an auxiliary-seek
|
|
83
|
+
* ⋈ logical-key semi-join) when the outer query's `WHERE` matches an advertised
|
|
84
|
+
* form, and otherwise leaves it as a transparent pass-through.
|
|
85
|
+
*/
|
|
86
|
+
export declare class LensAuxiliaryAccessNode extends PlanNode implements UnaryRelationalNode {
|
|
87
|
+
readonly source: RelationalPlanNode;
|
|
88
|
+
/** The routable auxiliaries, resolved at build time. Non-empty by construction. */
|
|
89
|
+
readonly routables: readonly RoutableAuxiliary[];
|
|
90
|
+
readonly nodeType = PlanNodeType.LensAuxiliaryAccess;
|
|
91
|
+
constructor(scope: Scope, source: RelationalPlanNode,
|
|
92
|
+
/** The routable auxiliaries, resolved at build time. Non-empty by construction. */
|
|
93
|
+
routables: readonly RoutableAuxiliary[]);
|
|
94
|
+
getType(): RelationType;
|
|
95
|
+
getAttributes(): readonly Attribute[];
|
|
96
|
+
getChildren(): readonly [RelationalPlanNode];
|
|
97
|
+
getRelations(): readonly [RelationalPlanNode];
|
|
98
|
+
get estimatedRows(): number | undefined;
|
|
99
|
+
computePhysical(childrenPhysical: PhysicalProperties[]): Partial<PhysicalProperties>;
|
|
100
|
+
withChildren(newChildren: readonly PlanNode[]): PlanNode;
|
|
101
|
+
toString(): string;
|
|
102
|
+
getLogicalAttributes(): Record<string, unknown>;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=lens-auxiliary-access-node.d.ts.map
|