@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
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one scope-aware column-substitution primitive the view-mutation backward
|
|
3
|
+
* path shares (`docs/view-updateability.md` § Selection).
|
|
4
|
+
*
|
|
5
|
+
* Three callers used to each carry a near-parallel copy of "rewrite column
|
|
6
|
+
* references X→Y in an expression / query, scope-aware (shadowing, taint, deep
|
|
7
|
+
* subquery descent)":
|
|
8
|
+
* - `single-source.ts` — the view-column → base-term descent and the
|
|
9
|
+
* correlation-qualifier of a substituted base term (both DEEP / scope-aware),
|
|
10
|
+
* - `multi-source.ts` — view-column → alias-qualified base term,
|
|
11
|
+
* - `lens-enforcement.ts` — logical → basis column rewriting.
|
|
12
|
+
*
|
|
13
|
+
* They share a shadowing/taint model and differ only in the substitution map and
|
|
14
|
+
* the qualification rule. This module owns the structural tree-walker
|
|
15
|
+
* ({@link transformExpr} and the clones built on it), the FROM-source column-name
|
|
16
|
+
* resolution that drives the shadow set ({@link collectFromColumnNames}), and the
|
|
17
|
+
* scope-aware descent ({@link transformScopedExpr} / {@link transformScopedQuery})
|
|
18
|
+
* parameterized by a {@link ScopeContext} value object. Each caller supplies a
|
|
19
|
+
* `ScopeContext` (its substitution closure + taint policy + reject builders); the
|
|
20
|
+
* descent itself — shadow accumulation across nested scopes, the
|
|
21
|
+
* `unsupported-subquery-correlation` taint logic, sibling-leg scoping — is shared.
|
|
22
|
+
*/
|
|
23
|
+
// --- structural expression walker -----------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Structurally clone an expression, substituting column references via
|
|
26
|
+
* `substitute`. A substituted replacement is cloned but NOT re-substituted
|
|
27
|
+
* (the replacement is already in target terms).
|
|
28
|
+
*
|
|
29
|
+
* Subquery operands (`subquery` / `exists` / `in … (select …)`) are descended
|
|
30
|
+
* into via the optional `descend` transformer, so a column reference nested
|
|
31
|
+
* inside a correlated subquery of a user predicate / assigned value is rewritten
|
|
32
|
+
* to its lineage (scope-aware — see {@link transformScopedQuery}). With `descend`
|
|
33
|
+
* omitted the subquery operand is passed through structurally — byte-identical to
|
|
34
|
+
* a plain structural rewrite — which keeps every top-level-only caller (and
|
|
35
|
+
* {@link cloneExpr}'s no-substitution clone) unchanged.
|
|
36
|
+
*/
|
|
37
|
+
export function transformExpr(expr, substitute, descend) {
|
|
38
|
+
switch (expr.type) {
|
|
39
|
+
case 'column': {
|
|
40
|
+
const replacement = substitute(expr);
|
|
41
|
+
if (replacement)
|
|
42
|
+
return cloneExpr(replacement);
|
|
43
|
+
return { ...expr };
|
|
44
|
+
}
|
|
45
|
+
case 'binary':
|
|
46
|
+
return { ...expr, left: transformExpr(expr.left, substitute, descend), right: transformExpr(expr.right, substitute, descend) };
|
|
47
|
+
case 'unary':
|
|
48
|
+
return { ...expr, expr: transformExpr(expr.expr, substitute, descend) };
|
|
49
|
+
case 'function':
|
|
50
|
+
return { ...expr, args: expr.args.map(a => transformExpr(a, substitute, descend)) };
|
|
51
|
+
case 'cast':
|
|
52
|
+
return { ...expr, expr: transformExpr(expr.expr, substitute, descend) };
|
|
53
|
+
case 'collate':
|
|
54
|
+
return { ...expr, expr: transformExpr(expr.expr, substitute, descend) };
|
|
55
|
+
case 'between':
|
|
56
|
+
return {
|
|
57
|
+
...expr,
|
|
58
|
+
expr: transformExpr(expr.expr, substitute, descend),
|
|
59
|
+
lower: transformExpr(expr.lower, substitute, descend),
|
|
60
|
+
upper: transformExpr(expr.upper, substitute, descend),
|
|
61
|
+
};
|
|
62
|
+
case 'case':
|
|
63
|
+
return {
|
|
64
|
+
...expr,
|
|
65
|
+
baseExpr: expr.baseExpr ? transformExpr(expr.baseExpr, substitute, descend) : undefined,
|
|
66
|
+
whenThenClauses: expr.whenThenClauses.map(w => ({
|
|
67
|
+
when: transformExpr(w.when, substitute, descend),
|
|
68
|
+
then: transformExpr(w.then, substitute, descend),
|
|
69
|
+
})),
|
|
70
|
+
elseExpr: expr.elseExpr ? transformExpr(expr.elseExpr, substitute, descend) : undefined,
|
|
71
|
+
};
|
|
72
|
+
case 'in':
|
|
73
|
+
return {
|
|
74
|
+
...expr,
|
|
75
|
+
expr: transformExpr(expr.expr, substitute, descend),
|
|
76
|
+
values: expr.values ? expr.values.map(v => transformExpr(v, substitute, descend)) : undefined,
|
|
77
|
+
subquery: expr.subquery && descend ? descend(expr.subquery) : expr.subquery,
|
|
78
|
+
};
|
|
79
|
+
case 'subquery':
|
|
80
|
+
return { ...expr, query: descend ? descend(expr.query) : expr.query };
|
|
81
|
+
case 'exists':
|
|
82
|
+
return { ...expr, subquery: descend ? descend(expr.subquery) : expr.subquery };
|
|
83
|
+
case 'windowFunction':
|
|
84
|
+
// Window args / partitionBy / orderBy / frame bounds sit in the same scalar
|
|
85
|
+
// scope as sibling projections, so the substitution threads through them.
|
|
86
|
+
return {
|
|
87
|
+
...expr,
|
|
88
|
+
function: { ...expr.function, args: expr.function.args.map(a => transformExpr(a, substitute, descend)) },
|
|
89
|
+
window: expr.window ? transformWindowDefinition(expr.window, substitute, descend) : undefined,
|
|
90
|
+
};
|
|
91
|
+
default:
|
|
92
|
+
// literal / identifier / parameter / functionSource —
|
|
93
|
+
// no nested scalar/relational operand to rewrite.
|
|
94
|
+
return { ...expr };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Rebuild an OVER clause, threading the substitution through partitionBy /
|
|
98
|
+
* orderBy / frame-bound value expressions. */
|
|
99
|
+
function transformWindowDefinition(window, substitute, descend) {
|
|
100
|
+
return {
|
|
101
|
+
...window,
|
|
102
|
+
partitionBy: window.partitionBy?.map(p => transformExpr(p, substitute, descend)),
|
|
103
|
+
orderBy: window.orderBy?.map(ob => ({ ...ob, expr: transformExpr(ob.expr, substitute, descend) })),
|
|
104
|
+
frame: window.frame
|
|
105
|
+
? {
|
|
106
|
+
...window.frame,
|
|
107
|
+
start: transformFrameBound(window.frame.start, substitute, descend),
|
|
108
|
+
end: window.frame.end && transformFrameBound(window.frame.end, substitute, descend),
|
|
109
|
+
}
|
|
110
|
+
: undefined,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** Rebuild a window frame bound; `preceding` / `following` carry a value expression. */
|
|
114
|
+
function transformFrameBound(bound, substitute, descend) {
|
|
115
|
+
return bound.type === 'preceding' || bound.type === 'following'
|
|
116
|
+
? { ...bound, value: transformExpr(bound.value, substitute, descend) }
|
|
117
|
+
: { ...bound };
|
|
118
|
+
}
|
|
119
|
+
/** Deep structural clone of an expression, including any nested subqueries. */
|
|
120
|
+
export function cloneExpr(expr) {
|
|
121
|
+
return transformExpr(expr, () => undefined, cloneQueryExpr);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Substitute every `new.<name>`-qualified column reference in an authored
|
|
125
|
+
* inverse expression (docs/view-updateability.md § Authored inverses) — at any
|
|
126
|
+
* depth, including inside subquery operands (a `new.` ref correlates to the
|
|
127
|
+
* written view row wherever it appears; `new` is a reserved qualifier no FROM
|
|
128
|
+
* source legitimately shadows). The replacement is cloned by `transformExpr`,
|
|
129
|
+
* so `resolve` may return a shared expression.
|
|
130
|
+
*/
|
|
131
|
+
export function substituteNewRefs(expr, resolve) {
|
|
132
|
+
const sub = (col) => col.table?.toLowerCase() === 'new' && !col.schema ? resolve(col.name) : undefined;
|
|
133
|
+
return transformExpr(expr, sub, q => mapQueryExprUniform(q, sub));
|
|
134
|
+
}
|
|
135
|
+
/** Deep structural clone of a relation-producing subquery (no substitution). */
|
|
136
|
+
export function cloneQueryExpr(query) {
|
|
137
|
+
return mapQueryExprUniform(query, () => undefined);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Apply a column substitution uniformly through a subquery's structure — NOT
|
|
141
|
+
* scope-aware. The substitution decides purely on the column's own qualifier
|
|
142
|
+
* (e.g. {@link cloneQueryExpr}'s no-op, or the multi-source SET-value qualifier
|
|
143
|
+
* strip), so the enclosing scope is irrelevant and the same `substitute` is
|
|
144
|
+
* applied at every nesting depth. The `with` clause is cloned without
|
|
145
|
+
* substitution — a CTE body cannot correlate to the enclosing query, so it
|
|
146
|
+
* needs no rewrite, only severed sharing (see {@link cloneWithClause}).
|
|
147
|
+
*/
|
|
148
|
+
export function mapQueryExprUniform(query, substitute) {
|
|
149
|
+
const descend = (q) => mapQueryExprUniform(q, substitute);
|
|
150
|
+
const onExpr = (e) => transformExpr(e, substitute, descend);
|
|
151
|
+
if (query.type === 'select')
|
|
152
|
+
return rebuildSelect(query, onExpr, descend, descend);
|
|
153
|
+
if (query.type === 'values')
|
|
154
|
+
return { ...query, values: query.values.map(row => row.map(onExpr)) };
|
|
155
|
+
// INSERT/UPDATE/DELETE … RETURNING as a subquery — pure structural deep clone
|
|
156
|
+
// (no substitution threading; the view-mutation descent rejects DML subqueries).
|
|
157
|
+
return cloneDmlStmt(query);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Structurally rebuild a `SelectStmt`, applying `onExpr` to every scalar
|
|
161
|
+
* expression in the select's OWN scope (projections, `where`, `groupBy`,
|
|
162
|
+
* `having`, `orderBy`, `limit`, `offset`, and join `ON` conditions), `onNested`
|
|
163
|
+
* to a subquery nested in that scope (a FROM `SubquerySource`), and `onLeg` to a
|
|
164
|
+
* sibling compound / union leg (which correlates to the SAME outer scope as this
|
|
165
|
+
* select, not to this select's FROM). The `with` clause is cloned without
|
|
166
|
+
* substitution — a CTE body cannot correlate to the enclosing query, so it needs
|
|
167
|
+
* no rewrite, only severed sharing (see {@link cloneWithClause}).
|
|
168
|
+
*/
|
|
169
|
+
function rebuildSelect(sel, onExpr, onNested, onLeg) {
|
|
170
|
+
return {
|
|
171
|
+
...sel,
|
|
172
|
+
withClause: cloneWithClause(sel.withClause),
|
|
173
|
+
// A `with inverse` clause is write-through metadata, not a live scalar of the
|
|
174
|
+
// read query — pure-clone it (severs sharing for in-place rewriters) without
|
|
175
|
+
// threading the substitution (its refs are `new.`-qualified written-row reads).
|
|
176
|
+
columns: sel.columns.map(rc => rc.type === 'all'
|
|
177
|
+
? { ...rc }
|
|
178
|
+
: { ...rc, expr: onExpr(rc.expr), inverse: cloneInverseClause(rc.inverse) }),
|
|
179
|
+
from: sel.from?.map(fc => rebuildFrom(fc, onExpr, onNested)),
|
|
180
|
+
where: sel.where ? onExpr(sel.where) : undefined,
|
|
181
|
+
groupBy: sel.groupBy ? sel.groupBy.map(onExpr) : undefined,
|
|
182
|
+
having: sel.having ? onExpr(sel.having) : undefined,
|
|
183
|
+
orderBy: sel.orderBy ? sel.orderBy.map(ob => ({ ...ob, expr: onExpr(ob.expr) })) : undefined,
|
|
184
|
+
limit: sel.limit ? onExpr(sel.limit) : undefined,
|
|
185
|
+
offset: sel.offset ? onExpr(sel.offset) : undefined,
|
|
186
|
+
// A `with defaults` clause is write-through metadata, not a live scalar of the
|
|
187
|
+
// read query — pure-clone it (severs sharing for the in-place rename
|
|
188
|
+
// rewriters that descend `select.defaults`) without threading the substitution,
|
|
189
|
+
// exactly like the sibling `with inverse` clause above.
|
|
190
|
+
defaults: cloneDefaultsClause(sel.defaults),
|
|
191
|
+
compound: sel.compound ? { ...sel.compound, select: onLeg(sel.compound.select) } : undefined,
|
|
192
|
+
union: sel.union ? onLeg(sel.union) : undefined,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
/** Rebuild a FROM clause, threading `onExpr` into join conditions / TVF args and
|
|
196
|
+
* `onNested` into a subquery source. */
|
|
197
|
+
function rebuildFrom(fc, onExpr, onNested) {
|
|
198
|
+
switch (fc.type) {
|
|
199
|
+
case 'table':
|
|
200
|
+
// Clone the nested table identifier too: in-place rewriters over a cloned
|
|
201
|
+
// tree (the schema differ's rename reconcile) mutate `table.name`, and a
|
|
202
|
+
// shared identifier would leak that mutation back into the source AST.
|
|
203
|
+
return { ...fc, table: { ...fc.table } };
|
|
204
|
+
case 'join':
|
|
205
|
+
return {
|
|
206
|
+
...fc,
|
|
207
|
+
left: rebuildFrom(fc.left, onExpr, onNested),
|
|
208
|
+
right: rebuildFrom(fc.right, onExpr, onNested),
|
|
209
|
+
condition: fc.condition ? onExpr(fc.condition) : undefined,
|
|
210
|
+
};
|
|
211
|
+
case 'functionSource':
|
|
212
|
+
return { ...fc, args: fc.args.map(onExpr) };
|
|
213
|
+
case 'subquerySource':
|
|
214
|
+
return { ...fc, subquery: onNested(fc.subquery) };
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
// --- structural deep clones (no substitution) ------------------------------
|
|
218
|
+
// In-place rewriters (the schema differ's rename reconcile, the constraint
|
|
219
|
+
// builder's qualifier strip) run over trees produced by `cloneExpr` /
|
|
220
|
+
// `cloneQueryExpr` and mutate nodes in place — so every subtree the walkers can
|
|
221
|
+
// reach must be rebuilt, never shared with the source AST.
|
|
222
|
+
/**
|
|
223
|
+
* Pure structural clone of a `with` clause. CTE bodies go through
|
|
224
|
+
* {@link cloneQueryExpr}, NOT the substitution descend — a CTE body cannot
|
|
225
|
+
* correlate to the enclosing query, so no rewrite applies; the clone only
|
|
226
|
+
* severs reference sharing.
|
|
227
|
+
*/
|
|
228
|
+
function cloneWithClause(withClause) {
|
|
229
|
+
if (!withClause)
|
|
230
|
+
return undefined;
|
|
231
|
+
return {
|
|
232
|
+
...withClause,
|
|
233
|
+
ctes: withClause.ctes.map(cte => ({
|
|
234
|
+
...cte,
|
|
235
|
+
columns: cte.columns && [...cte.columns],
|
|
236
|
+
query: cloneQueryExpr(cte.query),
|
|
237
|
+
})),
|
|
238
|
+
options: withClause.options && { ...withClause.options },
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/** Structural clone of a RETURNING / projection column list. */
|
|
242
|
+
function cloneResultColumns(columns) {
|
|
243
|
+
return columns?.map(rc => rc.type === 'all'
|
|
244
|
+
? { ...rc }
|
|
245
|
+
: { ...rc, expr: cloneExpr(rc.expr), inverse: cloneInverseClause(rc.inverse) });
|
|
246
|
+
}
|
|
247
|
+
/** Structural clone of a result column's `with inverse` assignment list. */
|
|
248
|
+
function cloneInverseClause(inverse) {
|
|
249
|
+
return inverse?.map(a => ({ ...a, expr: cloneExpr(a.expr) }));
|
|
250
|
+
}
|
|
251
|
+
/** Structural clone of a select's `with defaults` assignment list (mirrors
|
|
252
|
+
* {@link cloneInverseClause}). */
|
|
253
|
+
function cloneDefaultsClause(defaults) {
|
|
254
|
+
return defaults?.map(d => ({ ...d, expr: cloneExpr(d.expr) }));
|
|
255
|
+
}
|
|
256
|
+
/** Structural clone of mutation-context assignments. */
|
|
257
|
+
function cloneContextValues(values) {
|
|
258
|
+
return values?.map(cv => ({ ...cv, value: cloneExpr(cv.value) }));
|
|
259
|
+
}
|
|
260
|
+
/** Structural clone of an ON CONFLICT clause (conflict target, assignments, WHERE). */
|
|
261
|
+
function cloneUpsertClause(clause) {
|
|
262
|
+
return {
|
|
263
|
+
...clause,
|
|
264
|
+
conflictTarget: clause.conflictTarget && [...clause.conflictTarget],
|
|
265
|
+
assignments: clause.assignments?.map(a => ({ ...a, value: cloneExpr(a.value) })),
|
|
266
|
+
where: clause.where && cloneExpr(clause.where),
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Pure structural deep clone of an INSERT/UPDATE/DELETE … RETURNING subquery.
|
|
271
|
+
* No substitution is threaded — the scope-aware view-mutation descent rejects
|
|
272
|
+
* DML subqueries before reaching here ({@link transformScopedQuery}).
|
|
273
|
+
*/
|
|
274
|
+
function cloneDmlStmt(stmt) {
|
|
275
|
+
switch (stmt.type) {
|
|
276
|
+
case 'insert':
|
|
277
|
+
return {
|
|
278
|
+
...stmt,
|
|
279
|
+
withClause: cloneWithClause(stmt.withClause),
|
|
280
|
+
table: { ...stmt.table },
|
|
281
|
+
columns: stmt.columns && [...stmt.columns],
|
|
282
|
+
source: cloneQueryExpr(stmt.source),
|
|
283
|
+
upsertClauses: stmt.upsertClauses?.map(cloneUpsertClause),
|
|
284
|
+
returning: cloneResultColumns(stmt.returning),
|
|
285
|
+
contextValues: cloneContextValues(stmt.contextValues),
|
|
286
|
+
schemaPath: stmt.schemaPath && [...stmt.schemaPath],
|
|
287
|
+
};
|
|
288
|
+
case 'update':
|
|
289
|
+
return {
|
|
290
|
+
...stmt,
|
|
291
|
+
withClause: cloneWithClause(stmt.withClause),
|
|
292
|
+
table: { ...stmt.table },
|
|
293
|
+
assignments: stmt.assignments.map(a => ({ ...a, value: cloneExpr(a.value) })),
|
|
294
|
+
where: stmt.where && cloneExpr(stmt.where),
|
|
295
|
+
returning: cloneResultColumns(stmt.returning),
|
|
296
|
+
contextValues: cloneContextValues(stmt.contextValues),
|
|
297
|
+
schemaPath: stmt.schemaPath && [...stmt.schemaPath],
|
|
298
|
+
};
|
|
299
|
+
case 'delete':
|
|
300
|
+
return {
|
|
301
|
+
...stmt,
|
|
302
|
+
withClause: cloneWithClause(stmt.withClause),
|
|
303
|
+
table: { ...stmt.table },
|
|
304
|
+
where: stmt.where && cloneExpr(stmt.where),
|
|
305
|
+
returning: cloneResultColumns(stmt.returning),
|
|
306
|
+
contextValues: cloneContextValues(stmt.contextValues),
|
|
307
|
+
schemaPath: stmt.schemaPath && [...stmt.schemaPath],
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// --- FROM column-name resolution (shadow-set construction) ----------------
|
|
312
|
+
/**
|
|
313
|
+
* Resolve the lowercased set of column names a subquery's FROM sources introduce
|
|
314
|
+
* into scope, or `null` when any source's columns cannot be resolved statically
|
|
315
|
+
* (a TVF, a `select *` / unnamed-projection subquery source, or an unknown name
|
|
316
|
+
* such as a CTE reference). A `null` marks the scope (and everything nested in
|
|
317
|
+
* it) **tainted**: a descent can no longer prove an unqualified reference is
|
|
318
|
+
* *not* a local column, so the {@link ScopeContext} decides whether to reject or
|
|
319
|
+
* carry the taint forward.
|
|
320
|
+
*/
|
|
321
|
+
export function collectFromColumnNames(ctx, from) {
|
|
322
|
+
const acc = new Set();
|
|
323
|
+
if (!from)
|
|
324
|
+
return acc;
|
|
325
|
+
for (const fc of from) {
|
|
326
|
+
const names = fromSourceColumnNames(ctx, fc);
|
|
327
|
+
if (names === null)
|
|
328
|
+
return null;
|
|
329
|
+
for (const n of names)
|
|
330
|
+
acc.add(n);
|
|
331
|
+
}
|
|
332
|
+
return acc;
|
|
333
|
+
}
|
|
334
|
+
/** Lowercased column names a single FROM source introduces, or `null` if unresolvable. */
|
|
335
|
+
function fromSourceColumnNames(ctx, fc) {
|
|
336
|
+
switch (fc.type) {
|
|
337
|
+
case 'table':
|
|
338
|
+
return tableSourceColumnNames(ctx, fc);
|
|
339
|
+
case 'join': {
|
|
340
|
+
const left = fromSourceColumnNames(ctx, fc.left);
|
|
341
|
+
if (left === null)
|
|
342
|
+
return null;
|
|
343
|
+
const right = fromSourceColumnNames(ctx, fc.right);
|
|
344
|
+
if (right === null)
|
|
345
|
+
return null;
|
|
346
|
+
for (const n of right)
|
|
347
|
+
left.add(n);
|
|
348
|
+
return left;
|
|
349
|
+
}
|
|
350
|
+
case 'subquerySource':
|
|
351
|
+
return fc.columns && fc.columns.length > 0
|
|
352
|
+
? new Set(fc.columns.map(c => c.toLowerCase()))
|
|
353
|
+
: projectionOutputNames(fc.subquery);
|
|
354
|
+
case 'functionSource':
|
|
355
|
+
// A table-valued function's output columns are not statically known here.
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/** Lowercased column names of a base table / view / MV named in a FROM, or `null`.
|
|
360
|
+
* A maintained table (materialized view) resolves through the table branch —
|
|
361
|
+
* its registered columns ARE the authoritative output names. */
|
|
362
|
+
function tableSourceColumnNames(ctx, src) {
|
|
363
|
+
const schemaName = src.table.schema;
|
|
364
|
+
const table = ctx.schemaManager.getTable(schemaName, src.table.name);
|
|
365
|
+
if (table)
|
|
366
|
+
return new Set(table.columns.map(c => c.name.toLowerCase()));
|
|
367
|
+
const view = ctx.schemaManager.getView(schemaName ?? null, src.table.name);
|
|
368
|
+
if (view) {
|
|
369
|
+
return view.columns && view.columns.length > 0
|
|
370
|
+
? new Set(view.columns.map(c => c.toLowerCase()))
|
|
371
|
+
: projectionOutputNames(view.selectAst);
|
|
372
|
+
}
|
|
373
|
+
// A CTE / context-backed source (a sibling CTE, or an injected eager-capture relation
|
|
374
|
+
// keyed under the CTE name) — never schema-qualified, so only an unqualified name can
|
|
375
|
+
// match. Resolve its columns from the planning context's `cteNodes` so the source
|
|
376
|
+
// SHADOWS (a clean local source) rather than tainting the scope. This is what lets a
|
|
377
|
+
// CTE-name DML target's user-predicate self-read (`from t`) over its eager capture
|
|
378
|
+
// resolve `t`'s bare columns as local instead of rejecting them as
|
|
379
|
+
// unprovable-correlation (docs/view-updateability.md § Common Table Expressions). A
|
|
380
|
+
// schema object of the same name was already resolved above, so this only fires for a
|
|
381
|
+
// genuine context-backed name. `buildFrom` resolves such a name the same way (its own
|
|
382
|
+
// `cteNodes` lookup), so the static shadow set matches the plan-time binding.
|
|
383
|
+
if (!schemaName && ctx.cteNodes) {
|
|
384
|
+
const cteNode = ctx.cteNodes.get(src.table.name.toLowerCase());
|
|
385
|
+
if (cteNode)
|
|
386
|
+
return new Set(cteNode.getType().columns.map(c => c.name.toLowerCase()));
|
|
387
|
+
}
|
|
388
|
+
// Unknown name (a not-yet-resolvable source).
|
|
389
|
+
return null;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* The lowercased output column names of a relation-producing subquery, or `null`
|
|
393
|
+
* when they cannot be determined statically (`select *`, an unnamed computed
|
|
394
|
+
* projection, a VALUES / DML body) — a conservative signal to taint the scope.
|
|
395
|
+
*/
|
|
396
|
+
function projectionOutputNames(query) {
|
|
397
|
+
if (query.type !== 'select')
|
|
398
|
+
return null;
|
|
399
|
+
const names = new Set();
|
|
400
|
+
for (const rc of query.columns) {
|
|
401
|
+
if (rc.type === 'all')
|
|
402
|
+
return null;
|
|
403
|
+
const name = rc.alias ?? (rc.expr.type === 'column' ? rc.expr.name : undefined);
|
|
404
|
+
if (name === undefined)
|
|
405
|
+
return null;
|
|
406
|
+
names.add(name.toLowerCase());
|
|
407
|
+
}
|
|
408
|
+
return names;
|
|
409
|
+
}
|
|
410
|
+
const NO_SHADOW = new Set();
|
|
411
|
+
/**
|
|
412
|
+
* Scope-aware substitution over an expression, entered at the outermost scope
|
|
413
|
+
* (no shadowing, untainted). Used to rewrite a substituted *term* whose own
|
|
414
|
+
* correlation refs must be (re-)bound (the single-source base-term qualifier).
|
|
415
|
+
*/
|
|
416
|
+
export function transformScopedExpr(ctx, scope, expr) {
|
|
417
|
+
const substitute = scope.makeSubstitute(NO_SHADOW, false, NO_ALIAS_SHADOW);
|
|
418
|
+
const descend = (q) => transformScopedQuery(ctx, scope, q, NO_SHADOW, false, NO_ALIAS_SHADOW);
|
|
419
|
+
return transformExpr(expr, substitute, descend);
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Scope-aware transform of an inner `QueryExpr`. Rewrites column references
|
|
423
|
+
* correlated to the outer scope per the {@link ScopeContext}, while leaving
|
|
424
|
+
* subquery-local same-named columns untouched.
|
|
425
|
+
*
|
|
426
|
+
* `shadowed` is the set of column names introduced by ENCLOSING subquery scopes;
|
|
427
|
+
* `tainted` is set once an enclosing scope's columns proved unresolvable (so the
|
|
428
|
+
* `ScopeContext`'s substitution can reject an unqualified, ambiguous reference at
|
|
429
|
+
* this depth or below). A `select`'s own FROM column names join the shadow set
|
|
430
|
+
* for its clauses and any subquery nested in them; a sibling compound / union leg
|
|
431
|
+
* keeps the incoming `shadowed` / `tainted` (it correlates to the same outer
|
|
432
|
+
* scope, not to this select's FROM).
|
|
433
|
+
*/
|
|
434
|
+
export function transformScopedQuery(ctx, scope, query, shadowed, tainted, aliasShadowed = NO_ALIAS_SHADOW) {
|
|
435
|
+
if (query.type === 'values') {
|
|
436
|
+
// No FROM — the value rows correlate to the enclosing scope unchanged.
|
|
437
|
+
const substitute = scope.makeSubstitute(shadowed, tainted, aliasShadowed);
|
|
438
|
+
const descend = (q) => transformScopedQuery(ctx, scope, q, shadowed, tainted, aliasShadowed);
|
|
439
|
+
const onExpr = (e) => transformExpr(e, substitute, descend);
|
|
440
|
+
return { ...query, values: query.values.map(row => row.map(onExpr)) };
|
|
441
|
+
}
|
|
442
|
+
if (query.type !== 'select') {
|
|
443
|
+
// An embedded INSERT/UPDATE/DELETE … RETURNING subquery — too rich to analyse
|
|
444
|
+
// for correlation; reject rather than risk a partial rewrite.
|
|
445
|
+
scope.rejectDmlSubquery();
|
|
446
|
+
}
|
|
447
|
+
const sel = query;
|
|
448
|
+
const local = collectFromColumnNames(ctx, sel.from);
|
|
449
|
+
let innerShadow;
|
|
450
|
+
let scopeTainted;
|
|
451
|
+
if (local === null) {
|
|
452
|
+
if (scope.unresolvableScope === 'reject')
|
|
453
|
+
scope.rejectUnresolvableScope();
|
|
454
|
+
// Taint: shadowing cannot be proven, so the enclosing shadow set is kept and
|
|
455
|
+
// the scope (and everything nested in it) is marked tainted.
|
|
456
|
+
innerShadow = shadowed;
|
|
457
|
+
scopeTainted = true;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
// References in THIS select's clauses see this select's FROM in addition to
|
|
461
|
+
// any enclosing scope, so its locals join the shadow set.
|
|
462
|
+
innerShadow = new Set([...shadowed, ...local]);
|
|
463
|
+
scopeTainted = tainted;
|
|
464
|
+
}
|
|
465
|
+
// FROM **aliases** of this select join the alias-shadow set for its clauses and any
|
|
466
|
+
// subquery nested in them — the alias-only analog of `innerShadow`. Always known (a
|
|
467
|
+
// FROM alias is statically resolvable even when its columns are not), so this never
|
|
468
|
+
// taints; a tainted scope still accumulates aliases.
|
|
469
|
+
const innerAliasShadow = new Set([...aliasShadowed, ...collectFromAliases(sel.from)]);
|
|
470
|
+
const substitute = scope.makeSubstitute(innerShadow, scopeTainted, innerAliasShadow);
|
|
471
|
+
// A subquery nested inside this select's clauses / FROM sees this select's FROM,
|
|
472
|
+
// so it inherits `innerShadow` / `scopeTainted` / `innerAliasShadow`.
|
|
473
|
+
const onNested = (q) => transformScopedQuery(ctx, scope, q, innerShadow, scopeTainted, innerAliasShadow);
|
|
474
|
+
// A compound / union leg is a SIBLING select correlating to the SAME outer scope
|
|
475
|
+
// as this one — it does NOT see this select's FROM, so it keeps the incoming
|
|
476
|
+
// `shadowed` / `tainted` / `aliasShadowed`.
|
|
477
|
+
const onLeg = (q) => transformScopedQuery(ctx, scope, q, shadowed, tainted, aliasShadowed);
|
|
478
|
+
const onExpr = (e) => transformExpr(e, substitute, onNested);
|
|
479
|
+
return rebuildSelect(sel, onExpr, onNested, onLeg);
|
|
480
|
+
}
|
|
481
|
+
// --- alias-shadow-aware substitution (cross-source SET-value strip) --------
|
|
482
|
+
/**
|
|
483
|
+
* The lowercased set of FROM aliases a subquery's FROM sources bind into scope.
|
|
484
|
+
* Unlike {@link collectFromColumnNames} this NEVER returns `null` and needs no
|
|
485
|
+
* `PlanningContext`: a FROM alias is always statically known from the FROM clause
|
|
486
|
+
* itself, even when the source's *columns* are unresolvable (a `select *` / TVF /
|
|
487
|
+
* CTE still binds its own alias), so alias shadowing needs no taint signal.
|
|
488
|
+
*
|
|
489
|
+
* table -> alias ?? table.name
|
|
490
|
+
* subquerySource -> alias (always present)
|
|
491
|
+
* functionSource -> alias ?? name.name
|
|
492
|
+
* join -> union(left, right)
|
|
493
|
+
*/
|
|
494
|
+
export function collectFromAliases(from) {
|
|
495
|
+
const acc = new Set();
|
|
496
|
+
if (!from)
|
|
497
|
+
return acc;
|
|
498
|
+
for (const fc of from)
|
|
499
|
+
collectFromSourceAliases(fc, acc);
|
|
500
|
+
return acc;
|
|
501
|
+
}
|
|
502
|
+
/** Accumulate the lowercased alias(es) a single FROM source binds into `acc`. */
|
|
503
|
+
function collectFromSourceAliases(fc, acc) {
|
|
504
|
+
switch (fc.type) {
|
|
505
|
+
case 'table':
|
|
506
|
+
acc.add((fc.alias ?? fc.table.name).toLowerCase());
|
|
507
|
+
return;
|
|
508
|
+
case 'subquerySource':
|
|
509
|
+
acc.add(fc.alias.toLowerCase());
|
|
510
|
+
return;
|
|
511
|
+
case 'functionSource':
|
|
512
|
+
acc.add((fc.alias ?? fc.name.name).toLowerCase());
|
|
513
|
+
return;
|
|
514
|
+
case 'join':
|
|
515
|
+
collectFromSourceAliases(fc.left, acc);
|
|
516
|
+
collectFromSourceAliases(fc.right, acc);
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
const NO_ALIAS_SHADOW = new Set();
|
|
521
|
+
/**
|
|
522
|
+
* Alias-shadow-aware structural substitution over an expression, entered at the
|
|
523
|
+
* outermost scope (no inner FROM aliases shadow yet). `substitute` receives each
|
|
524
|
+
* column AND the set of FROM aliases shadowing at the column's depth, so a
|
|
525
|
+
* qualifier shadowed by an inner value-subquery FROM alias can be left local
|
|
526
|
+
* (per innermost-scope SQL rules) instead of routed by the cross-source strip.
|
|
527
|
+
*
|
|
528
|
+
* Mirrors {@link transformScopedQuery}'s scope rules — a select's own FROM
|
|
529
|
+
* aliases join the shadow set for its clauses and any subquery nested in them; a
|
|
530
|
+
* compound / union leg keeps the incoming set (it correlates to the same outer
|
|
531
|
+
* scope); VALUES has no FROM — but threads ONLY an alias set: no column-name
|
|
532
|
+
* shadow set, no taint, no reject. An embedded INSERT/UPDATE/DELETE … RETURNING
|
|
533
|
+
* subquery is cloned through structurally (no substitution), exactly matching the
|
|
534
|
+
* cross-source strip's prior {@link mapQueryExprUniform} behaviour.
|
|
535
|
+
*/
|
|
536
|
+
export function transformAliasScopedExpr(expr, substitute) {
|
|
537
|
+
const sub = (col) => substitute(col, NO_ALIAS_SHADOW);
|
|
538
|
+
const descend = (q) => transformAliasScopedQuery(q, substitute, NO_ALIAS_SHADOW);
|
|
539
|
+
return transformExpr(expr, sub, descend);
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* Alias-shadow-aware transform of an inner `QueryExpr`, threading the FROM-alias
|
|
543
|
+
* shadow set exactly as {@link transformScopedQuery} threads its column-name
|
|
544
|
+
* `shadowed` set: a `select`'s own FROM aliases join the set for its clauses and
|
|
545
|
+
* nested subqueries; a sibling compound / union leg keeps the incoming set; a
|
|
546
|
+
* VALUES body (no FROM) keeps it too; a DML … RETURNING subquery clones through.
|
|
547
|
+
*/
|
|
548
|
+
export function transformAliasScopedQuery(query, substitute, aliasShadow = NO_ALIAS_SHADOW) {
|
|
549
|
+
if (query.type === 'values') {
|
|
550
|
+
// No FROM — the value rows correlate to the enclosing scope unchanged.
|
|
551
|
+
const sub = (col) => substitute(col, aliasShadow);
|
|
552
|
+
const descend = (q) => transformAliasScopedQuery(q, substitute, aliasShadow);
|
|
553
|
+
const onExpr = (e) => transformExpr(e, sub, descend);
|
|
554
|
+
return { ...query, values: query.values.map(row => row.map(onExpr)) };
|
|
555
|
+
}
|
|
556
|
+
if (query.type !== 'select') {
|
|
557
|
+
// An embedded INSERT/UPDATE/DELETE … RETURNING subquery — clone through
|
|
558
|
+
// structurally (no substitution, no reject), matching mapQueryExprUniform.
|
|
559
|
+
return cloneDmlStmt(query);
|
|
560
|
+
}
|
|
561
|
+
const sel = query;
|
|
562
|
+
// References in THIS select's clauses see this select's FROM aliases in addition
|
|
563
|
+
// to any enclosing scope, so its aliases join the shadow set.
|
|
564
|
+
const inner = new Set([...aliasShadow, ...collectFromAliases(sel.from)]);
|
|
565
|
+
const sub = (col) => substitute(col, inner);
|
|
566
|
+
// A subquery nested inside this select's clauses / FROM sees this select's FROM.
|
|
567
|
+
const onNested = (q) => transformAliasScopedQuery(q, substitute, inner);
|
|
568
|
+
// A compound / union leg is a SIBLING select correlating to the SAME outer scope
|
|
569
|
+
// as this one — it does NOT see this select's FROM, so it keeps the incoming set.
|
|
570
|
+
const onLeg = (q) => transformAliasScopedQuery(q, substitute, aliasShadow);
|
|
571
|
+
const onExpr = (e) => transformExpr(e, sub, onNested);
|
|
572
|
+
return rebuildSelect(sel, onExpr, onNested, onLeg);
|
|
573
|
+
}
|
|
574
|
+
//# sourceMappingURL=scope-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-transform.js","sourceRoot":"","sources":["../../../../src/planner/mutation/scope-transform.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,6EAA6E;AAE7E;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC5B,IAAoB,EACpB,UAA+D,EAC/D,OAAiD;IAEjD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YACrC,IAAI,WAAW;gBAAE,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;YAC/C,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QACpB,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAChI,KAAK,OAAO;YACX,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QACzE,KAAK,UAAU;YACd,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACrF,KAAK,MAAM;YACV,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QACzE,KAAK,SAAS;YACb,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QACzE,KAAK,SAAS;YACb,OAAO;gBACN,GAAG,IAAI;gBACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;gBACnD,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;gBACrD,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;aACrD,CAAC;QACH,KAAK,MAAM;YACV,OAAO;gBACN,GAAG,IAAI;gBACP,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBACvF,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAC/C,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;oBAChD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;iBAChD,CAAC,CAAC;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;aACvF,CAAC;QACH,KAAK,IAAI;YACR,OAAO;gBACN,GAAG,IAAI;gBACP,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC;gBACnD,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7F,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ;aAC3E,CAAC;QACH,KAAK,UAAU;YACd,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACvE,KAAK,QAAQ;YACZ,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChF,KAAK,gBAAgB;YACpB,4EAA4E;YAC5E,0EAA0E;YAC1E,OAAO;gBACN,GAAG,IAAI;gBACP,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE;gBACxG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;aAC7F,CAAC;QACH;YACC,sDAAsD;YACtD,kDAAkD;YAClD,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IACrB,CAAC;AACF,CAAC;AAED;+CAC+C;AAC/C,SAAS,yBAAyB,CACjC,MAA4B,EAC5B,UAA+D,EAC/D,OAAiD;IAEjD,OAAO;QACN,GAAG,MAAM;QACT,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAChF,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QAClG,KAAK,EAAE,MAAM,CAAC,KAAK;YAClB,CAAC,CAAC;gBACD,GAAG,MAAM,CAAC,KAAK;gBACf,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC;gBACnE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC;aACnF;YACD,CAAC,CAAC,SAAS;KACZ,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,SAAS,mBAAmB,CAC3B,KAA2B,EAC3B,UAA+D,EAC/D,OAAiD;IAEjD,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAC9D,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QACtE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAC,IAAoB;IAC7C,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAoB,EAAE,OAAyC;IAChG,MAAM,GAAG,GAAG,CAAC,GAAmB,EAA8B,EAAE,CAC/D,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,KAAoB;IAClD,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAClC,KAAoB,EACpB,UAA+D;IAE/D,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC5F,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IACnG,8EAA8E;IAC9E,iFAAiF;IACjF,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,aAAa,CACrB,GAAmB,EACnB,MAA6C,EAC7C,QAA6C,EAC7C,KAA0C;IAE1C,OAAO;QACN,GAAG,GAAG;QACN,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC;QAC3C,8EAA8E;QAC9E,6EAA6E;QAC7E,gFAAgF;QAChF,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK;YAC/C,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACX,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7E,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5D,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAChD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC1D,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACnD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5F,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAChD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACnD,+EAA+E;QAC/E,qEAAqE;QACrE,gFAAgF;QAChF,wDAAwD;QACxD,QAAQ,EAAE,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3C,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QAC5F,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAmB,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;AACH,CAAC;AAED;yCACyC;AACzC,SAAS,WAAW,CACnB,EAAkB,EAClB,MAA6C,EAC7C,QAA6C;IAE7C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO;YACX,0EAA0E;YAC1E,yEAAyE;YACzE,uEAAuE;YACvE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1C,KAAK,MAAM;YACV,OAAO;gBACN,GAAG,EAAE;gBACL,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAC5C,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC;gBAC9C,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;aAC1D,CAAC;QACH,KAAK,gBAAgB;YACpB,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7C,KAAK,gBAAgB;YACpB,OAAO,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACpD,CAAC;AACF,CAAC;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,sEAAsE;AACtE,gFAAgF;AAChF,2DAA2D;AAE3D;;;;;GAKG;AACH,SAAS,eAAe,CAAC,UAAsC;IAC9D,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO;QACN,GAAG,UAAU;QACb,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,GAAG,GAAG;YACN,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;YACxC,KAAK,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE;KACxD,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,SAAS,kBAAkB,CAAC,OAAuC;IAClE,OAAO,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,KAAK;QAC1C,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QACX,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,kBAAkB,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,4EAA4E;AAC5E,SAAS,kBAAkB,CAC1B,OAA2D;IAE3D,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;mCACmC;AACnC,SAAS,mBAAmB,CAC3B,QAA0D;IAE1D,OAAO,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,wDAAwD;AACxD,SAAS,kBAAkB,CAAC,MAA2C;IACtE,OAAO,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,uFAAuF;AACvF,SAAS,iBAAiB,CAAC,MAAwB;IAClD,OAAO;QACN,GAAG,MAAM;QACT,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC;QACnE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChF,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;KAC9C,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,IAAsD;IAC3E,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACZ,OAAO;gBACN,GAAG,IAAI;gBACP,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;gBACxB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC1C,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;gBACnC,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,iBAAiB,CAAC;gBACzD,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7C,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;aACnD,CAAC;QACH,KAAK,QAAQ;YACZ,OAAO;gBACN,GAAG,IAAI;gBACP,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;gBACxB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC7E,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1C,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7C,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;aACnD,CAAC;QACH,KAAK,QAAQ;YACZ,OAAO;gBACN,GAAG,IAAI;gBACP,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;gBAC5C,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1C,SAAS,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7C,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;gBACrD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;aACnD,CAAC;IACJ,CAAC;AACF,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CACrC,GAAoB,EACpB,IAA2C;IAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,0FAA0F;AAC1F,SAAS,qBAAqB,CAAC,GAAoB,EAAE,EAAkB;IACtE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO;YACX,OAAO,sBAAsB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAC/B,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;YACnD,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,KAAK,gBAAgB;YACpB,OAAO,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACzC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/C,CAAC,CAAC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACvC,KAAK,gBAAgB;YACpB,0EAA0E;YAC1E,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC;AAED;;iEAEiE;AACjE,SAAS,sBAAsB,CAAC,GAAoB,EAAE,GAAoB;IACzE,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;IACpC,MAAM,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrE,IAAI,KAAK;QAAE,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3E,IAAI,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC7C,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACjD,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,sFAAsF;IACtF,sFAAsF;IACtF,kFAAkF;IAClF,qFAAqF;IACrF,mFAAmF;IACnF,mEAAmE;IACnE,oFAAoF;IACpF,sFAAsF;IACtF,sFAAsF;IACtF,8EAA8E;IAC9E,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,OAAO;YAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,8CAA8C;IAC9C,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,KAAoB;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChC,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAsDD,MAAM,SAAS,GAAwB,IAAI,GAAG,EAAU,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB,EAAE,KAAmB,EAAE,IAAoB;IAClG,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAC3E,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAC5H,OAAO,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CACnC,GAAoB,EACpB,KAAmB,EACnB,KAAoB,EACpB,QAA6B,EAC7B,OAAgB,EAChB,gBAAqC,eAAe;IAEpD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,uEAAuE;QACvE,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC3H,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAC5F,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,8EAA8E;QAC9E,8DAA8D;QAC9D,KAAK,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,KAAK,GAAG,sBAAsB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,WAAgC,CAAC;IACrC,IAAI,YAAqB,CAAC;IAC1B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,iBAAiB,KAAK,QAAQ;YAAE,KAAK,CAAC,uBAAuB,EAAE,CAAC;QAC1E,6EAA6E;QAC7E,6DAA6D;QAC7D,WAAW,GAAG,QAAQ,CAAC;QACvB,YAAY,GAAG,IAAI,CAAC;IACrB,CAAC;SAAM,CAAC;QACP,4EAA4E;QAC5E,0DAA0D;QAC1D,WAAW,GAAG,IAAI,GAAG,CAAS,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;QACvD,YAAY,GAAG,OAAO,CAAC;IACxB,CAAC;IACD,oFAAoF;IACpF,oFAAoF;IACpF,oFAAoF;IACpF,qDAAqD;IACrD,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAS,CAAC,GAAG,aAAa,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnH,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACrF,iFAAiF;IACjF,sEAAsE;IACtE,MAAM,QAAQ,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;IACvI,iFAAiF;IACjF,6EAA6E;IAC7E,4CAA4C;IAC5C,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC7F,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA2C;IAC7E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,KAAK,MAAM,EAAE,IAAI,IAAI;QAAE,wBAAwB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,iFAAiF;AACjF,SAAS,wBAAwB,CAAC,EAAkB,EAAE,GAAgB;IACrE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO;YACX,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO;QACR,KAAK,gBAAgB;YACpB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;YAChC,OAAO;QACR,KAAK,gBAAgB;YACpB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAClD,OAAO;QACR,KAAK,MAAM;YACV,wBAAwB,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACvC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACxC,OAAO;IACT,CAAC;AACF,CAAC;AAED,MAAM,eAAe,GAAwB,IAAI,GAAG,EAAU,CAAC;AAE/D;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,wBAAwB,CACvC,IAAoB,EACpB,UAAiG;IAEjG,MAAM,GAAG,GAAG,CAAC,GAAmB,EAA8B,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAClG,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IAC/G,OAAO,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACxC,KAAoB,EACpB,UAAiG,EACjG,cAAmC,eAAe;IAElD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,uEAAuE;QACvE,MAAM,GAAG,GAAG,CAAC,GAAmB,EAA8B,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC9F,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAC3G,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACrF,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,wEAAwE;QACxE,2EAA2E;QAC3E,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,iFAAiF;IACjF,8DAA8D;IAC9D,MAAM,KAAK,GAAwB,IAAI,GAAG,CAAS,CAAC,GAAG,WAAW,EAAE,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,GAAG,GAAG,CAAC,GAAmB,EAA8B,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxF,iFAAiF;IACjF,MAAM,QAAQ,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACtG,iFAAiF;IACjF,kFAAkF;IAClF,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAiB,EAAE,CAAC,yBAAyB,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACzG,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAkB,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtF,OAAO,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC"}
|