@quereus/quereus 3.3.0 → 4.1.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 +204 -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 +716 -27
- 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 +13 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +5 -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 +20 -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 +17 -16
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { PlanNodeType } from '../nodes/plan-node-type.js';
|
|
2
2
|
import { BinaryOpNode, UnaryOpNode, LiteralNode, BetweenNode } from '../nodes/scalar.js';
|
|
3
3
|
import { InNode } from '../nodes/subquery.js';
|
|
4
|
+
import { resolveComparisonCollation, resolveInCollation } from './comparison-collation.js';
|
|
4
5
|
/**
|
|
5
6
|
* Normalize a predicate for push-down and constraint extraction.
|
|
6
7
|
*
|
|
@@ -176,9 +177,13 @@ function flipComparison(op) {
|
|
|
176
177
|
// Attempt to collapse OR of equalities into an IN list when:
|
|
177
178
|
// - All disjuncts are of the form (col = literal)
|
|
178
179
|
// - The same column is used
|
|
180
|
+
// - Every disjunct's effective comparison collation equals the collation the
|
|
181
|
+
// rewritten IN would compare under (the lattice merge of the column with
|
|
182
|
+
// every collected value)
|
|
179
183
|
// - Literal list is small (<= 32) to avoid large INs
|
|
180
|
-
function tryCollapseOrToIn(
|
|
184
|
+
function tryCollapseOrToIn(_scope, disjuncts) {
|
|
181
185
|
const values = [];
|
|
186
|
+
const disjunctCollations = [];
|
|
182
187
|
let column = null;
|
|
183
188
|
for (const d of disjuncts) {
|
|
184
189
|
if (d.nodeType !== PlanNodeType.BinaryOp)
|
|
@@ -200,6 +205,16 @@ function tryCollapseOrToIn(scope, disjuncts) {
|
|
|
200
205
|
else {
|
|
201
206
|
return null;
|
|
202
207
|
}
|
|
208
|
+
// Per-disjunct effective collation under the provenance lattice
|
|
209
|
+
// (symmetric, so the col/lit spelling order is immaterial). Constant
|
|
210
|
+
// folding keeps `'bob' COLLATE NOCASE` as a literal whose *type*
|
|
211
|
+
// carries rank-3 NOCASE, so the shape checks above never see the
|
|
212
|
+
// wrapper but the resolution still does. A conflict cannot normally
|
|
213
|
+
// reach here (plan-time validation rejected it); bail conservatively.
|
|
214
|
+
const disjunctResolution = resolveComparisonCollation(b.left.getType(), b.right.getType());
|
|
215
|
+
if (disjunctResolution.kind !== 'resolved')
|
|
216
|
+
return null;
|
|
217
|
+
disjunctCollations.push(disjunctResolution.name);
|
|
203
218
|
if (!column) {
|
|
204
219
|
column = col;
|
|
205
220
|
}
|
|
@@ -212,6 +227,20 @@ function tryCollapseOrToIn(scope, disjuncts) {
|
|
|
212
227
|
}
|
|
213
228
|
if (!column || values.length === 0)
|
|
214
229
|
return null;
|
|
230
|
+
// Collation gate (ticket `or-equality-collapse-collation-blind`): the
|
|
231
|
+
// rewritten IN compares every value under ONE lattice-merged collation
|
|
232
|
+
// (`emitIn`), while each written disjunct compares under its own effective
|
|
233
|
+
// collation. Collapse only when every disjunct agrees with the merged IN
|
|
234
|
+
// collation; both directions are unsound otherwise (a NOCASE disjunct
|
|
235
|
+
// collapsed into a BINARY IN under-matches, a BINARY disjunct into a
|
|
236
|
+
// NOCASE IN over-matches). Declining keeps the OR as-is — a completeness
|
|
237
|
+
// loss only, like the >32-values bail. Gating BEFORE construction also
|
|
238
|
+
// guarantees the InNode below validates cleanly.
|
|
239
|
+
const inResolution = resolveInCollation(column.getType(), values.map(v => v.getType()));
|
|
240
|
+
if (inResolution.kind !== 'resolved')
|
|
241
|
+
return null;
|
|
242
|
+
if (disjunctCollations.some(name => name !== inResolution.name))
|
|
243
|
+
return null;
|
|
215
244
|
// Build an InNode with constant values
|
|
216
245
|
const ast = {
|
|
217
246
|
type: 'in',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate-normalizer.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-normalizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"predicate-normalizer.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,29 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import type * as AST from '../../parser/ast.js';
|
|
12
12
|
import type { SqlValue } from '../../common/types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Resolves an AST column/identifier expression to a base-table column index, or
|
|
15
|
+
* `undefined` when it is not a (recognized) column of the frame. The default
|
|
16
|
+
* realization is bare-name resolution — `columnIndexFromExpr` bound to a column
|
|
17
|
+
* index map, ignoring any table/alias qualifier. The coverage prover injects a
|
|
18
|
+
* qualifier-aware variant for join bodies, so `alias.col` resolves only against
|
|
19
|
+
* the source `alias` actually denotes (see `coverage-prover.ts`).
|
|
20
|
+
*/
|
|
21
|
+
export type ColumnIndexResolver = (expr: AST.Expression) => number | undefined;
|
|
13
22
|
/**
|
|
14
23
|
* Return the column index for an `AST.ColumnExpr` or unqualified
|
|
15
24
|
* `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
|
|
16
|
-
* otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
|
|
25
|
+
* otherwise. Schema-qualified identifiers (`other.foo`) are rejected. The
|
|
26
|
+
* table/alias qualifier on a `ColumnExpr` (`alias.col`) is **ignored** — bare
|
|
27
|
+
* name resolution only; callers needing qualifier-awareness compose a
|
|
28
|
+
* {@link ColumnIndexResolver}.
|
|
29
|
+
*
|
|
30
|
+
* The qualifier-blindness is load-bearing for CHECK extraction: `new.<col>`
|
|
31
|
+
* row-image references resolve to the bare column, which is deliberate — NEW
|
|
32
|
+
* is the stored row image, so NEW-qualified references are same-row facts.
|
|
33
|
+
* Self-table qualifiers (`t.col` on the owning table) resolve the same way.
|
|
34
|
+
* `old.<col>` references are NOT same-row; check-extraction screens those out
|
|
35
|
+
* wholesale (`containsOldRowImageRef`) before this resolver ever sees them.
|
|
17
36
|
*/
|
|
18
37
|
export declare function columnIndexFromExpr(expr: AST.Expression, columnIndexMap: ReadonlyMap<string, number>): number | undefined;
|
|
19
38
|
/**
|
|
@@ -41,6 +60,22 @@ export declare function flipComparison(op: string): string;
|
|
|
41
60
|
* `partial-unique-extraction.ts` (top-level OR guard recognition).
|
|
42
61
|
*/
|
|
43
62
|
export declare function flattenDisjunction(expr: AST.Expression): AST.Expression[];
|
|
63
|
+
/**
|
|
64
|
+
* Depth-first iteration over every AST node in `expr`'s subtree. Children are
|
|
65
|
+
* discovered reflectively (any object/array property carrying a `type` field)
|
|
66
|
+
* rather than via a typed visitor table, so soundness-sensitive walkers (the
|
|
67
|
+
* collation gate, the non-determinism screen) cannot silently miss node kinds
|
|
68
|
+
* a visitor enumeration forgot.
|
|
69
|
+
*/
|
|
70
|
+
export declare function walkAstNodes(expr: AST.Expression): IterableIterator<AST.AstNode>;
|
|
71
|
+
/**
|
|
72
|
+
* Collect the collation name of every COLLATE node anywhere in `expr`'s
|
|
73
|
+
* subtree, as written (uninterpreted — no normalization). Empty array when the
|
|
74
|
+
* subtree contains none. Used by the schema-level value-discrimination gate
|
|
75
|
+
* (`comparison-collation.ts`) to detect non-BINARY wrappers inside compound
|
|
76
|
+
* comparison operands.
|
|
77
|
+
*/
|
|
78
|
+
export declare function collectCollateNames(expr: AST.Expression): string[];
|
|
44
79
|
/**
|
|
45
80
|
* Collect the set of column indices referenced by `expr`. Only column /
|
|
46
81
|
* identifier nodes naming columns in `columnIndexMap` count. Returns an empty
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate-shape.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"predicate-shape.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CAClC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,MAAM,GAAG,SAAS,CAWpB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,GAAG,SAAS,CAMvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,EAAE,CAczE;AAED;;;;;;GAMG;AACH,wBAAiB,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAmBjF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,EAAE,CAQlE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,GAAG,CAAC,MAAM,CAAC,CASb"}
|
|
@@ -11,7 +11,17 @@
|
|
|
11
11
|
/**
|
|
12
12
|
* Return the column index for an `AST.ColumnExpr` or unqualified
|
|
13
13
|
* `AST.IdentifierExpr` that names a column in `columnIndexMap`; undefined
|
|
14
|
-
* otherwise. Schema-qualified identifiers (`other.foo`) are rejected.
|
|
14
|
+
* otherwise. Schema-qualified identifiers (`other.foo`) are rejected. The
|
|
15
|
+
* table/alias qualifier on a `ColumnExpr` (`alias.col`) is **ignored** — bare
|
|
16
|
+
* name resolution only; callers needing qualifier-awareness compose a
|
|
17
|
+
* {@link ColumnIndexResolver}.
|
|
18
|
+
*
|
|
19
|
+
* The qualifier-blindness is load-bearing for CHECK extraction: `new.<col>`
|
|
20
|
+
* row-image references resolve to the bare column, which is deliberate — NEW
|
|
21
|
+
* is the stored row image, so NEW-qualified references are same-row facts.
|
|
22
|
+
* Self-table qualifiers (`t.col` on the owning table) resolve the same way.
|
|
23
|
+
* `old.<col>` references are NOT same-row; check-extraction screens those out
|
|
24
|
+
* wholesale (`containsOldRowImageRef`) before this resolver ever sees them.
|
|
15
25
|
*/
|
|
16
26
|
export function columnIndexFromExpr(expr, columnIndexMap) {
|
|
17
27
|
if (expr.type === 'column') {
|
|
@@ -82,22 +92,17 @@ export function flattenDisjunction(expr) {
|
|
|
82
92
|
return out;
|
|
83
93
|
}
|
|
84
94
|
/**
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
95
|
+
* Depth-first iteration over every AST node in `expr`'s subtree. Children are
|
|
96
|
+
* discovered reflectively (any object/array property carrying a `type` field)
|
|
97
|
+
* rather than via a typed visitor table, so soundness-sensitive walkers (the
|
|
98
|
+
* collation gate, the non-determinism screen) cannot silently miss node kinds
|
|
99
|
+
* a visitor enumeration forgot.
|
|
90
100
|
*/
|
|
91
|
-
export function
|
|
92
|
-
const out = new Set();
|
|
101
|
+
export function* walkAstNodes(expr) {
|
|
93
102
|
const stack = [expr];
|
|
94
103
|
while (stack.length > 0) {
|
|
95
104
|
const node = stack.pop();
|
|
96
|
-
|
|
97
|
-
? columnIndexFromExpr(node, columnIndexMap)
|
|
98
|
-
: undefined;
|
|
99
|
-
if (idx !== undefined)
|
|
100
|
-
out.add(idx);
|
|
105
|
+
yield node;
|
|
101
106
|
for (const key of Object.keys(node)) {
|
|
102
107
|
const v = node[key];
|
|
103
108
|
if (!v)
|
|
@@ -114,6 +119,39 @@ export function collectColumnNames(expr, columnIndexMap) {
|
|
|
114
119
|
}
|
|
115
120
|
}
|
|
116
121
|
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Collect the collation name of every COLLATE node anywhere in `expr`'s
|
|
125
|
+
* subtree, as written (uninterpreted — no normalization). Empty array when the
|
|
126
|
+
* subtree contains none. Used by the schema-level value-discrimination gate
|
|
127
|
+
* (`comparison-collation.ts`) to detect non-BINARY wrappers inside compound
|
|
128
|
+
* comparison operands.
|
|
129
|
+
*/
|
|
130
|
+
export function collectCollateNames(expr) {
|
|
131
|
+
const out = [];
|
|
132
|
+
for (const node of walkAstNodes(expr)) {
|
|
133
|
+
if (node.type === 'collate') {
|
|
134
|
+
out.push(node.collation);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return out;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Collect the set of column indices referenced by `expr`. Only column /
|
|
141
|
+
* identifier nodes naming columns in `columnIndexMap` count. Returns an empty
|
|
142
|
+
* set when the expression references zero recognized columns; the caller can
|
|
143
|
+
* distinguish "no columns" (constant expression) from "exactly one column"
|
|
144
|
+
* by inspecting the size.
|
|
145
|
+
*/
|
|
146
|
+
export function collectColumnNames(expr, columnIndexMap) {
|
|
147
|
+
const out = new Set();
|
|
148
|
+
for (const node of walkAstNodes(expr)) {
|
|
149
|
+
const idx = node.type === 'column' || node.type === 'identifier'
|
|
150
|
+
? columnIndexFromExpr(node, columnIndexMap)
|
|
151
|
+
: undefined;
|
|
152
|
+
if (idx !== undefined)
|
|
153
|
+
out.add(idx);
|
|
154
|
+
}
|
|
117
155
|
return out;
|
|
118
156
|
}
|
|
119
157
|
//# sourceMappingURL=predicate-shape.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"predicate-shape.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"predicate-shape.js","sourceRoot":"","sources":["../../../../src/planner/analysis/predicate-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,mBAAmB,CAClC,IAAoB,EACpB,cAA2C;IAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAsB,CAAC;QACnC,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,IAA0B,CAAC;QACvC,IAAI,GAAG,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACjC,OAAO,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAuB,CAAC;IACpC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;IACpB,IAAI,CAAC,YAAY,OAAO;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,CAAC,CAAC;AACV,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACxC,QAAQ,EAAE,EAAE,CAAC;QACZ,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;QACvB,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAoB;IACtD,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAqB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACzB,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAK,GAAsB,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACxE,MAAM,CAAC,GAAG,GAAqB,CAAC;YAChC,wEAAwE;YACxE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5B,SAAS;QACV,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,SAAS,CAAC,CAAC,YAAY,CAAC,IAAoB;IACjD,MAAM,KAAK,GAAkB,CAAC,IAAmB,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QAC1B,MAAM,IAAI,CAAC;QACX,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,GAAI,IAA2C,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;oBACtB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;wBACxD,KAAK,CAAC,IAAI,CAAC,IAAmB,CAAC,CAAC;oBACjC,CAAC;gBACF,CAAC;YACF,CAAC;iBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAK,CAAY,EAAE,CAAC;gBAC7D,KAAK,CAAC,IAAI,CAAC,CAAgB,CAAC,CAAC;YAC9B,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAoB;IACvD,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAE,IAAwB,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CACjC,IAAoB,EACpB,cAA2C;IAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY;YAC/D,CAAC,CAAC,mBAAmB,CAAC,IAAsB,EAAE,cAAc,CAAC;YAC7D,CAAC,CAAC,SAAS,CAAC;QACb,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query-rewrite matcher — the read-side dual of the coverage prover. It
|
|
3
|
+
* recognizes when an *arbitrary* scan-projection-filter query fragment (one that
|
|
4
|
+
* never names a materialized view) is **answered from** a covering MV, so the
|
|
5
|
+
* optimizer can scan the MV's backing table with a bounded residual instead of
|
|
6
|
+
* recomputing the body against the base tables.
|
|
7
|
+
*
|
|
8
|
+
* Distinct from `coverage-prover.ts` (which proves a *base-table UNIQUE
|
|
9
|
+
* constraint* is covered, on the write/enforcement path) but sharing its
|
|
10
|
+
* entailment vocabulary: `recognizeConjunctiveClauses` / `guardClausesEntail`
|
|
11
|
+
* (`partial-unique-extraction.ts`). The question answered here is **output-relation
|
|
12
|
+
* subsumption**: does the MV's stored output relation contain a superset (re-
|
|
13
|
+
* coverable via a bounded residual) of the rows the fragment produces, keyed so
|
|
14
|
+
* the residual recovers exactly the fragment's output?
|
|
15
|
+
*
|
|
16
|
+
* Soundness contract (mirrors the coverage prover exactly): **a false NotMatch
|
|
17
|
+
* only forgoes a speedup; a false Match returns wrong rows.** Every check forgoes
|
|
18
|
+
* the rewrite on doubt. The pre-existing recompute-over-base path is correct by
|
|
19
|
+
* construction; the rule only ever replaces it with a provably row-equivalent
|
|
20
|
+
* plan, so the rewrite is non-regressing.
|
|
21
|
+
*
|
|
22
|
+
* This phase delivers the **projection + filter subsumption** shape only.
|
|
23
|
+
* Aggregate rollup (`mv-query-rewrite-aggregate-rollup`) and join subsumption
|
|
24
|
+
* (`mv-query-rewrite-join-subsumption`) are pure additions to this matcher.
|
|
25
|
+
*
|
|
26
|
+
* ## Where the predicates come from (the pristine-fragment requirement)
|
|
27
|
+
*
|
|
28
|
+
* The fragment's WHERE is read from the live plan's `FilterNode` predicate (its
|
|
29
|
+
* `.expression` AST), and the MV's WHERE from `mv.derivation.selectAst.where`. Reading the
|
|
30
|
+
* fragment WHERE from the plan is only sound while the predicate is still an
|
|
31
|
+
* explicit `FilterNode` above the table access — *before* predicate-pushdown
|
|
32
|
+
* absorbs it into a range-bounded scan (where the matcher could no longer see it
|
|
33
|
+
* and would falsely treat the fragment as unfiltered). The rule that drives this
|
|
34
|
+
* matcher therefore fires in the **Structural rewrite pass, before grow-retrieve /
|
|
35
|
+
* predicate-pushdown**, where the fragment is the pristine
|
|
36
|
+
* `Project(Filter?(Retrieve(TableReference)))`. The shape walk additionally
|
|
37
|
+
* rejects any range-bounded physical scan (`SeqScan`/`IndexScan` with
|
|
38
|
+
* `rangeBoundedOn`, or an `IndexSeek`/`TableSeek`) as `'shape'` — defense in depth
|
|
39
|
+
* should an absorbed predicate ever reach the walk by another path.
|
|
40
|
+
*
|
|
41
|
+
* ## Why `.expression` recognition is sound under constant folding
|
|
42
|
+
*
|
|
43
|
+
* A scalar plan node retains its originating AST in `.expression`. Constant
|
|
44
|
+
* folding (which runs before the Structural pass) may make the *plan* more
|
|
45
|
+
* specific than its `.expression` (e.g. folding `1+1` → `2` while `.expression`
|
|
46
|
+
* still reads `amt > 1+1`). Such a divergence only ever makes a clause
|
|
47
|
+
* *unrecognized* (`literalValue` of a non-literal AST returns undefined), which is
|
|
48
|
+
* a conservative NotMatch — it never fabricates a recognized clause weaker than
|
|
49
|
+
* what the plan computes, so it cannot produce a false Match.
|
|
50
|
+
*/
|
|
51
|
+
import type { RelationalPlanNode, ScalarPlanNode, GuardClause, Attribute } from '../nodes/plan-node.js';
|
|
52
|
+
import { ProjectNode } from '../nodes/project-node.js';
|
|
53
|
+
import { TableReferenceNode } from '../nodes/reference.js';
|
|
54
|
+
import { AggregateNode } from '../nodes/aggregate-node.js';
|
|
55
|
+
import { JoinNode } from '../nodes/join-node.js';
|
|
56
|
+
import type { MaintainedTableSchema } from '../../schema/derivation.js';
|
|
57
|
+
import type { TableSchema } from '../../schema/table.js';
|
|
58
|
+
export type RewriteFailureReason = 'no-candidate' | 'shape' | 'source-mismatch' | 'predicate-not-entailed' | 'missing-column' | 'aggregate-shape' | 'group-key-mismatch' | 'group-key-pinned' | 'aggregate-not-decomposable' | 'cost-declined';
|
|
59
|
+
export interface RewriteMatch {
|
|
60
|
+
readonly mv: MaintainedTableSchema;
|
|
61
|
+
readonly backing: TableSchema;
|
|
62
|
+
/**
|
|
63
|
+
* The recognized clauses of {@link residualConjuncts} — the extra predicate the
|
|
64
|
+
* fragment imposes beyond the MV's WHERE, in **base-table column-index** space.
|
|
65
|
+
* Empty ⇒ no residual filter. Exposed for diagnostics / unit tests; the rule
|
|
66
|
+
* builds the residual `Filter` from {@link residualConjuncts}, not from these.
|
|
67
|
+
*/
|
|
68
|
+
readonly residualClauses: readonly GuardClause[];
|
|
69
|
+
/**
|
|
70
|
+
* The fragment's own WHERE conjunct plan nodes that are NOT already entailed by
|
|
71
|
+
* the MV's WHERE — the residual `Filter` to apply on top of the backing scan.
|
|
72
|
+
* Still reference the fragment's base-table attributes; the rule re-binds their
|
|
73
|
+
* column references onto the backing scan (via {@link backingColOfBaseCol}).
|
|
74
|
+
* Empty ⇒ no residual filter.
|
|
75
|
+
*/
|
|
76
|
+
readonly residualConjuncts: readonly ScalarPlanNode[];
|
|
77
|
+
/**
|
|
78
|
+
* For each fragment output attribute (in output order), the backing-table column
|
|
79
|
+
* index that supplies it (a bare passthrough) — drives the residual `Project`.
|
|
80
|
+
*/
|
|
81
|
+
readonly outputColumnMap: ReadonlyArray<{
|
|
82
|
+
attrId: number;
|
|
83
|
+
backingCol: number;
|
|
84
|
+
}>;
|
|
85
|
+
/**
|
|
86
|
+
* Base-table column index → backing-table column index. The rule uses this to
|
|
87
|
+
* re-bind both the residual conjuncts' and the output projections' column
|
|
88
|
+
* references onto the backing scan.
|
|
89
|
+
*/
|
|
90
|
+
readonly backingColOfBaseCol: ReadonlyMap<number, number>;
|
|
91
|
+
/**
|
|
92
|
+
* Present iff this match answers a **join** fragment from a 1:1-join MV (the
|
|
93
|
+
* {@link matchJoinFragmentToMv} arm). The single-source arms key their residual
|
|
94
|
+
* re-bind on the base column index, which is ambiguous across a join (the same
|
|
95
|
+
* index can name a column of either source). The join arm therefore re-binds the
|
|
96
|
+
* residual by **stable source attribute id** instead: this maps each fragment
|
|
97
|
+
* `T`/`P` source attribute id to the backing column that stores it. Absent ⇒ use
|
|
98
|
+
* {@link backingColOfBaseCol}.
|
|
99
|
+
*/
|
|
100
|
+
readonly backingColOfSourceAttrId?: ReadonlyMap<number, number>;
|
|
101
|
+
/** Present iff this is a {@link matchJoinFragmentToMv} match — carries the cost
|
|
102
|
+
* gate's per-side cardinality inputs. Absent for the single-source arms. */
|
|
103
|
+
readonly joinInfo?: JoinRewriteInfo;
|
|
104
|
+
/**
|
|
105
|
+
* Present iff this match answers an **aggregate** fragment from a grouped MV
|
|
106
|
+
* (the {@link matchAggregateFragmentToMv} arm). Absent ⇒ a plain
|
|
107
|
+
* projection-filter match (the foundation arm).
|
|
108
|
+
*
|
|
109
|
+
* - `exact === true` (query group key == MV group key) — the backing rows *are*
|
|
110
|
+
* the answer: {@link outputColumnMap} + {@link residualConjuncts} fully
|
|
111
|
+
* describe a direct scan, so the rule reuses the foundation's `buildReplacement`
|
|
112
|
+
* (scan → optional residual Filter on group-key columns → residual Project). No
|
|
113
|
+
* re-aggregation. The other `rollup` fields are unused.
|
|
114
|
+
* - `exact === false` (query group key ⊊ MV group key, incl. the empty global key)
|
|
115
|
+
* — the rule re-aggregates the backing rows down to {@link groupKeyBackingCols}
|
|
116
|
+
* using the per-aggregate {@link aggregates} recipes. {@link outputColumnMap}
|
|
117
|
+
* is unused in this case.
|
|
118
|
+
*/
|
|
119
|
+
readonly rollup?: AggregateRollup;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* How to reconstruct one fragment aggregate from the MV's stored backing columns
|
|
123
|
+
* during a rollup re-aggregation. The recombine is sound only for the
|
|
124
|
+
* decomposable-aggregate allowlist (see {@link matchAggregateFragmentToMv}).
|
|
125
|
+
*/
|
|
126
|
+
export interface AggregateRecipe {
|
|
127
|
+
/** The fragment aggregate's output attribute (preserved through the rewrite). */
|
|
128
|
+
readonly outAttr: Attribute;
|
|
129
|
+
/**
|
|
130
|
+
* The recombine operator over the backing column(s):
|
|
131
|
+
* - `'sum'` — re-aggregate `sum(backingCol)` (reconstructs `sum(x)`).
|
|
132
|
+
* - `'count'` — re-aggregate `coalesce(sum(backingCol), 0)` (reconstructs
|
|
133
|
+
* `count(*)` / `count(x)`; the coalesce restores the count-over-zero-rows = 0
|
|
134
|
+
* semantics a bare `sum` would surface as NULL for the empty global group).
|
|
135
|
+
* - `'min'` / `'max'` — re-aggregate `min`/`max` of the partials.
|
|
136
|
+
* - `'avg'` — `sum(sumBackingCol) / sum(countBackingCol)` (Quereus `/` is real
|
|
137
|
+
* division, matching the native `avg`; NULL/0 over zero rows ⇒ NULL).
|
|
138
|
+
*/
|
|
139
|
+
readonly kind: 'sum' | 'count' | 'min' | 'max' | 'avg';
|
|
140
|
+
/** Backing column(s): `[col]` for sum/count/min/max; `[sumCol, countCol]` for avg. */
|
|
141
|
+
readonly backingCols: readonly number[];
|
|
142
|
+
}
|
|
143
|
+
/** The aggregate-rollup descriptor on a {@link RewriteMatch}. */
|
|
144
|
+
export interface AggregateRollup {
|
|
145
|
+
/** True ⇒ exact-key direct scan (no re-aggregation); false ⇒ rollup re-aggregate. */
|
|
146
|
+
readonly exact: boolean;
|
|
147
|
+
/** Query group key in backing-column indices (in fragment group order; `[]` for the global scalar). */
|
|
148
|
+
readonly groupKeyBackingCols: readonly number[];
|
|
149
|
+
/** Fragment group-key output attributes (in order) — preserved by the re-aggregate's group columns. */
|
|
150
|
+
readonly groupOutAttrs: readonly Attribute[];
|
|
151
|
+
/** One recipe per fragment aggregate, in fragment aggregate order. */
|
|
152
|
+
readonly aggregates: readonly AggregateRecipe[];
|
|
153
|
+
}
|
|
154
|
+
/** Per-side cardinality inputs for the join arm's cost gate (see the rule). The
|
|
155
|
+
* driving `T` side is 1:1 with the joined output, so the backing carries one row
|
|
156
|
+
* per governed `T` row; the recompute side additionally pays the `P` scan + join. */
|
|
157
|
+
export interface JoinRewriteInfo {
|
|
158
|
+
readonly drivingTable: TableSchema;
|
|
159
|
+
readonly lookupTable: TableSchema;
|
|
160
|
+
}
|
|
161
|
+
export type RewriteResult = {
|
|
162
|
+
match: RewriteMatch;
|
|
163
|
+
} | {
|
|
164
|
+
match: undefined;
|
|
165
|
+
reason: RewriteFailureReason;
|
|
166
|
+
};
|
|
167
|
+
/** A predicate over the named function is deterministic iff this returns true. */
|
|
168
|
+
export type DeterminismProbe = (fnName: string, argc: number) => boolean;
|
|
169
|
+
/**
|
|
170
|
+
* The recognized scan-project-filter shape of a query fragment: its single base
|
|
171
|
+
* table, the bare-column output mapping, and the WHERE conjuncts. Shared so the
|
|
172
|
+
* rule can analyze the fragment once (to enumerate candidate MVs by base table)
|
|
173
|
+
* and reuse the result across every candidate match.
|
|
174
|
+
*/
|
|
175
|
+
export interface FragmentShape {
|
|
176
|
+
readonly project: ProjectNode;
|
|
177
|
+
readonly tableRef: TableReferenceNode;
|
|
178
|
+
readonly baseTable: TableSchema;
|
|
179
|
+
/** One per fragment output column, in order. `baseCol` is the base-table column
|
|
180
|
+
* the bare-column projection passes through, or `undefined` for a computed
|
|
181
|
+
* output (v1 cannot recover it from the backing — a `missing-column` NotMatch). */
|
|
182
|
+
readonly outputs: ReadonlyArray<{
|
|
183
|
+
attrId: number;
|
|
184
|
+
baseCol: number | undefined;
|
|
185
|
+
}>;
|
|
186
|
+
/** Top-level AND-split conjuncts of the fragment WHERE (empty ⇒ no filter). */
|
|
187
|
+
readonly conjuncts: readonly ScalarPlanNode[];
|
|
188
|
+
}
|
|
189
|
+
export type FragmentResult = {
|
|
190
|
+
ok: true;
|
|
191
|
+
shape: FragmentShape;
|
|
192
|
+
} | {
|
|
193
|
+
ok: false;
|
|
194
|
+
reason: RewriteFailureReason;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Recognize a query fragment rooted at a `ProjectNode` as a single-source
|
|
198
|
+
* scan-project-filter chain. Walks `Project → Filter? → {Retrieve|Alias|full
|
|
199
|
+
* SeqScan/IndexScan}* → TableReference`. Any other node (Sort/Limit/Distinct/
|
|
200
|
+
* Aggregate/Join/SetOp, or a row-reducing seek / range-bounded scan) ⇒ `'shape'`.
|
|
201
|
+
*/
|
|
202
|
+
export declare function analyzeQueryFragment(root: RelationalPlanNode): FragmentResult;
|
|
203
|
+
/**
|
|
204
|
+
* Decide whether `mv` (backed by `backing`) answers the fragment `shape`. See the
|
|
205
|
+
* module doc for the soundness contract. `isDeterministic` probes the function
|
|
206
|
+
* registry for the determinism gate (a registered MV is already deterministic by
|
|
207
|
+
* construction — the create gate rejects non-deterministic bodies — so this is
|
|
208
|
+
* defense in depth).
|
|
209
|
+
*/
|
|
210
|
+
export declare function matchFragmentToMv(shape: FragmentShape, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
211
|
+
/**
|
|
212
|
+
* Convenience entry point (used by the unit tests): analyze `root` as a fragment
|
|
213
|
+
* and, on success, match it against `mv`. Returns the fragment-analysis failure
|
|
214
|
+
* reason when `root` is not a recognizable scan-project-filter chain.
|
|
215
|
+
*/
|
|
216
|
+
export declare function matchMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
217
|
+
/** A fragment aggregate recognized as `f([col])` / `count(*)` over the base table. */
|
|
218
|
+
export interface FragmentAggregate {
|
|
219
|
+
/** Lowercased aggregate function name. */
|
|
220
|
+
readonly funcName: string;
|
|
221
|
+
/** Base-table column index of a bare-column argument; `undefined` ⇒ no argument (`count(*)`). */
|
|
222
|
+
readonly argBaseCol: number | undefined;
|
|
223
|
+
readonly isDistinct: boolean;
|
|
224
|
+
/** The fragment output attribute this aggregate produces. */
|
|
225
|
+
readonly outAttr: Attribute;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* The recognized shape of an aggregate query fragment: its single base table, the
|
|
229
|
+
* bare-column GROUP BY key, the aggregates, and the pre-aggregation WHERE conjuncts.
|
|
230
|
+
*/
|
|
231
|
+
export interface AggregateFragmentShape {
|
|
232
|
+
readonly aggregateNode: AggregateNode;
|
|
233
|
+
readonly tableRef: TableReferenceNode;
|
|
234
|
+
readonly baseTable: TableSchema;
|
|
235
|
+
/** Query GROUP BY key as base-table column indices, in group order (`[]` for the global scalar). */
|
|
236
|
+
readonly groupBaseCols: readonly number[];
|
|
237
|
+
/** Query GROUP BY output attributes, in order. */
|
|
238
|
+
readonly groupOutAttrs: readonly Attribute[];
|
|
239
|
+
readonly aggregates: readonly FragmentAggregate[];
|
|
240
|
+
/** Top-level AND-split conjuncts of the pre-aggregation WHERE (empty ⇒ no filter). */
|
|
241
|
+
readonly conjuncts: readonly ScalarPlanNode[];
|
|
242
|
+
}
|
|
243
|
+
export type AggregateFragmentResult = {
|
|
244
|
+
ok: true;
|
|
245
|
+
shape: AggregateFragmentShape;
|
|
246
|
+
} | {
|
|
247
|
+
ok: false;
|
|
248
|
+
reason: RewriteFailureReason;
|
|
249
|
+
};
|
|
250
|
+
/**
|
|
251
|
+
* Recognize a query fragment rooted at a logical {@link AggregateNode} (the shape
|
|
252
|
+
* the optimizer presents in the Structural pass, before physical aggregate
|
|
253
|
+
* selection) as a single-source aggregate over a scan-filter chain. Requires
|
|
254
|
+
* **bare-column** GROUP BY expressions and aggregate arguments — a computed group
|
|
255
|
+
* key or aggregate argument (`group by d+1`, `sum(amt*2)`, `group_concat(x, ',')`)
|
|
256
|
+
* is unrecoverable from a stored MV column in v1 ⇒ `aggregate-shape`. Mirrors the
|
|
257
|
+
* row-time aggregate eligibility gate, which likewise requires bare group columns.
|
|
258
|
+
*/
|
|
259
|
+
export declare function analyzeAggregateFragment(root: RelationalPlanNode): AggregateFragmentResult;
|
|
260
|
+
/**
|
|
261
|
+
* Decide whether the grouped MV `mv` (backed by `backing`) answers the aggregate
|
|
262
|
+
* fragment `shape`. See the arm doc above for the two sub-cases and the soundness
|
|
263
|
+
* contract; every check forgoes on doubt (a false NotMatch only forgoes a speedup).
|
|
264
|
+
*/
|
|
265
|
+
export declare function matchAggregateFragmentToMv(shape: AggregateFragmentShape, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
266
|
+
/**
|
|
267
|
+
* Convenience entry point (used by the unit tests): analyze `root` as an aggregate
|
|
268
|
+
* fragment and, on success, match it against `mv`.
|
|
269
|
+
*/
|
|
270
|
+
export declare function matchAggregateMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
271
|
+
/** The recognized shape of a join query fragment: its `Project` root, the single
|
|
272
|
+
* binary join, the two base table references, and the post-join WHERE conjuncts. */
|
|
273
|
+
export interface JoinFragmentShape {
|
|
274
|
+
readonly project: ProjectNode;
|
|
275
|
+
readonly joinNode: JoinNode;
|
|
276
|
+
/** The two base-table references under the join (exactly two, distinct tables). */
|
|
277
|
+
readonly tableRefs: readonly [TableReferenceNode, TableReferenceNode];
|
|
278
|
+
/** Top-level AND-split conjuncts of the post-join WHERE (empty ⇒ no filter). */
|
|
279
|
+
readonly conjuncts: readonly ScalarPlanNode[];
|
|
280
|
+
}
|
|
281
|
+
export type JoinFragmentResult = {
|
|
282
|
+
ok: true;
|
|
283
|
+
shape: JoinFragmentShape;
|
|
284
|
+
} | {
|
|
285
|
+
ok: false;
|
|
286
|
+
reason: RewriteFailureReason;
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Recognize a query fragment rooted at a `ProjectNode` whose source descends —
|
|
290
|
+
* through an optional `Filter` (post-join WHERE) and single-source pass-throughs —
|
|
291
|
+
* into a single binary {@link JoinNode} over exactly two distinct base tables. Any
|
|
292
|
+
* other shape (no join, a multi-way join, a non-passthrough node, a row-reducing
|
|
293
|
+
* scan) ⇒ `'shape'`. The fragment is pristine (the rule fires before
|
|
294
|
+
* predicate-pushdown / grow-retrieve), so the join's `ON` condition and the WHERE
|
|
295
|
+
* `Filter` are still explicit.
|
|
296
|
+
*/
|
|
297
|
+
export declare function analyzeJoinQueryFragment(root: RelationalPlanNode): JoinFragmentResult;
|
|
298
|
+
/**
|
|
299
|
+
* Decide whether the 1:1-join MV `mv` (optimized body `mvBodyRoot`, backed by
|
|
300
|
+
* `backing`) answers the join fragment `shape`. See the arm doc above for the
|
|
301
|
+
* soundness contract; every check forgoes on doubt.
|
|
302
|
+
*
|
|
303
|
+
* `mvBodyRoot` is the MV body's optimized relational root (the rule plans it
|
|
304
|
+
* suppressed and caches it). When the rule could not plan it, pass `undefined` ⇒
|
|
305
|
+
* `no-candidate`.
|
|
306
|
+
*/
|
|
307
|
+
export declare function matchJoinFragmentToMv(shape: JoinFragmentShape, mv: MaintainedTableSchema, mvBodyRoot: RelationalPlanNode | undefined, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
308
|
+
/**
|
|
309
|
+
* Convenience entry point (used by the unit tests): analyze `root` as a join
|
|
310
|
+
* fragment and, on success, match it against `mv` (whose optimized body root is
|
|
311
|
+
* `mvBodyRoot`).
|
|
312
|
+
*/
|
|
313
|
+
export declare function matchJoinMaterializedViewRewrite(root: RelationalPlanNode, mv: MaintainedTableSchema, mvBodyRoot: RelationalPlanNode | undefined, backing: TableSchema | undefined, isDeterministic: DeterminismProbe): RewriteResult;
|
|
314
|
+
//# sourceMappingURL=query-rewrite-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-rewrite-matcher.d.ts","sourceRoot":"","sources":["../../../../src/planner/analysis/query-rewrite-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAY,MAAM,uBAAuB,CAAC;AAElH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAIvD,OAAO,EAAE,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMzD,MAAM,MAAM,oBAAoB,GAC7B,cAAc,GACd,OAAO,GACP,iBAAiB,GACjB,wBAAwB,GACxB,gBAAgB,GAChB,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,4BAA4B,GAC5B,eAAe,CAAC;AAEnB,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,SAAS,WAAW,EAAE,CAAC;IACjD;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IACtD;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChF;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D;;;;;;;;OAQG;IACH,QAAQ,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChE;iFAC6E;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IACpC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,iFAAiF;IACjF,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACvD,sFAAsF;IACtF,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC/B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,uGAAuG;IACvG,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,uGAAuG;IACvG,QAAQ,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7C,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;CAChD;AAED;;sFAEsF;AACtF,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CAClC;AAED,MAAM,MAAM,aAAa,GACtB;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,GACvB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAEtD,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AAMzE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC;;wFAEoF;IACpF,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACjF,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,cAAc,GACvB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAE/C;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAmB7E;AA6CD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,aAAa,EACpB,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CA+Ff;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CAIf;AAkBD,sFAAsF;AACtF,MAAM,WAAW,iBAAiB;IACjC,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iGAAiG;IACjG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,oGAAoG;IACpG,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,kDAAkD;IAClD,QAAQ,CAAC,aAAa,EAAE,SAAS,SAAS,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,uBAAuB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,sBAAsB,CAAA;CAAE,GAC3C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAE/C;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,uBAAuB,CAmD1F;AAkBD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACzC,KAAK,EAAE,sBAAsB,EAC7B,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CAyKf;AAED;;;GAGG;AACH,wBAAgB,qCAAqC,CACpD,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,qBAAqB,EACzB,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CAIf;AA4BD;qFACqF;AACrF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACtE,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;CAC9C;AAED,MAAM,MAAM,kBAAkB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GACtC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAE/C;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAgBrF;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,qBAAqB,EACzB,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAC1C,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CA4Ef;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC/C,IAAI,EAAE,kBAAkB,EACxB,EAAE,EAAE,qBAAqB,EACzB,UAAU,EAAE,kBAAkB,GAAG,SAAS,EAC1C,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,eAAe,EAAE,gBAAgB,GAC/B,aAAa,CAIf"}
|