@quereus/quereus 3.2.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/src/common/datatype.d.ts +12 -0
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/types.d.ts +24 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +37 -9
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +62 -106
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +163 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +235 -21
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +28 -0
- package/dist/src/core/database-external-changes.d.ts.map +1 -0
- package/dist/src/core/database-external-changes.js +242 -0
- package/dist/src/core/database-external-changes.js.map +1 -0
- package/dist/src/core/database-internal.d.ts +50 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +1253 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views.js +3064 -0
- package/dist/src/core/database-materialized-views.js.map +1 -0
- package/dist/src/core/database-options.d.ts +4 -0
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js +10 -0
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +19 -3
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +30 -3
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +19 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +63 -3
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +203 -11
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +493 -29
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +137 -0
- package/dist/src/core/derived-row-validator.d.ts.map +1 -0
- package/dist/src/core/derived-row-validator.js +314 -0
- package/dist/src/core/derived-row-validator.js.map +1 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +30 -9
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +135 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +795 -120
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -10
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +32 -0
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +3 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +229 -0
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +10 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts +2 -0
- package/dist/src/func/builtins/mutation.d.ts.map +1 -0
- package/dist/src/func/builtins/mutation.js +53 -0
- package/dist/src/func/builtins/mutation.js.map +1 -0
- package/dist/src/func/builtins/schema.d.ts +2 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +713 -26
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.js +1 -1
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/registration.d.ts +9 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +4 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +25 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +27 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +353 -21
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/index.d.ts +14 -1
- package/dist/src/parser/index.d.ts.map +1 -1
- package/dist/src/parser/index.js +19 -0
- package/dist/src/parser/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts +9 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -0
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +277 -8
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1393 -471
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +12 -8
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +4 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
- package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
- package/dist/src/planner/analysis/authored-inverse.js +267 -0
- package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/binding-extractor.js +9 -6
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +34 -4
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +115 -7
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +174 -46
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/coarsened-key.js +228 -0
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.js +341 -0
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +13 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +220 -21
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
- package/dist/src/planner/analysis/coverage-prover.js +1038 -0
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
- package/dist/src/planner/analysis/key-filter.d.ts +22 -0
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
- package/dist/src/planner/analysis/key-filter.js +105 -0
- package/dist/src/planner/analysis/key-filter.js.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +51 -13
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
- package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
- package/dist/src/planner/analysis/update-lineage.js +322 -0
- package/dist/src/planner/analysis/update-lineage.js.map +1 -0
- package/dist/src/planner/analysis/view-complement.d.ts +42 -0
- package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
- package/dist/src/planner/analysis/view-complement.js +54 -0
- package/dist/src/planner/analysis/view-complement.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +211 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +18 -1
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +33 -5
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +63 -28
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +9 -0
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +41 -12
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +94 -0
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/declare-schema.d.ts +1 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
- package/dist/src/planner/building/declare-schema.js +4 -1
- package/dist/src/planner/building/declare-schema.js.map +1 -1
- package/dist/src/planner/building/default-scope.d.ts +26 -0
- package/dist/src/planner/building/default-scope.d.ts.map +1 -0
- package/dist/src/planner/building/default-scope.js +41 -0
- package/dist/src/planner/building/default-scope.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts +19 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +116 -34
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +118 -0
- package/dist/src/planner/building/dml-target.d.ts.map +1 -0
- package/dist/src/planner/building/dml-target.js +282 -0
- package/dist/src/planner/building/dml-target.js.map +1 -0
- package/dist/src/planner/building/drop-index.d.ts.map +1 -1
- package/dist/src/planner/building/drop-index.js +4 -1
- package/dist/src/planner/building/drop-index.js.map +1 -1
- package/dist/src/planner/building/drop-view.d.ts.map +1 -1
- package/dist/src/planner/building/drop-view.js +4 -2
- package/dist/src/planner/building/drop-view.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +60 -21
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +160 -129
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts +45 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +257 -88
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
- package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
- package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/building/materialized-view.d.ts +16 -0
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
- package/dist/src/planner/building/materialized-view.js +57 -0
- package/dist/src/planner/building/materialized-view.js.map +1 -0
- package/dist/src/planner/building/returning-star.d.ts +32 -0
- package/dist/src/planner/building/returning-star.d.ts.map +1 -0
- package/dist/src/planner/building/returning-star.js +45 -0
- package/dist/src/planner/building/returning-star.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +51 -13
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +84 -11
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +10 -2
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +7 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +6 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +18 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +30 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +8 -2
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +26 -4
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +8 -5
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +164 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/set-object-tags.d.ts +7 -0
- package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
- package/dist/src/planner/building/set-object-tags.js +38 -0
- package/dist/src/planner/building/set-object-tags.js.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.js +37 -0
- package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
- package/dist/src/planner/building/update.d.ts +18 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +134 -58
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
- package/dist/src/planner/building/view-mutation-builder.js +1158 -0
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
- package/dist/src/planner/building/with.d.ts +11 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +48 -10
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +83 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +114 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +38 -4
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -6
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +2 -1
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +7 -1
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +39 -1
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +18 -2
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +131 -0
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
- package/dist/src/planner/mutation/backward-body.js +135 -0
- package/dist/src/planner/mutation/backward-body.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +364 -0
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
- package/dist/src/planner/mutation/decomposition.d.ts +273 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
- package/dist/src/planner/mutation/decomposition.js +1719 -0
- package/dist/src/planner/mutation/decomposition.js.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.js +745 -0
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
- package/dist/src/planner/mutation/multi-source.d.ts +568 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/multi-source.js +2915 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.js +31 -0
- package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts +97 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
- package/dist/src/planner/mutation/propagate.js +220 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -0
- package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
- package/dist/src/planner/mutation/scope-transform.js +574 -0
- package/dist/src/planner/mutation/scope-transform.js.map +1 -0
- package/dist/src/planner/mutation/set-op.d.ts +242 -0
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
- package/dist/src/planner/mutation/set-op.js +1687 -0
- package/dist/src/planner/mutation/set-op.js.map +1 -0
- package/dist/src/planner/mutation/single-source.d.ts +261 -0
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/single-source.js +1096 -0
- package/dist/src/planner/mutation/single-source.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts +6 -4
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +11 -9
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +5 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +27 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
- package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/analyze-node.js +21 -1
- package/dist/src/planner/nodes/analyze-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +33 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +2 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +4 -1
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +32 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +27 -3
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
- package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
- package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +63 -13
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +6 -16
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +41 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +78 -8
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +33 -6
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +131 -10
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts +12 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +52 -3
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +2 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +9 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +265 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +12 -0
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +14 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +103 -16
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +63 -30
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +7 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +10 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +20 -0
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +71 -14
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
- package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
- package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
- package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +302 -18
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +8 -7
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +8 -23
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +2 -0
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +18 -2
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +23 -3
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +6 -0
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/values-node.d.ts +3 -1
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +26 -0
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/view-mutation-node.js +273 -0
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
- package/dist/src/planner/nodes/window-function.d.ts +17 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +15 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js +3 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +372 -39
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +1 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js +8 -27
- package/dist/src/planner/rules/aggregate/rule-aggregate-streaming.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +9 -3
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +56 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +8 -7
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +14 -21
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +42 -5
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +25 -9
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +19 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +14 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +5 -2
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +10 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +2 -2
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +16 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +47 -4
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +14 -0
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +66 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +228 -36
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +501 -84
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +27 -1
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +80 -6
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +26 -3
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +182 -33
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
- package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
- package/dist/src/planner/util/set-op-wrapper.js +82 -0
- package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +13 -1
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +7 -1
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +30 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +38 -4
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +38 -5
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +10 -8
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +664 -108
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +2 -1
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +24 -9
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
- package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
- package/dist/src/runtime/emit/asserted-keys.js +13 -0
- package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +24 -19
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +24 -36
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/block.d.ts.map +1 -1
- package/dist/src/runtime/emit/block.js +11 -2
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +12 -4
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +50 -1
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +8 -0
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +16 -1
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/delete.d.ts.map +1 -1
- package/dist/src/runtime/emit/delete.js +15 -5
- package/dist/src/runtime/emit/delete.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +413 -193
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +10 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +17 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/envelope-scan.js +22 -0
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts +10 -2
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +128 -38
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view.js +187 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +19 -5
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +10 -5
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +101 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.js +57 -0
- package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +140 -24
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +110 -5
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +34 -6
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
- package/dist/src/runtime/emit/view-mutation.js +299 -0
- package/dist/src/runtime/emit/view-mutation.js.map +1 -0
- package/dist/src/runtime/emit/window.js +29 -5
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +580 -172
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +5 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +17 -1
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +10 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/basis-backfill.d.ts +63 -0
- package/dist/src/schema/basis-backfill.d.ts.map +1 -0
- package/dist/src/schema/basis-backfill.js +161 -0
- package/dist/src/schema/basis-backfill.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +115 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +249 -22
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +42 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/column.d.ts +16 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +182 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -0
- package/dist/src/schema/constraint-builder.js +424 -0
- package/dist/src/schema/constraint-builder.js.map +1 -0
- package/dist/src/schema/ddl-generator.d.ts +86 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +316 -20
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +51 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +61 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +106 -0
- package/dist/src/schema/derivation.d.ts.map +1 -0
- package/dist/src/schema/derivation.js +25 -0
- package/dist/src/schema/derivation.js.map +1 -0
- package/dist/src/schema/function.d.ts +13 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-ack.d.ts +90 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -0
- package/dist/src/schema/lens-ack.js +361 -0
- package/dist/src/schema/lens-ack.js.map +1 -0
- package/dist/src/schema/lens-compiler.d.ts +62 -0
- package/dist/src/schema/lens-compiler.d.ts.map +1 -0
- package/dist/src/schema/lens-compiler.js +1594 -0
- package/dist/src/schema/lens-compiler.js.map +1 -0
- package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
- package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
- package/dist/src/schema/lens-fk-discovery.js +336 -0
- package/dist/src/schema/lens-fk-discovery.js.map +1 -0
- package/dist/src/schema/lens-prover.d.ts +336 -0
- package/dist/src/schema/lens-prover.d.ts.map +1 -0
- package/dist/src/schema/lens-prover.js +1988 -0
- package/dist/src/schema/lens-prover.js.map +1 -0
- package/dist/src/schema/lens.d.ts +254 -0
- package/dist/src/schema/lens.d.ts.map +1 -0
- package/dist/src/schema/lens.js +21 -0
- package/dist/src/schema/lens.js.map +1 -0
- package/dist/src/schema/manager.d.ts +676 -18
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +1573 -238
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
- package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
- package/dist/src/schema/mapping-advertisement-tags.js +216 -0
- package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
- package/dist/src/schema/rename-rewriter.d.ts +45 -4
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +412 -19
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
- package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags-policy.js +34 -0
- package/dist/src/schema/reserved-tags-policy.js.map +1 -0
- package/dist/src/schema/reserved-tags.d.ts +170 -0
- package/dist/src/schema/reserved-tags.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags.js +507 -0
- package/dist/src/schema/reserved-tags.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts +158 -2
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +1460 -78
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +8 -3
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +22 -2
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/schema.d.ts +25 -1
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +36 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +259 -10
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +309 -26
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +78 -0
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
- package/dist/src/schema/unique-enforcement.js +93 -0
- package/dist/src/schema/unique-enforcement.js.map +1 -0
- package/dist/src/schema/view.d.ts +83 -2
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +67 -1
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/schema/window-function.d.ts +9 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/types/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +71 -36
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/comparison.d.ts +24 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +34 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/mutation-statement.d.ts.map +1 -1
- package/dist/src/util/mutation-statement.js +4 -1
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/dist/src/util/serialization.d.ts +9 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +26 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/backing-host.d.ts +286 -0
- package/dist/src/vtab/backing-host.d.ts.map +1 -0
- package/dist/src/vtab/backing-host.js +118 -0
- package/dist/src/vtab/backing-host.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +21 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -5
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
- package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
- package/dist/src/vtab/mapping-advertisement.js +2 -0
- package/dist/src/vtab/mapping-advertisement.js.map +1 -0
- package/dist/src/vtab/memory/index.d.ts +64 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +119 -12
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +38 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +112 -24
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +1050 -91
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +5 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +17 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +82 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +15 -5
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/types.d.ts +20 -2
- package/dist/src/vtab/memory/types.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +46 -24
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -5
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +203 -4
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -0
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +6 -5
|
@@ -3,7 +3,43 @@ import { QuereusError } from '../../common/errors.js';
|
|
|
3
3
|
import { StatusCode } from '../../common/types.js';
|
|
4
4
|
import { BTree } from 'inheritree';
|
|
5
5
|
import { compareSqlValuesFast } from '../../util/comparison.js';
|
|
6
|
+
import { PlanNodeCharacteristics } from '../../planner/framework/characteristics.js';
|
|
7
|
+
import { effectiveInCollation } from '../../planner/analysis/comparison-collation.js';
|
|
6
8
|
export function emitScalarSubquery(plan, ctx) {
|
|
9
|
+
const isImpure = PlanNodeCharacteristics.subtreeHasSideEffects(plan.subquery);
|
|
10
|
+
if (isImpure) {
|
|
11
|
+
// Impure inner (DML w/ RETURNING in scalar position):
|
|
12
|
+
// - Fully drain the iterator so every write happens, not just the first.
|
|
13
|
+
// - Memoize across re-evaluations (correlated outer, per-row scan) so
|
|
14
|
+
// the DML fires exactly once per statement execution. Closure state
|
|
15
|
+
// is per-emission and the Statement re-emits per execution, so this
|
|
16
|
+
// resets between prepared-statement runs.
|
|
17
|
+
let memoized = null;
|
|
18
|
+
async function runImpure(_rctx, input) {
|
|
19
|
+
if (memoized)
|
|
20
|
+
return memoized.value;
|
|
21
|
+
let result = null;
|
|
22
|
+
let seen = false;
|
|
23
|
+
for await (const row of input) {
|
|
24
|
+
if (!seen) {
|
|
25
|
+
if (row.length > 1) {
|
|
26
|
+
throw new QuereusError('Subquery should return at most one column', StatusCode.ERROR);
|
|
27
|
+
}
|
|
28
|
+
result = row.length === 0 ? null : row[0];
|
|
29
|
+
seen = true;
|
|
30
|
+
}
|
|
31
|
+
// Continue iterating to drive every write, even past the first row.
|
|
32
|
+
}
|
|
33
|
+
memoized = { value: result };
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
const innerInstruction = emitPlanNode(plan.subquery, ctx);
|
|
37
|
+
return {
|
|
38
|
+
params: [innerInstruction],
|
|
39
|
+
run: runImpure,
|
|
40
|
+
note: 'SCALAR_SUBQUERY(impure)'
|
|
41
|
+
};
|
|
42
|
+
}
|
|
7
43
|
async function run(_rctx, input) {
|
|
8
44
|
let result = null;
|
|
9
45
|
let seen = false;
|
|
@@ -27,13 +63,58 @@ export function emitScalarSubquery(plan, ctx) {
|
|
|
27
63
|
};
|
|
28
64
|
}
|
|
29
65
|
export function emitIn(plan, ctx) {
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
66
|
+
// ONE collation for the whole membership test (condition vs every RHS
|
|
67
|
+
// value), resolved through the shared provenance lattice — the BTree build
|
|
68
|
+
// below keys under it. Throws only as a backstop; InNode.generateType
|
|
69
|
+
// already rejected conflicts at plan time.
|
|
70
|
+
const collationName = effectiveInCollation(plan);
|
|
33
71
|
const collation = ctx.resolveCollation(collationName);
|
|
34
72
|
if (plan.source) {
|
|
35
|
-
|
|
36
|
-
|
|
73
|
+
const isImpure = PlanNodeCharacteristics.subtreeHasSideEffects(plan.source);
|
|
74
|
+
if (isImpure) {
|
|
75
|
+
// Impure inner: fully drain (no short-circuit on match) so every
|
|
76
|
+
// write fires, and memoize so re-evaluation does not re-drive the DML.
|
|
77
|
+
let memoized = null;
|
|
78
|
+
async function runImpure(_rctx, input, condition) {
|
|
79
|
+
if (memoized)
|
|
80
|
+
return memoized.value;
|
|
81
|
+
let matched = false;
|
|
82
|
+
let hasNull = false;
|
|
83
|
+
const shouldCompare = condition !== null;
|
|
84
|
+
for await (const row of input) {
|
|
85
|
+
if (row.length > 0) {
|
|
86
|
+
const rowValue = row[0];
|
|
87
|
+
if (rowValue === null) {
|
|
88
|
+
hasNull = true;
|
|
89
|
+
}
|
|
90
|
+
else if (shouldCompare && !matched && compareSqlValuesFast(condition, rowValue, collation) === 0) {
|
|
91
|
+
matched = true;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Continue iterating to drive every write past the first match.
|
|
95
|
+
}
|
|
96
|
+
let result;
|
|
97
|
+
if (!shouldCompare) {
|
|
98
|
+
result = null;
|
|
99
|
+
}
|
|
100
|
+
else if (matched) {
|
|
101
|
+
result = true;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
result = hasNull ? null : false;
|
|
105
|
+
}
|
|
106
|
+
memoized = { value: result };
|
|
107
|
+
return result;
|
|
108
|
+
}
|
|
109
|
+
const sourceInstruction = emitPlanNode(plan.source, ctx);
|
|
110
|
+
const conditionExpr = emitPlanNode(plan.condition, ctx);
|
|
111
|
+
return {
|
|
112
|
+
params: [sourceInstruction, conditionExpr],
|
|
113
|
+
run: runImpure,
|
|
114
|
+
note: 'IN(impure)'
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// Pure subquery: streaming + early exit on match.
|
|
37
118
|
async function runSubqueryStreaming(_rctx, input, condition) {
|
|
38
119
|
// If condition is NULL, result is NULL
|
|
39
120
|
if (condition === null) {
|
|
@@ -153,6 +234,30 @@ export function emitIn(plan, ctx) {
|
|
|
153
234
|
}
|
|
154
235
|
}
|
|
155
236
|
export function emitExists(plan, ctx) {
|
|
237
|
+
const isImpure = PlanNodeCharacteristics.subtreeHasSideEffects(plan.subquery);
|
|
238
|
+
if (isImpure) {
|
|
239
|
+
// Impure inner: fully drain (no short-circuit) so every write fires,
|
|
240
|
+
// and memoize so re-evaluation does not re-drive the DML.
|
|
241
|
+
let memoized = null;
|
|
242
|
+
async function runImpure(_rctx, input) {
|
|
243
|
+
if (memoized)
|
|
244
|
+
return memoized.value;
|
|
245
|
+
let any = false;
|
|
246
|
+
for await (const _row of input) {
|
|
247
|
+
any = true;
|
|
248
|
+
// Continue iterating to drive every write past the first row.
|
|
249
|
+
}
|
|
250
|
+
const result = any;
|
|
251
|
+
memoized = { value: result };
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
const innerInstruction = emitPlanNode(plan.subquery, ctx);
|
|
255
|
+
return {
|
|
256
|
+
params: [innerInstruction],
|
|
257
|
+
run: runImpure,
|
|
258
|
+
note: 'EXISTS(impure)'
|
|
259
|
+
};
|
|
260
|
+
}
|
|
156
261
|
async function run(_rctx, input) {
|
|
157
262
|
for await (const _row of input) {
|
|
158
263
|
return true; // First row => TRUE
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subquery.js","sourceRoot":"","sources":["../../../../src/runtime/emit/subquery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"subquery.js","sourceRoot":"","sources":["../../../../src/runtime/emit/subquery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gDAAgD,CAAC;AAEtF,MAAM,UAAU,kBAAkB,CAAC,IAAwB,EAAE,GAAoB;IAChF,MAAM,QAAQ,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9E,IAAI,QAAQ,EAAE,CAAC;QACd,sDAAsD;QACtD,yEAAyE;QACzE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,4CAA4C;QAC5C,IAAI,QAAQ,GAA+B,IAAI,CAAC;QAEhD,KAAK,UAAU,SAAS,CAAC,KAAqB,EAAE,KAAyB;YACxE,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;YAEpC,IAAI,MAAM,GAAa,IAAI,CAAC;YAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;YAEjB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;oBACX,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpB,MAAM,IAAI,YAAY,CAAC,2CAA2C,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;oBACvF,CAAC;oBACD,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC1C,IAAI,GAAG,IAAI,CAAC;gBACb,CAAC;gBACD,oEAAoE;YACrE,CAAC;YAED,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE1D,OAAO;YACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;YAC1B,GAAG,EAAE,SAA2B;YAChC,IAAI,EAAE,yBAAyB;SAC/B,CAAC;IACH,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,KAAqB,EAAE,KAAyB;QAClE,IAAI,MAAM,GAAa,IAAI,CAAC;QAC5B,IAAI,IAAI,GAAG,KAAK,CAAC;QAEjB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,YAAY,CAAC,4CAA4C,EAAE,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACvK,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,YAAY,CAAC,2CAA2C,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE1D,OAAO;QACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,GAAG,EAAE,GAAqB;QAC1B,IAAI,EAAE,iBAAiB;KACvB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,GAAoB;IACxD,sEAAsE;IACtE,2EAA2E;IAC3E,sEAAsE;IACtE,2CAA2C;IAC3C,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,SAAS,GAAG,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEtD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE5E,IAAI,QAAQ,EAAE,CAAC;YACd,iEAAiE;YACjE,uEAAuE;YACvE,IAAI,QAAQ,GAA+B,IAAI,CAAC;YAEhD,KAAK,UAAU,SAAS,CAAC,KAAqB,EAAE,KAAyB,EAAE,SAAmB;gBAC7F,IAAI,QAAQ;oBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;gBAEpC,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,MAAM,aAAa,GAAG,SAAS,KAAK,IAAI,CAAC;gBAEzC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;wBACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;4BACvB,OAAO,GAAG,IAAI,CAAC;wBAChB,CAAC;6BAAM,IAAI,aAAa,IAAI,CAAC,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;4BACpG,OAAO,GAAG,IAAI,CAAC;wBAChB,CAAC;oBACF,CAAC;oBACD,gEAAgE;gBACjE,CAAC;gBAED,IAAI,MAAgB,CAAC;gBACrB,IAAI,CAAC,aAAa,EAAE,CAAC;oBACpB,MAAM,GAAG,IAAI,CAAC;gBACf,CAAC;qBAAM,IAAI,OAAO,EAAE,CAAC;oBACpB,MAAM,GAAG,IAAI,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACP,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;gBACjC,CAAC;gBAED,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBAC7B,OAAO,MAAM,CAAC;YACf,CAAC;YAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAExD,OAAO;gBACN,MAAM,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC;gBAC1C,GAAG,EAAE,SAA2B;gBAChC,IAAI,EAAE,YAAY;aAClB,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,KAAK,UAAU,oBAAoB,CAAC,KAAqB,EAAE,KAAyB,EAAE,SAAmB;YACxG,uCAAuC;YACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACb,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;gBAC/B,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;wBACvB,OAAO,GAAG,IAAI,CAAC;wBACf,SAAS;oBACV,CAAC;oBACD,uDAAuD;oBACvD,IAAI,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChE,OAAO,IAAI,CAAC,CAAC,gBAAgB;oBAC9B,CAAC;gBACF,CAAC;YACF,CAAC;YAED,yDAAyD;YACzD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/B,CAAC;QAED,MAAM,iBAAiB,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAExD,OAAO;YACN,MAAM,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC;YAC1C,GAAG,EAAE,oBAAsC;YAC3C,IAAI,EAAE,eAAe;SACrB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,+CAA+C;QAE/C,yEAAyE;QACzE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEpE,IAAI,WAAW,EAAE,CAAC;YACjB,mDAAmD;YACnD,MAAM,IAAI,GAAG,IAAI,KAAK,CACrB,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,EACtB,CAAC,CAAW,EAAE,CAAW,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CACnE,CAAC;YACF,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,SAAS,gBAAgB,CAAC,KAAqB,EAAE,SAAmB;gBACnE,uCAAuC;gBACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACxB,OAAO,IAAI,CAAC;gBACb,CAAC;gBAED,8CAA8C;gBAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;oBACb,OAAO,IAAI,CAAC,CAAC,gBAAgB;gBAC9B,CAAC;gBAED,yDAAyD;gBACzD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/B,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAE,GAA+B,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEnF,IAAI,OAAuB,CAAC;YAE5B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,OAAO,CAAC,EAAE,CAAC;gBAChD,mCAAmC;gBACnC,OAAO,GAAG,CAAC,KAAK,EAAE,IAAoB,EAAE,SAAmB,EAAqB,EAAE;oBACjF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAE3C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;wBAC9B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;4BACpB,OAAO,GAAG,IAAI,CAAC;4BACf,SAAS;wBACV,CAAC;wBACD,IAAI,CAAC,MAAM,CAAC,KAAiB,CAAC,CAAC;oBAChC,CAAC;oBAED,OAAO,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC1C,CAAC,CAAmB,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACP,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACpB,OAAO,GAAG,IAAI,CAAC;wBACf,SAAS;oBACV,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,KAAiB,CAAC,CAAC;gBAChC,CAAC;gBACD,OAAO,GAAG,gBAAkC,CAAC;YAC9C,CAAC;YAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAExD,OAAO;gBACN,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,GAAG,EAAE,OAAyB;gBAC9B,IAAI,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,mBAAmB;aAClD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,sDAAsD;YACtD,SAAS,gBAAgB,CAAC,KAAqB,EAAE,SAAmB,EAAE,GAAG,MAAkB;gBAC1F,uCAAuC;gBACvC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;oBACxB,OAAO,IAAI,CAAC;gBACb,CAAC;gBAED,yEAAyE;gBACzE,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACpB,OAAO,GAAG,IAAI,CAAC;wBACf,SAAS;oBACV,CAAC;oBACD,IAAI,oBAAoB,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7D,OAAO,IAAI,CAAC,CAAC,gBAAgB;oBAC9B,CAAC;gBACF,CAAC;gBAED,yDAAyD;gBACzD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAC/B,CAAC;YAED,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAElE,OAAO;gBACN,MAAM,EAAE,CAAC,aAAa,EAAE,GAAG,UAAU,CAAC;gBACtC,GAAG,EAAE,gBAAkC;gBACvC,IAAI,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,kBAAkB;aACjD,CAAC;QACH,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,YAAY,CAAC,2CAA2C,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC1F,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAgB,EAAE,GAAoB;IAChE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9E,IAAI,QAAQ,EAAE,CAAC;QACd,qEAAqE;QACrE,0DAA0D;QAC1D,IAAI,QAAQ,GAA+B,IAAI,CAAC;QAEhD,KAAK,UAAU,SAAS,CAAC,KAAqB,EAAE,KAAyB;YACxE,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;YAEpC,IAAI,GAAG,GAAG,KAAK,CAAC;YAChB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAChC,GAAG,GAAG,IAAI,CAAC;gBACX,8DAA8D;YAC/D,CAAC;YAED,MAAM,MAAM,GAAa,GAAG,CAAC;YAC7B,QAAQ,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QACf,CAAC;QAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAE1D,OAAO;YACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;YAC1B,GAAG,EAAE,SAA2B;YAChC,IAAI,EAAE,gBAAgB;SACtB,CAAC;IACH,CAAC;IAED,KAAK,UAAU,GAAG,CAAC,KAAqB,EAAE,KAAyB;QAClE,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,CAAC,oBAAoB;QAClC,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,iBAAiB;IAChC,CAAC;IAED,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAE1D,OAAO;QACN,MAAM,EAAE,CAAC,gBAAgB,CAAC;QAC1B,GAAG,EAAE,GAAqB;QAC1B,IAAI,EAAE,QAAQ;KACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"unary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA0HhF"}
|
|
@@ -11,7 +11,7 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
11
11
|
const operator = plan.expression.operator.toUpperCase();
|
|
12
12
|
switch (operator) {
|
|
13
13
|
case 'NOT':
|
|
14
|
-
run = (
|
|
14
|
+
run = (_ctx, operand) => {
|
|
15
15
|
// SQL NOT: NULL -> NULL, false -> true, true -> false
|
|
16
16
|
if (operand === null)
|
|
17
17
|
return null;
|
|
@@ -20,19 +20,47 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
20
20
|
note = 'NOT';
|
|
21
21
|
break;
|
|
22
22
|
case 'IS NULL':
|
|
23
|
-
run = (
|
|
23
|
+
run = (_ctx, operand) => {
|
|
24
24
|
return operand === null;
|
|
25
25
|
};
|
|
26
26
|
note = 'IS NULL';
|
|
27
27
|
break;
|
|
28
28
|
case 'IS NOT NULL':
|
|
29
|
-
run = (
|
|
29
|
+
run = (_ctx, operand) => {
|
|
30
30
|
return operand !== null;
|
|
31
31
|
};
|
|
32
32
|
note = 'IS NOT NULL';
|
|
33
33
|
break;
|
|
34
|
+
case 'IS TRUE':
|
|
35
|
+
run = (_ctx, operand) => {
|
|
36
|
+
// Total predicate: NULL operand is not true; otherwise SQL truthiness.
|
|
37
|
+
return operand === null ? false : isTruthy(operand);
|
|
38
|
+
};
|
|
39
|
+
note = 'IS TRUE';
|
|
40
|
+
break;
|
|
41
|
+
case 'IS NOT TRUE':
|
|
42
|
+
run = (_ctx, operand) => {
|
|
43
|
+
// ≡ NOT (x IS TRUE): the NULL row flips into the true bucket.
|
|
44
|
+
return operand === null ? true : !isTruthy(operand);
|
|
45
|
+
};
|
|
46
|
+
note = 'IS NOT TRUE';
|
|
47
|
+
break;
|
|
48
|
+
case 'IS FALSE':
|
|
49
|
+
run = (_ctx, operand) => {
|
|
50
|
+
// Total predicate: NULL operand is not false; otherwise not-truthy.
|
|
51
|
+
return operand === null ? false : !isTruthy(operand);
|
|
52
|
+
};
|
|
53
|
+
note = 'IS FALSE';
|
|
54
|
+
break;
|
|
55
|
+
case 'IS NOT FALSE':
|
|
56
|
+
run = (_ctx, operand) => {
|
|
57
|
+
// ≡ NOT (x IS FALSE): the NULL row flips into the true bucket.
|
|
58
|
+
return operand === null ? true : isTruthy(operand);
|
|
59
|
+
};
|
|
60
|
+
note = 'IS NOT FALSE';
|
|
61
|
+
break;
|
|
34
62
|
case '-':
|
|
35
|
-
run = (
|
|
63
|
+
run = (_ctx, operand) => {
|
|
36
64
|
if (operand === null)
|
|
37
65
|
return null;
|
|
38
66
|
// Check if it's a timespan (ISO 8601 duration string)
|
|
@@ -57,7 +85,7 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
57
85
|
note = 'unary -';
|
|
58
86
|
break;
|
|
59
87
|
case '+':
|
|
60
|
-
run = (
|
|
88
|
+
run = (_ctx, operand) => {
|
|
61
89
|
// Unary plus - convert to number if possible
|
|
62
90
|
if (operand === null)
|
|
63
91
|
return null;
|
|
@@ -69,7 +97,7 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
69
97
|
note = 'unary +';
|
|
70
98
|
break;
|
|
71
99
|
case '~':
|
|
72
|
-
run = (
|
|
100
|
+
run = (_ctx, operand) => {
|
|
73
101
|
if (operand === null)
|
|
74
102
|
return null;
|
|
75
103
|
if (typeof operand === 'bigint')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,MAAM,UAAU,WAAW,CAAC,IAAiB,EAAE,GAAoB;IAClE,6CAA6C;IAC7C,IAAI,GAAyD,CAAC;IAC9D,IAAI,IAAY,CAAC;IAEjB,gEAAgE;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAExD,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,KAAK;YACT,GAAG,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ViewMutationNode } from '../../planner/nodes/view-mutation-node.js';
|
|
2
|
+
import type { Instruction } from '../types.js';
|
|
3
|
+
import type { EmissionContext } from '../emission-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* Emit a view-/MV-mediated mutation.
|
|
6
|
+
*
|
|
7
|
+
* Each base op is a fully-built base-table DML subtree (Sink-topped for the
|
|
8
|
+
* non-RETURNING spine). They are emitted as **callbacks** (`emitCallFromPlan`
|
|
9
|
+
* wraps each subtree in its own sub-program) rather than bare params, then this
|
|
10
|
+
* instruction's `run` invokes them **sequentially**, awaiting each to completion
|
|
11
|
+
* before starting the next.
|
|
12
|
+
*
|
|
13
|
+
* This sequencing is load-bearing for multi-source decomposition: the scheduler
|
|
14
|
+
* kicks off sibling params concurrently (it does not await one before starting
|
|
15
|
+
* the next — see `Scheduler.runAsync`), so a bare-param fan-out would interleave
|
|
16
|
+
* the base writes and lose the FK-parent-before-child ordering the decomposition
|
|
17
|
+
* decided. Driving the callbacks in list order here makes the emitted order the
|
|
18
|
+
* executed order. For the single-source spine there is exactly one base op, so
|
|
19
|
+
* this degenerates to driving that one to completion.
|
|
20
|
+
*
|
|
21
|
+
* **Shared-surrogate envelope (multi-source insert).** When `plan.envelope` is
|
|
22
|
+
* present, before any base op runs this:
|
|
23
|
+
* 1. materializes the augmented source once into an array (every supplied view
|
|
24
|
+
* column, in projection order);
|
|
25
|
+
* 2. if `keyDefault` is set, evaluates the anchor key column's `default` **once per
|
|
26
|
+
* produced row** — with `rctx.mutationOrdinal` set to the row's 1-based ordinal so
|
|
27
|
+
* `mutation_ordinal()` resolves, and any `max()` subquery observing pre-mutation
|
|
28
|
+
* state — and appends the value as the last column of each row (the
|
|
29
|
+
* evaluate-once-per-row, thread-everywhere shared key); and
|
|
30
|
+
* 3. stashes the rows in `rctx.tableContexts` under the envelope descriptor.
|
|
31
|
+
* The base ops (run with this same `rctx`) each read those rows back through an
|
|
32
|
+
* `EnvelopeScanNode`, so the shared key is identical across the fan-out. The
|
|
33
|
+
* context entry is removed in a `finally` so it never leaks past the statement.
|
|
34
|
+
*
|
|
35
|
+
* **RETURNING-through-view.** When the mutation has a `returning` clause the node
|
|
36
|
+
* is relational and this emitter yields the view-projected rows (materialized
|
|
37
|
+
* eagerly, so the base writes fire inside `run` regardless of the node's position
|
|
38
|
+
* in a block — matching the void path's eager drain). Two shapes:
|
|
39
|
+
* - *single-source*: the RETURNING clause was rewritten onto the (sole) base op,
|
|
40
|
+
* which plans to a relational `ReturningNode`. `run` drains every base op and
|
|
41
|
+
* surfaces that one's rows (NEW for insert/update, OLD for delete).
|
|
42
|
+
* - *multi-source* update/delete: `plan.returning` is a separate re-query. A
|
|
43
|
+
* delete captures it **before** the base ops fire (`returningTiming === 'pre'` —
|
|
44
|
+
* the rows are about to disappear). An update (`'post'`) reads the post-mutation
|
|
45
|
+
* join body restricted to the `plan.identityCapture` identities (so a row the
|
|
46
|
+
* update pushed out of the view filter, or whose predicate column it rewrote, is
|
|
47
|
+
* still returned).
|
|
48
|
+
*
|
|
49
|
+
* **Up-front identity capture (multi-source update / multi-side delete).** When
|
|
50
|
+
* `plan.identityCapture` is present, before any base op runs this materializes each
|
|
51
|
+
* affected view row's base-PK identities into `rctx.tableContexts` under the capture
|
|
52
|
+
* descriptor — read back by descriptor by the multi-side base ops' identifying
|
|
53
|
+
* subqueries (`<pk> in (select k<side> from __vmupd_keys)`) and/or the post-mutation
|
|
54
|
+
* RETURNING re-query. Wrapped across all branches (a both-sides update / multi-side
|
|
55
|
+
* delete without RETURNING still needs it) and removed in a `finally`. Mutually
|
|
56
|
+
* exclusive with the insert envelope.
|
|
57
|
+
*
|
|
58
|
+
* **Chained nested captures (set-op multi-source leg compose).** `plan.nestedCaptures`
|
|
59
|
+
* adds further captures materialized AFTER the primary, in list order, before the base
|
|
60
|
+
* ops. A nested capture's source may scan a strictly-earlier capture's rows (e.g. an
|
|
61
|
+
* inner base-PK capture whose `memberExists` probe reads the outer set-op capture's
|
|
62
|
+
* `__vmupd_keys`), so they are materialized primary → nested[0] → nested[1] → … and torn
|
|
63
|
+
* down in REVERSE in a `finally` (so a throw mid-statement leaks no context entry).
|
|
64
|
+
*
|
|
65
|
+
* Without a `returning` clause every base op is a side-effect statement that
|
|
66
|
+
* yields nothing and this node yields nothing; the block emitter treats it like a
|
|
67
|
+
* Sink for result selection.
|
|
68
|
+
*/
|
|
69
|
+
export declare function emitViewMutation(plan: ViewMutationNode, ctx: EmissionContext): Instruction;
|
|
70
|
+
//# sourceMappingURL=view-mutation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-mutation.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/view-mutation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAElF,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQ9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAoO1F"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
import { isRelationalNode } from '../../planner/nodes/plan-node.js';
|
|
2
|
+
import { emitCallFromPlan } from '../emitters.js';
|
|
3
|
+
import { isAsyncIterable } from '../utils.js';
|
|
4
|
+
import { createRowSlot } from '../context-helpers.js';
|
|
5
|
+
/**
|
|
6
|
+
* Emit a view-/MV-mediated mutation.
|
|
7
|
+
*
|
|
8
|
+
* Each base op is a fully-built base-table DML subtree (Sink-topped for the
|
|
9
|
+
* non-RETURNING spine). They are emitted as **callbacks** (`emitCallFromPlan`
|
|
10
|
+
* wraps each subtree in its own sub-program) rather than bare params, then this
|
|
11
|
+
* instruction's `run` invokes them **sequentially**, awaiting each to completion
|
|
12
|
+
* before starting the next.
|
|
13
|
+
*
|
|
14
|
+
* This sequencing is load-bearing for multi-source decomposition: the scheduler
|
|
15
|
+
* kicks off sibling params concurrently (it does not await one before starting
|
|
16
|
+
* the next — see `Scheduler.runAsync`), so a bare-param fan-out would interleave
|
|
17
|
+
* the base writes and lose the FK-parent-before-child ordering the decomposition
|
|
18
|
+
* decided. Driving the callbacks in list order here makes the emitted order the
|
|
19
|
+
* executed order. For the single-source spine there is exactly one base op, so
|
|
20
|
+
* this degenerates to driving that one to completion.
|
|
21
|
+
*
|
|
22
|
+
* **Shared-surrogate envelope (multi-source insert).** When `plan.envelope` is
|
|
23
|
+
* present, before any base op runs this:
|
|
24
|
+
* 1. materializes the augmented source once into an array (every supplied view
|
|
25
|
+
* column, in projection order);
|
|
26
|
+
* 2. if `keyDefault` is set, evaluates the anchor key column's `default` **once per
|
|
27
|
+
* produced row** — with `rctx.mutationOrdinal` set to the row's 1-based ordinal so
|
|
28
|
+
* `mutation_ordinal()` resolves, and any `max()` subquery observing pre-mutation
|
|
29
|
+
* state — and appends the value as the last column of each row (the
|
|
30
|
+
* evaluate-once-per-row, thread-everywhere shared key); and
|
|
31
|
+
* 3. stashes the rows in `rctx.tableContexts` under the envelope descriptor.
|
|
32
|
+
* The base ops (run with this same `rctx`) each read those rows back through an
|
|
33
|
+
* `EnvelopeScanNode`, so the shared key is identical across the fan-out. The
|
|
34
|
+
* context entry is removed in a `finally` so it never leaks past the statement.
|
|
35
|
+
*
|
|
36
|
+
* **RETURNING-through-view.** When the mutation has a `returning` clause the node
|
|
37
|
+
* is relational and this emitter yields the view-projected rows (materialized
|
|
38
|
+
* eagerly, so the base writes fire inside `run` regardless of the node's position
|
|
39
|
+
* in a block — matching the void path's eager drain). Two shapes:
|
|
40
|
+
* - *single-source*: the RETURNING clause was rewritten onto the (sole) base op,
|
|
41
|
+
* which plans to a relational `ReturningNode`. `run` drains every base op and
|
|
42
|
+
* surfaces that one's rows (NEW for insert/update, OLD for delete).
|
|
43
|
+
* - *multi-source* update/delete: `plan.returning` is a separate re-query. A
|
|
44
|
+
* delete captures it **before** the base ops fire (`returningTiming === 'pre'` —
|
|
45
|
+
* the rows are about to disappear). An update (`'post'`) reads the post-mutation
|
|
46
|
+
* join body restricted to the `plan.identityCapture` identities (so a row the
|
|
47
|
+
* update pushed out of the view filter, or whose predicate column it rewrote, is
|
|
48
|
+
* still returned).
|
|
49
|
+
*
|
|
50
|
+
* **Up-front identity capture (multi-source update / multi-side delete).** When
|
|
51
|
+
* `plan.identityCapture` is present, before any base op runs this materializes each
|
|
52
|
+
* affected view row's base-PK identities into `rctx.tableContexts` under the capture
|
|
53
|
+
* descriptor — read back by descriptor by the multi-side base ops' identifying
|
|
54
|
+
* subqueries (`<pk> in (select k<side> from __vmupd_keys)`) and/or the post-mutation
|
|
55
|
+
* RETURNING re-query. Wrapped across all branches (a both-sides update / multi-side
|
|
56
|
+
* delete without RETURNING still needs it) and removed in a `finally`. Mutually
|
|
57
|
+
* exclusive with the insert envelope.
|
|
58
|
+
*
|
|
59
|
+
* **Chained nested captures (set-op multi-source leg compose).** `plan.nestedCaptures`
|
|
60
|
+
* adds further captures materialized AFTER the primary, in list order, before the base
|
|
61
|
+
* ops. A nested capture's source may scan a strictly-earlier capture's rows (e.g. an
|
|
62
|
+
* inner base-PK capture whose `memberExists` probe reads the outer set-op capture's
|
|
63
|
+
* `__vmupd_keys`), so they are materialized primary → nested[0] → nested[1] → … and torn
|
|
64
|
+
* down in REVERSE in a `finally` (so a throw mid-statement leaks no context entry).
|
|
65
|
+
*
|
|
66
|
+
* Without a `returning` clause every base op is a side-effect statement that
|
|
67
|
+
* yields nothing and this node yields nothing; the block emitter treats it like a
|
|
68
|
+
* Sink for result selection.
|
|
69
|
+
*/
|
|
70
|
+
export function emitViewMutation(plan, ctx) {
|
|
71
|
+
const baseOpInstructions = plan.baseOps.map(op => emitCallFromPlan(op, ctx));
|
|
72
|
+
const baseOpCount = baseOpInstructions.length;
|
|
73
|
+
const envelope = plan.envelope;
|
|
74
|
+
const descriptor = envelope?.descriptor;
|
|
75
|
+
// When set, the anchor key column's `default` is evaluated once per produced row at
|
|
76
|
+
// the envelope (with `mutation_ordinal()` in scope) and appended as the shared key.
|
|
77
|
+
const hasKeyDefault = !!envelope?.keyDefault;
|
|
78
|
+
// The relational base op carrying a single-source RETURNING (the rewritten,
|
|
79
|
+
// view-projected clause), or -1. Mutually exclusive with `plan.returning`.
|
|
80
|
+
const relationalBaseIdx = plan.baseOps.findIndex(op => isRelationalNode(op));
|
|
81
|
+
const returningTiming = plan.returningTiming;
|
|
82
|
+
// The up-front identity-capture side input for a multi-source UPDATE / multi-side
|
|
83
|
+
// DELETE fan-out: its rows (each affected view row's base-PK identities) are
|
|
84
|
+
// materialized into context (under this descriptor) BEFORE the base ops run, and
|
|
85
|
+
// read back by descriptor by the multi-side base ops' identifying subqueries
|
|
86
|
+
// and/or the post-mutation RETURNING re-query. Present for a both-sides update
|
|
87
|
+
// (with or without RETURNING), a single-side update with RETURNING, and a
|
|
88
|
+
// multi-side delete fan-out (with or without RETURNING).
|
|
89
|
+
const capture = plan.identityCapture;
|
|
90
|
+
const captureDescriptor = capture?.descriptor;
|
|
91
|
+
// Nested identity captures (set-op multi-source leg compose): materialized AFTER the
|
|
92
|
+
// primary capture, in list order, BEFORE the base ops. Each nested source may scan a
|
|
93
|
+
// strictly-earlier capture's materialized rows (the primary, or an earlier nested
|
|
94
|
+
// entry), so the materialization order is load-bearing.
|
|
95
|
+
const nestedCaptures = plan.nestedCaptures ?? [];
|
|
96
|
+
// Params follow the same order `ViewMutationNode.getChildren` threads them in:
|
|
97
|
+
// base-op callbacks, then the optional RETURNING re-query, then the optional
|
|
98
|
+
// identity-capture source, then the nested-capture sources (in list order), then the
|
|
99
|
+
// envelope source + optional surrogate seed — so the scheduler resolves every
|
|
100
|
+
// sub-program before `run`.
|
|
101
|
+
const params = [...baseOpInstructions];
|
|
102
|
+
let cursor = baseOpCount;
|
|
103
|
+
let returningIdx = -1;
|
|
104
|
+
if (plan.returning) {
|
|
105
|
+
returningIdx = cursor++;
|
|
106
|
+
params.push(emitCallFromPlan(plan.returning, ctx));
|
|
107
|
+
}
|
|
108
|
+
let captureIdx = -1;
|
|
109
|
+
if (capture) {
|
|
110
|
+
captureIdx = cursor++;
|
|
111
|
+
params.push(emitCallFromPlan(capture.source, ctx));
|
|
112
|
+
}
|
|
113
|
+
// One param slot per nested capture source, in list order, immediately after the
|
|
114
|
+
// primary capture and before the envelope source — matching `getChildren`.
|
|
115
|
+
const nestedCaptureIdxs = [];
|
|
116
|
+
for (const nested of nestedCaptures) {
|
|
117
|
+
nestedCaptureIdxs.push(cursor++);
|
|
118
|
+
params.push(emitCallFromPlan(nested.source, ctx));
|
|
119
|
+
}
|
|
120
|
+
let envSourceIdx = -1;
|
|
121
|
+
if (envelope) {
|
|
122
|
+
envSourceIdx = cursor++;
|
|
123
|
+
params.push(emitCallFromPlan(envelope.source, ctx));
|
|
124
|
+
}
|
|
125
|
+
let keyDefaultIdx = -1;
|
|
126
|
+
if (envelope?.keyDefault) {
|
|
127
|
+
keyDefaultIdx = cursor++;
|
|
128
|
+
params.push(emitCallFromPlan(envelope.keyDefault, ctx));
|
|
129
|
+
}
|
|
130
|
+
async function drainBaseOps(rctx, baseCbs) {
|
|
131
|
+
for (const cb of baseCbs) {
|
|
132
|
+
const result = cb(rctx);
|
|
133
|
+
const resolved = result instanceof Promise ? await result : result;
|
|
134
|
+
// A Sink-topped base op resolves to null; defensively drain a relational
|
|
135
|
+
// result so its writes fire before the next op.
|
|
136
|
+
if (isAsyncIterable(resolved)) {
|
|
137
|
+
for await (const _row of resolved) { /* drain side effects */ }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/** Drain a base-op / re-query callback result fully into a materialized row array. */
|
|
142
|
+
async function collectRows(value) {
|
|
143
|
+
const resolved = value instanceof Promise ? await value : value;
|
|
144
|
+
const rows = [];
|
|
145
|
+
if (isAsyncIterable(resolved)) {
|
|
146
|
+
for await (const row of resolved)
|
|
147
|
+
rows.push(row);
|
|
148
|
+
}
|
|
149
|
+
return rows;
|
|
150
|
+
}
|
|
151
|
+
async function materializeEnvelope(rctx, sourceCb, keyDefaultCb, keyDefaultRowDescriptor) {
|
|
152
|
+
const rows = [];
|
|
153
|
+
const sourceResult = sourceCb(rctx);
|
|
154
|
+
const resolved = sourceResult instanceof Promise ? await sourceResult : sourceResult;
|
|
155
|
+
if (isAsyncIterable(resolved)) {
|
|
156
|
+
// Save/restore the ambient ordinal so a nested mutation never sees a stale
|
|
157
|
+
// value and it does not leak past the envelope.
|
|
158
|
+
const savedOrdinal = rctx.mutationOrdinal;
|
|
159
|
+
// When the key default reads supplied siblings via `new.<col>`, expose THIS
|
|
160
|
+
// row (the supplied columns, before the `__shared_key` is appended) to those
|
|
161
|
+
// column refs through a row slot over the key default's descriptor. Installed
|
|
162
|
+
// once, updated by reference per row, torn down in `finally`.
|
|
163
|
+
const keySlot = keyDefaultCb && keyDefaultRowDescriptor
|
|
164
|
+
? createRowSlot(rctx, keyDefaultRowDescriptor)
|
|
165
|
+
: undefined;
|
|
166
|
+
let ordinal = 0;
|
|
167
|
+
try {
|
|
168
|
+
for await (const row of resolved) {
|
|
169
|
+
ordinal += 1;
|
|
170
|
+
if (keyDefaultCb) {
|
|
171
|
+
// Evaluate the anchor key column's `default` once for THIS row, with
|
|
172
|
+
// `mutation_ordinal()` resolving to its 1-based ordinal and any `max()`
|
|
173
|
+
// subquery observing pre-mutation state (no base write has fired). The
|
|
174
|
+
// single value threads into every member's key column via the EC.
|
|
175
|
+
rctx.mutationOrdinal = ordinal;
|
|
176
|
+
keySlot?.set(row);
|
|
177
|
+
const minted = await keyDefaultCb(rctx);
|
|
178
|
+
rows.push([...row, minted]);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
rows.push(row);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
rctx.mutationOrdinal = savedOrdinal;
|
|
187
|
+
keySlot?.close();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return rows;
|
|
191
|
+
}
|
|
192
|
+
async function run(rctx, ...args) {
|
|
193
|
+
const baseCbs = args.slice(0, baseOpCount);
|
|
194
|
+
// Identity captures (multi-source UPDATE / multi-side DELETE fan-out, and the
|
|
195
|
+
// set-op leg compose's chained captures): materialize each affected-row capture's
|
|
196
|
+
// rows into context BEFORE any base op runs, then run the body. This wraps ALL
|
|
197
|
+
// branches — the multi-side base ops (which read `__vmupd_keys` by descriptor) and
|
|
198
|
+
// the post-mutation RETURNING re-query both read the captured set, and a multi-side
|
|
199
|
+
// mutation WITHOUT RETURNING still needs it for the base ops.
|
|
200
|
+
//
|
|
201
|
+
// The captures are materialized in a load-bearing order: the primary
|
|
202
|
+
// `identityCapture` first, then each nested capture in list order. A nested
|
|
203
|
+
// capture's source may scan a STRICTLY-earlier capture's rows (read back by
|
|
204
|
+
// descriptor), so the earlier `tableContexts` entry must already be set when the
|
|
205
|
+
// nested source runs. Each entry set is removed in `finally`, in REVERSE order, so
|
|
206
|
+
// a partially-run statement (a base op — or a later nested capture's
|
|
207
|
+
// materialization — throwing) never leaks a context entry into a sibling statement.
|
|
208
|
+
//
|
|
209
|
+
// Ordered off whatever captures are present (primary-then-nested), so a statement
|
|
210
|
+
// with nested captures but no primary is handled cleanly too.
|
|
211
|
+
const orderedCaptureIdxs = [];
|
|
212
|
+
if (captureIdx >= 0 && captureDescriptor) {
|
|
213
|
+
orderedCaptureIdxs.push({ descriptor: captureDescriptor, idx: captureIdx });
|
|
214
|
+
}
|
|
215
|
+
for (let i = 0; i < nestedCaptureIdxs.length; i++) {
|
|
216
|
+
orderedCaptureIdxs.push({ descriptor: nestedCaptures[i].descriptor, idx: nestedCaptureIdxs[i] });
|
|
217
|
+
}
|
|
218
|
+
if (orderedCaptureIdxs.length === 0) {
|
|
219
|
+
return runBody(rctx, args, baseCbs);
|
|
220
|
+
}
|
|
221
|
+
// Teardown stack: only the descriptors actually set are removed (in reverse), so a
|
|
222
|
+
// throw mid-materialization tears down exactly what was installed.
|
|
223
|
+
const setDescriptors = [];
|
|
224
|
+
try {
|
|
225
|
+
for (const { descriptor: capDescriptor, idx } of orderedCaptureIdxs) {
|
|
226
|
+
const captureRows = await collectRows(args[idx](rctx));
|
|
227
|
+
rctx.tableContexts.set(capDescriptor, () => arrayIterable(captureRows));
|
|
228
|
+
setDescriptors.push(capDescriptor);
|
|
229
|
+
}
|
|
230
|
+
return await runBody(rctx, args, baseCbs);
|
|
231
|
+
}
|
|
232
|
+
finally {
|
|
233
|
+
for (let i = setDescriptors.length - 1; i >= 0; i--) {
|
|
234
|
+
rctx.tableContexts.delete(setDescriptors[i]);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function runBody(rctx, args, baseCbs) {
|
|
239
|
+
// (1) Multi-source RETURNING via a separate re-query of the view.
|
|
240
|
+
if (returningIdx >= 0) {
|
|
241
|
+
const returningCb = args[returningIdx];
|
|
242
|
+
if (returningTiming === 'pre') {
|
|
243
|
+
// delete: capture the to-be-deleted view rows before the base ops fire.
|
|
244
|
+
const rows = await collectRows(returningCb(rctx));
|
|
245
|
+
await drainBaseOps(rctx, baseCbs);
|
|
246
|
+
return arrayIterable(rows);
|
|
247
|
+
}
|
|
248
|
+
// update (post): the identity capture (if any) was already materialized by
|
|
249
|
+
// `run`'s wrapper; mutate, then the re-query reads the post-mutation image
|
|
250
|
+
// restricted to those captured identities (robust against an update that
|
|
251
|
+
// rewrites its own predicate column).
|
|
252
|
+
await drainBaseOps(rctx, baseCbs);
|
|
253
|
+
return arrayIterable(await collectRows(returningCb(rctx)));
|
|
254
|
+
}
|
|
255
|
+
// (2) Single-source RETURNING rewritten onto the (sole) relational base op.
|
|
256
|
+
// Drain every base op in list order (firing writes); surface the relational
|
|
257
|
+
// one's view-projected rows.
|
|
258
|
+
if (relationalBaseIdx >= 0) {
|
|
259
|
+
let resultRows = [];
|
|
260
|
+
for (let i = 0; i < baseCbs.length; i++) {
|
|
261
|
+
const rows = await collectRows(baseCbs[i](rctx));
|
|
262
|
+
if (i === relationalBaseIdx)
|
|
263
|
+
resultRows = rows;
|
|
264
|
+
}
|
|
265
|
+
return arrayIterable(resultRows);
|
|
266
|
+
}
|
|
267
|
+
// (3) Void mutation (no RETURNING): drive the base ops, yield nothing. A
|
|
268
|
+
// both-sides update / multi-side delete fan-out without RETURNING lands here
|
|
269
|
+
// with its identity capture already materialized by `run`, so the base ops read
|
|
270
|
+
// `__vmupd_keys`.
|
|
271
|
+
if (!descriptor) {
|
|
272
|
+
await drainBaseOps(rctx, baseCbs);
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
const sourceCb = args[envSourceIdx];
|
|
276
|
+
const keyDefaultCb = hasKeyDefault ? args[keyDefaultIdx] : undefined;
|
|
277
|
+
const rows = await materializeEnvelope(rctx, sourceCb, keyDefaultCb, envelope?.keyDefaultRowDescriptor);
|
|
278
|
+
rctx.tableContexts.set(descriptor, () => arrayIterable(rows));
|
|
279
|
+
try {
|
|
280
|
+
await drainBaseOps(rctx, baseCbs);
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
rctx.tableContexts.delete(descriptor);
|
|
284
|
+
}
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const retNote = plan.returning ? ` +returning(${returningTiming}${capture ? '+capture' : ''})` : relationalBaseIdx >= 0 ? ' +returning' : '';
|
|
288
|
+
const nestedNote = nestedCaptures.length > 0 ? ` +nested(${nestedCaptures.length})` : '';
|
|
289
|
+
return {
|
|
290
|
+
params,
|
|
291
|
+
run: run,
|
|
292
|
+
note: `viewMutation(${baseOpCount} base op${baseOpCount === 1 ? '' : 's'}${envelope ? ' +envelope' : ''}${retNote}${nestedNote})`,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
async function* arrayIterable(rows) {
|
|
296
|
+
for (const row of rows)
|
|
297
|
+
yield row;
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=view-mutation.js.map
|