@quereus/quereus 3.3.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/src/common/datatype.d.ts +12 -0
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/types.d.ts +24 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +37 -9
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +62 -110
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +163 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +235 -21
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +28 -0
- package/dist/src/core/database-external-changes.d.ts.map +1 -0
- package/dist/src/core/database-external-changes.js +242 -0
- package/dist/src/core/database-external-changes.js.map +1 -0
- package/dist/src/core/database-internal.d.ts +50 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +1253 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views.js +3064 -0
- package/dist/src/core/database-materialized-views.js.map +1 -0
- package/dist/src/core/database-options.d.ts +4 -0
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js +10 -0
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +19 -3
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +30 -3
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +19 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +63 -3
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +203 -11
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +493 -29
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +137 -0
- package/dist/src/core/derived-row-validator.d.ts.map +1 -0
- package/dist/src/core/derived-row-validator.js +314 -0
- package/dist/src/core/derived-row-validator.js.map +1 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +30 -9
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +135 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +793 -118
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -10
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +32 -0
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +3 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +229 -0
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +10 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts +2 -0
- package/dist/src/func/builtins/mutation.d.ts.map +1 -0
- package/dist/src/func/builtins/mutation.js +53 -0
- package/dist/src/func/builtins/mutation.js.map +1 -0
- package/dist/src/func/builtins/schema.d.ts +2 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +713 -26
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.js +1 -1
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/registration.d.ts +9 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +4 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +25 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +27 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +353 -21
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/index.d.ts +14 -1
- package/dist/src/parser/index.d.ts.map +1 -1
- package/dist/src/parser/index.js +19 -0
- package/dist/src/parser/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts +9 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -0
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +276 -7
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1387 -469
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +12 -8
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +4 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
- package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
- package/dist/src/planner/analysis/authored-inverse.js +267 -0
- package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
- package/dist/src/planner/analysis/change-scope.d.ts +34 -4
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +108 -7
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +174 -46
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/coarsened-key.js +228 -0
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.js +341 -0
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +3 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +192 -9
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
- package/dist/src/planner/analysis/coverage-prover.js +1038 -0
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
- package/dist/src/planner/analysis/key-filter.d.ts +22 -0
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
- package/dist/src/planner/analysis/key-filter.js +105 -0
- package/dist/src/planner/analysis/key-filter.js.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +51 -13
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
- package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
- package/dist/src/planner/analysis/update-lineage.js +322 -0
- package/dist/src/planner/analysis/update-lineage.js.map +1 -0
- package/dist/src/planner/analysis/view-complement.d.ts +42 -0
- package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
- package/dist/src/planner/analysis/view-complement.js +54 -0
- package/dist/src/planner/analysis/view-complement.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +211 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +18 -1
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +33 -5
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +63 -28
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +9 -0
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +41 -12
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +94 -0
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/declare-schema.d.ts +1 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
- package/dist/src/planner/building/declare-schema.js +4 -1
- package/dist/src/planner/building/declare-schema.js.map +1 -1
- package/dist/src/planner/building/default-scope.d.ts +26 -0
- package/dist/src/planner/building/default-scope.d.ts.map +1 -0
- package/dist/src/planner/building/default-scope.js +41 -0
- package/dist/src/planner/building/default-scope.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts +19 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +109 -30
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +118 -0
- package/dist/src/planner/building/dml-target.d.ts.map +1 -0
- package/dist/src/planner/building/dml-target.js +282 -0
- package/dist/src/planner/building/dml-target.js.map +1 -0
- package/dist/src/planner/building/drop-index.d.ts.map +1 -1
- package/dist/src/planner/building/drop-index.js +4 -1
- package/dist/src/planner/building/drop-index.js.map +1 -1
- package/dist/src/planner/building/drop-view.d.ts.map +1 -1
- package/dist/src/planner/building/drop-view.js +4 -2
- package/dist/src/planner/building/drop-view.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +60 -21
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +160 -129
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts +45 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +257 -88
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
- package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
- package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/building/materialized-view.d.ts +16 -0
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
- package/dist/src/planner/building/materialized-view.js +57 -0
- package/dist/src/planner/building/materialized-view.js.map +1 -0
- package/dist/src/planner/building/returning-star.d.ts +32 -0
- package/dist/src/planner/building/returning-star.d.ts.map +1 -0
- package/dist/src/planner/building/returning-star.js +45 -0
- package/dist/src/planner/building/returning-star.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +47 -0
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +84 -11
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +10 -2
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +7 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +6 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +18 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +30 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +8 -2
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +26 -4
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +8 -5
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +164 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/set-object-tags.d.ts +7 -0
- package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
- package/dist/src/planner/building/set-object-tags.js +38 -0
- package/dist/src/planner/building/set-object-tags.js.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.js +37 -0
- package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
- package/dist/src/planner/building/update.d.ts +18 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +134 -58
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
- package/dist/src/planner/building/view-mutation-builder.js +1158 -0
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
- package/dist/src/planner/building/with.d.ts +11 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +48 -10
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +83 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +114 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +38 -4
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -6
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +2 -1
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +39 -1
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +18 -2
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +131 -0
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
- package/dist/src/planner/mutation/backward-body.js +135 -0
- package/dist/src/planner/mutation/backward-body.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +364 -0
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
- package/dist/src/planner/mutation/decomposition.d.ts +273 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
- package/dist/src/planner/mutation/decomposition.js +1719 -0
- package/dist/src/planner/mutation/decomposition.js.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.js +745 -0
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
- package/dist/src/planner/mutation/multi-source.d.ts +568 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/multi-source.js +2915 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.js +31 -0
- package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts +97 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
- package/dist/src/planner/mutation/propagate.js +220 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -0
- package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
- package/dist/src/planner/mutation/scope-transform.js +574 -0
- package/dist/src/planner/mutation/scope-transform.js.map +1 -0
- package/dist/src/planner/mutation/set-op.d.ts +242 -0
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
- package/dist/src/planner/mutation/set-op.js +1687 -0
- package/dist/src/planner/mutation/set-op.js.map +1 -0
- package/dist/src/planner/mutation/single-source.d.ts +261 -0
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/single-source.js +1096 -0
- package/dist/src/planner/mutation/single-source.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.js +3 -3
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +5 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +27 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
- package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/analyze-node.js +18 -1
- package/dist/src/planner/nodes/analyze-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +33 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +2 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +4 -1
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +32 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +27 -3
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
- package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
- package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +63 -13
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +41 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +78 -8
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +33 -6
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +124 -9
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +4 -5
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +2 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +9 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +265 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +12 -0
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +14 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +85 -11
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +62 -27
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +7 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +10 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +20 -0
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +71 -14
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
- package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
- package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
- package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +291 -18
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +7 -6
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +2 -0
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +18 -2
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +23 -3
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +6 -0
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/values-node.d.ts +1 -0
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +16 -6
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/view-mutation-node.js +273 -0
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
- package/dist/src/planner/nodes/window-function.d.ts +17 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +15 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js +2 -2
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +372 -39
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +1 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +9 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +38 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +19 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +9 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +12 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +4 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +9 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +4 -4
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +14 -0
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +66 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +177 -43
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +396 -101
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +27 -1
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +80 -6
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +81 -12
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
- package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
- package/dist/src/planner/util/set-op-wrapper.js +82 -0
- package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +13 -1
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +7 -1
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +30 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +29 -4
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +38 -5
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +10 -8
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +664 -108
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +2 -1
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +18 -5
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
- package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
- package/dist/src/runtime/emit/asserted-keys.js +13 -0
- package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +24 -19
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +5 -9
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/block.d.ts.map +1 -1
- package/dist/src/runtime/emit/block.js +11 -2
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +8 -2
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +15 -0
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +8 -0
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +16 -1
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +413 -193
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +10 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +17 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/envelope-scan.js +22 -0
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts +10 -2
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +128 -38
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view.js +187 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +15 -3
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +10 -5
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +101 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.js +57 -0
- package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +140 -24
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +110 -5
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +34 -6
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
- package/dist/src/runtime/emit/view-mutation.js +299 -0
- package/dist/src/runtime/emit/view-mutation.js.map +1 -0
- package/dist/src/runtime/emit/window.js +29 -5
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +580 -172
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +5 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +17 -1
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +10 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/basis-backfill.d.ts +63 -0
- package/dist/src/schema/basis-backfill.d.ts.map +1 -0
- package/dist/src/schema/basis-backfill.js +161 -0
- package/dist/src/schema/basis-backfill.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +115 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +249 -22
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +42 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/column.d.ts +16 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +182 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -0
- package/dist/src/schema/constraint-builder.js +424 -0
- package/dist/src/schema/constraint-builder.js.map +1 -0
- package/dist/src/schema/ddl-generator.d.ts +86 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +316 -20
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +51 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +61 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +106 -0
- package/dist/src/schema/derivation.d.ts.map +1 -0
- package/dist/src/schema/derivation.js +25 -0
- package/dist/src/schema/derivation.js.map +1 -0
- package/dist/src/schema/function.d.ts +13 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-ack.d.ts +90 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -0
- package/dist/src/schema/lens-ack.js +361 -0
- package/dist/src/schema/lens-ack.js.map +1 -0
- package/dist/src/schema/lens-compiler.d.ts +62 -0
- package/dist/src/schema/lens-compiler.d.ts.map +1 -0
- package/dist/src/schema/lens-compiler.js +1594 -0
- package/dist/src/schema/lens-compiler.js.map +1 -0
- package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
- package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
- package/dist/src/schema/lens-fk-discovery.js +336 -0
- package/dist/src/schema/lens-fk-discovery.js.map +1 -0
- package/dist/src/schema/lens-prover.d.ts +336 -0
- package/dist/src/schema/lens-prover.d.ts.map +1 -0
- package/dist/src/schema/lens-prover.js +1988 -0
- package/dist/src/schema/lens-prover.js.map +1 -0
- package/dist/src/schema/lens.d.ts +254 -0
- package/dist/src/schema/lens.d.ts.map +1 -0
- package/dist/src/schema/lens.js +21 -0
- package/dist/src/schema/lens.js.map +1 -0
- package/dist/src/schema/manager.d.ts +676 -18
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +1573 -238
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
- package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
- package/dist/src/schema/mapping-advertisement-tags.js +216 -0
- package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
- package/dist/src/schema/rename-rewriter.d.ts +45 -4
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +412 -19
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
- package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags-policy.js +34 -0
- package/dist/src/schema/reserved-tags-policy.js.map +1 -0
- package/dist/src/schema/reserved-tags.d.ts +170 -0
- package/dist/src/schema/reserved-tags.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags.js +507 -0
- package/dist/src/schema/reserved-tags.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts +158 -2
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +1460 -78
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +8 -3
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +22 -2
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/schema.d.ts +25 -1
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +36 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +259 -10
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +309 -26
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +78 -0
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
- package/dist/src/schema/unique-enforcement.js +93 -0
- package/dist/src/schema/unique-enforcement.js.map +1 -0
- package/dist/src/schema/view.d.ts +83 -2
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +67 -1
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/schema/window-function.d.ts +9 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/util/comparison.d.ts +24 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +34 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/mutation-statement.d.ts.map +1 -1
- package/dist/src/util/mutation-statement.js +4 -1
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/dist/src/util/serialization.d.ts +9 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +26 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/backing-host.d.ts +286 -0
- package/dist/src/vtab/backing-host.d.ts.map +1 -0
- package/dist/src/vtab/backing-host.js +118 -0
- package/dist/src/vtab/backing-host.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +21 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -5
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
- package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
- package/dist/src/vtab/mapping-advertisement.js +2 -0
- package/dist/src/vtab/mapping-advertisement.js.map +1 -0
- package/dist/src/vtab/memory/index.d.ts +64 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +119 -12
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +38 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +112 -24
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +1050 -91
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +5 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +17 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +82 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +15 -5
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/types.d.ts +20 -2
- package/dist/src/vtab/memory/types.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +46 -24
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -5
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +203 -4
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -0
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +6 -5
|
@@ -7,11 +7,12 @@ import { BUILTIN_FUNCTIONS } from '../func/builtins/index.js';
|
|
|
7
7
|
import { createScalarFunction, createAggregateFunction } from '../func/registration.js';
|
|
8
8
|
import { FunctionFlags } from '../common/constants.js';
|
|
9
9
|
import { MemoryTableModule } from '../vtab/memory/module.js';
|
|
10
|
-
import { BINARY_COLLATION, NOCASE_COLLATION, RTRIM_COLLATION } from '../util/comparison.js';
|
|
10
|
+
import { BINARY_COLLATION, NOCASE_COLLATION, RTRIM_COLLATION, normalizeCollationName } from '../util/comparison.js';
|
|
11
11
|
import { BUILTIN_NORMALIZERS } from '../util/key-serializer.js';
|
|
12
12
|
import { Parser } from '../parser/parser.js';
|
|
13
13
|
import { buildBlock } from '../planner/building/block.js';
|
|
14
14
|
import { emitPlanNode } from '../runtime/emitters.js';
|
|
15
|
+
import { refreshMaintainedTable } from '../runtime/emit/materialized-view.js';
|
|
15
16
|
import { Scheduler } from '../runtime/scheduler.js';
|
|
16
17
|
import { createStrictRowContextMap, wrapTableContextsStrict } from '../runtime/strict-fork.js';
|
|
17
18
|
import { BuildTimeDependencyTracker } from '../planner/planning-context.js';
|
|
@@ -23,6 +24,7 @@ import { EmissionContext } from '../runtime/emission-context.js';
|
|
|
23
24
|
import { Optimizer, DEFAULT_TUNING } from '../planner/optimizer.js';
|
|
24
25
|
import { registerBuiltinWindowFunctions } from '../func/builtins/builtin-window-functions.js';
|
|
25
26
|
import { DatabaseOptionsManager } from './database-options.js';
|
|
27
|
+
import { MAINTENANCE_REBUILD_ROW_THRESHOLD } from '../planner/cost/index.js';
|
|
26
28
|
import { DeclaredSchemaManager } from '../schema/declared-schema-manager.js';
|
|
27
29
|
import { DeferredConstraintQueue } from '../runtime/deferred-constraint-queue.js';
|
|
28
30
|
import { registerType as registerTypeInRegistry } from '../types/registry.js';
|
|
@@ -31,8 +33,10 @@ import { rowToObject } from './utils.js';
|
|
|
31
33
|
import { wrapAsyncIterator } from '../util/async-iterator.js';
|
|
32
34
|
import { DatabaseEventEmitter, } from './database-events.js';
|
|
33
35
|
import { TransactionManager } from './database-transaction.js';
|
|
36
|
+
import { ingestExternalRowChangeBatch } from './database-external-changes.js';
|
|
34
37
|
import { AssertionEvaluator } from './database-assertions.js';
|
|
35
38
|
import { WatcherManager } from './database-watchers.js';
|
|
39
|
+
import { MaterializedViewManager } from './database-materialized-views.js';
|
|
36
40
|
import { tryGetEventEmitter } from '../vtab/events.js';
|
|
37
41
|
import { Table } from './table-handle.js';
|
|
38
42
|
const log = createLogger('core:database');
|
|
@@ -65,6 +69,14 @@ export class Database {
|
|
|
65
69
|
* transaction state, matching SQLite's behavior of serializing writes.
|
|
66
70
|
*/
|
|
67
71
|
execMutex = Promise.resolve();
|
|
72
|
+
/**
|
|
73
|
+
* Depth of currently-held exec-mutex acquisitions. >0 while a statement
|
|
74
|
+
* (`exec`/`eval`), an external-change ingest, or an MV-refresh sweep holds the
|
|
75
|
+
* mutex. Read via {@link _isExecuting} so a re-entrant caller (e.g. a module
|
|
76
|
+
* `notifyLensDeployment` listener that would itself re-enter the engine) can
|
|
77
|
+
* detect it must defer rather than deadlock on the held mutex.
|
|
78
|
+
*/
|
|
79
|
+
execMutexDepth = 0;
|
|
68
80
|
/** Database-level event emitter for unified reactivity */
|
|
69
81
|
eventEmitter = new DatabaseEventEmitter();
|
|
70
82
|
/** Transaction management */
|
|
@@ -73,9 +85,15 @@ export class Database {
|
|
|
73
85
|
assertionEvaluator;
|
|
74
86
|
/** Post-commit watcher dispatch */
|
|
75
87
|
watcherManager;
|
|
76
|
-
/**
|
|
77
|
-
|
|
78
|
-
|
|
88
|
+
/** Materialized-view schema-change staleness tracking */
|
|
89
|
+
materializedViewManager;
|
|
90
|
+
/** Per-database collation registry — comparator + optional key normalizer +
|
|
91
|
+
* optional REPLICABLE assertion. The normalizer is required for index
|
|
92
|
+
* participation; comparator-only collations may still be used in ORDER BY but
|
|
93
|
+
* cannot back a compound index. `replicable` (stamped `true` on the built-ins,
|
|
94
|
+
* opt-in for a custom collation) is consulted only by the materialized-view
|
|
95
|
+
* replicable-collation gate when the backing host demands it
|
|
96
|
+
* (see {@link _isCollationReplicable}). */
|
|
79
97
|
collations = new Map();
|
|
80
98
|
constructor() {
|
|
81
99
|
this.schemaManager = new SchemaManager(this);
|
|
@@ -96,6 +114,7 @@ export class Database {
|
|
|
96
114
|
this.transactionManager = new TransactionManager(this);
|
|
97
115
|
this.assertionEvaluator = new AssertionEvaluator(this);
|
|
98
116
|
this.watcherManager = new WatcherManager(this);
|
|
117
|
+
this.materializedViewManager = new MaterializedViewManager(this);
|
|
99
118
|
// Set up option change listeners
|
|
100
119
|
this.setupOptionListeners();
|
|
101
120
|
}
|
|
@@ -192,6 +211,21 @@ export class Database {
|
|
|
192
211
|
log('Default column nullability changed to: %s', value);
|
|
193
212
|
}
|
|
194
213
|
});
|
|
214
|
+
this.options.registerOption('default_collation', {
|
|
215
|
+
type: 'string',
|
|
216
|
+
defaultValue: 'BINARY',
|
|
217
|
+
description: 'Default declared collation for columns with no explicit COLLATE (e.g. "BINARY", "NOCASE", "RTRIM", or any registered collation). Create-time authoring convenience only; the catalog stores concrete collations and persisted DDL always carries an explicit non-BINARY COLLATE.',
|
|
218
|
+
onChange: (event) => {
|
|
219
|
+
const value = event.newValue;
|
|
220
|
+
const normalized = normalizeCollationName(value);
|
|
221
|
+
// Validate at set time so a typo fails loudly, not at first comparison.
|
|
222
|
+
// The options framework rolls the value back when onChange throws.
|
|
223
|
+
if (this._getCollation(normalized) === undefined) {
|
|
224
|
+
throw new QuereusError(`Unknown collation '${value}' for default_collation`, StatusCode.ERROR);
|
|
225
|
+
}
|
|
226
|
+
log('Default collation changed to: %s', normalized);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
195
229
|
this.options.registerOption('schema_path', {
|
|
196
230
|
type: 'string',
|
|
197
231
|
defaultValue: 'main',
|
|
@@ -213,13 +247,49 @@ export class Database {
|
|
|
213
247
|
aliases: ['fk_enforcement'],
|
|
214
248
|
description: 'Enable foreign key constraint enforcement. When omitted, ON DELETE / ON UPDATE default to RESTRICT.',
|
|
215
249
|
});
|
|
250
|
+
this.options.registerOption('nondeterministic_schema', {
|
|
251
|
+
type: 'boolean',
|
|
252
|
+
defaultValue: false,
|
|
253
|
+
aliases: ['allow_nondeterministic_schema_expressions'],
|
|
254
|
+
description: 'When true, permit non-deterministic expressions in DEFAULT, CHECK, and GENERATED ALWAYS AS clauses. ' +
|
|
255
|
+
'Capture happens at the resolved-row frontier in vtab.update(); replay applies module-layer writes without re-evaluating constraints. ' +
|
|
256
|
+
'Defaults to false (strict rejection) for backward compatibility.',
|
|
257
|
+
onChange: (event) => {
|
|
258
|
+
log('nondeterministic_schema changed to: %s', event.newValue);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
this.options.registerOption('materialized_view_rebuild_row_threshold', {
|
|
262
|
+
type: 'number',
|
|
263
|
+
defaultValue: MAINTENANCE_REBUILD_ROW_THRESHOLD,
|
|
264
|
+
description: 'Largest source-row count for which a materialized view whose only sound maintenance ' +
|
|
265
|
+
'strategy is a full body rebuild is accepted at create. A full-rebuild MV over a larger source ' +
|
|
266
|
+
'is rejected (every write would re-scan the whole source). Set to 0 to disable the size reject ' +
|
|
267
|
+
'(accept any size). The check uses the largest participating source for a multi-source body.',
|
|
268
|
+
onChange: (event) => {
|
|
269
|
+
// Validate at set time so a bad value fails loudly; the options framework
|
|
270
|
+
// rolls the value back when onChange throws.
|
|
271
|
+
const value = event.newValue;
|
|
272
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
273
|
+
throw new QuereusError(`Invalid materialized_view_rebuild_row_threshold ${event.newValue}: must be a non-negative number (0 disables the size reject)`, StatusCode.ERROR);
|
|
274
|
+
}
|
|
275
|
+
log('materialized_view_rebuild_row_threshold changed to: %s', value);
|
|
276
|
+
}
|
|
277
|
+
});
|
|
216
278
|
}
|
|
217
279
|
/** @internal Registers default built-in SQL functions */
|
|
218
280
|
registerBuiltinFunctions() {
|
|
219
281
|
const mainSchema = this.schemaManager.getMainSchema();
|
|
282
|
+
// Built-ins auto-qualify as REPLICABLE: Quereus implements its own collation,
|
|
283
|
+
// case-folding, and numeric formatting, so a deterministic builtin is
|
|
284
|
+
// bit-identical across peers' JS engines (see BaseFunctionSchema.replicable).
|
|
285
|
+
// This is the single seam that *knows* a schema is a builtin, so stamping here
|
|
286
|
+
// auto-qualifies all of them without editing ~100 definitions and without
|
|
287
|
+
// defaulting UDFs to replicable. Non-deterministic builtins (random, now, …) are
|
|
288
|
+
// stamped too — harmless, since the determinism gate rejects them first. Spread a
|
|
289
|
+
// COPY so the shared exported BUILTIN_FUNCTIONS constants are never mutated.
|
|
220
290
|
BUILTIN_FUNCTIONS.forEach(funcDef => {
|
|
221
291
|
try {
|
|
222
|
-
mainSchema.addFunction(funcDef);
|
|
292
|
+
mainSchema.addFunction({ ...funcDef, replicable: true });
|
|
223
293
|
}
|
|
224
294
|
catch (e) {
|
|
225
295
|
errorLog(`Failed to register built-in function ${funcDef.name}/${funcDef.numArgs}: %O`, e);
|
|
@@ -230,10 +300,15 @@ export class Database {
|
|
|
230
300
|
/** @internal Registers default collation sequences */
|
|
231
301
|
registerDefaultCollations() {
|
|
232
302
|
// Register the built-in collations into per-instance registry, paired
|
|
233
|
-
// with their key normalizers so they can back compound indexes.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
303
|
+
// with their key normalizers so they can back compound indexes. Stamped
|
|
304
|
+
// `replicable: true` — the built-ins are pure JS string operations (`<`/`>`,
|
|
305
|
+
// locale-independent `toLowerCase()`, ASCII-space trim), so they are
|
|
306
|
+
// bit-identical across peers' JS engines, exactly parallel to why built-in
|
|
307
|
+
// functions auto-qualify (see registerBuiltinFunctions). This is the single
|
|
308
|
+
// seam that *knows* a collation is a builtin.
|
|
309
|
+
this.collations.set('BINARY', { comparator: BINARY_COLLATION, normalizer: BUILTIN_NORMALIZERS.BINARY, replicable: true });
|
|
310
|
+
this.collations.set('NOCASE', { comparator: NOCASE_COLLATION, normalizer: BUILTIN_NORMALIZERS.NOCASE, replicable: true });
|
|
311
|
+
this.collations.set('RTRIM', { comparator: RTRIM_COLLATION, normalizer: BUILTIN_NORMALIZERS.RTRIM, replicable: true });
|
|
237
312
|
log("Default collations registered (BINARY, NOCASE, RTRIM)");
|
|
238
313
|
}
|
|
239
314
|
/**
|
|
@@ -304,7 +379,32 @@ export class Database {
|
|
|
304
379
|
releaseMutex = resolve;
|
|
305
380
|
});
|
|
306
381
|
await previousMutex;
|
|
307
|
-
|
|
382
|
+
// Mark the mutex held from acquisition until the returned release runs, so a
|
|
383
|
+
// re-entrant caller can detect it (see _isExecuting). The wrapper decrements
|
|
384
|
+
// at most once even if release is invoked more than once.
|
|
385
|
+
this.execMutexDepth++;
|
|
386
|
+
let released = false;
|
|
387
|
+
return () => {
|
|
388
|
+
if (!released) {
|
|
389
|
+
released = true;
|
|
390
|
+
this.execMutexDepth--;
|
|
391
|
+
}
|
|
392
|
+
releaseMutex();
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* True while the exec mutex is held — i.e. a statement (`exec`/`eval`), an
|
|
397
|
+
* external-change ingest, or an MV-refresh sweep is in flight. A caller that
|
|
398
|
+
* would re-enter the engine (acquire the mutex again) from inside such a context
|
|
399
|
+
* — e.g. a `notifyLensDeployment` module listener whose work calls
|
|
400
|
+
* `ingestExternalRowChanges` — MUST check this and defer that work to run after
|
|
401
|
+
* the current statement releases the mutex; re-entering synchronously deadlocks
|
|
402
|
+
* on the chained mutex. Deliberately part of the consumable type surface (kept out
|
|
403
|
+
* of the internal-only set) so a basis-backing host in another package can make
|
|
404
|
+
* that defer-vs-await decision.
|
|
405
|
+
*/
|
|
406
|
+
_isExecuting() {
|
|
407
|
+
return this.execMutexDepth > 0;
|
|
308
408
|
}
|
|
309
409
|
/**
|
|
310
410
|
* Executes a function with the execution mutex held.
|
|
@@ -631,6 +731,88 @@ export class Database {
|
|
|
631
731
|
hasSchemaListeners() {
|
|
632
732
|
return this.eventEmitter.hasSchemaListeners();
|
|
633
733
|
}
|
|
734
|
+
/**
|
|
735
|
+
* @internal Whether the engine must generate/collect data-change events for
|
|
736
|
+
* this statement — true when any `onDataChange` OR `onTransactionCommit`
|
|
737
|
+
* listener is registered. The DML executor's auto-event gate consults this so a
|
|
738
|
+
* consumer subscribed only to the grouped transaction-commit channel still gets
|
|
739
|
+
* data events collected.
|
|
740
|
+
*/
|
|
741
|
+
_needsDataEvents() {
|
|
742
|
+
return this.eventEmitter.needsDataEvents();
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* @internal Whether the engine must generate/collect schema-change events —
|
|
746
|
+
* true when any `onSchemaChange` OR `onTransactionCommit` listener is
|
|
747
|
+
* registered. Companion to {@link _needsDataEvents}; consulted by the schema
|
|
748
|
+
* manager's auto-event gate.
|
|
749
|
+
*/
|
|
750
|
+
_needsSchemaEvents() {
|
|
751
|
+
return this.eventEmitter.needsSchemaEvents();
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* Subscribe to materialized-view key-coarsening **collision** events — the
|
|
755
|
+
* operational complement to the create-time key-coarsening warning. A
|
|
756
|
+
* {@link MaintenanceCollisionEvent} fires whenever row-time maintenance
|
|
757
|
+
* LWW-merges two distinct source-key tuples under one coarsened backing key K′
|
|
758
|
+
* (`docs/materialized-views.md` § Coarsened backing keys). Events share the
|
|
759
|
+
* transaction-batching discipline of the data/schema channels — delivered after
|
|
760
|
+
* the commit that realized the merge, dropped on rollback.
|
|
761
|
+
*
|
|
762
|
+
* @param listener Callback invoked for each committed collision
|
|
763
|
+
* @returns Unsubscribe function
|
|
764
|
+
*
|
|
765
|
+
* @example
|
|
766
|
+
* ```typescript
|
|
767
|
+
* const off = db.onMaintenanceCollision((e) => {
|
|
768
|
+
* console.warn(`coarsening collision on ${e.schemaName}.${e.tableName} ` +
|
|
769
|
+
* `at key ${JSON.stringify(e.key)} (columns: ${e.weakenedColumns.join(', ')})`);
|
|
770
|
+
* });
|
|
771
|
+
* ```
|
|
772
|
+
*/
|
|
773
|
+
onMaintenanceCollision(listener) {
|
|
774
|
+
this.checkOpen();
|
|
775
|
+
return this.eventEmitter.onMaintenanceCollision(listener);
|
|
776
|
+
}
|
|
777
|
+
/**
|
|
778
|
+
* Read-only snapshot of the cumulative committed key-coarsening collision
|
|
779
|
+
* counter, keyed by lowercased qualified `schema.table` of the maintained
|
|
780
|
+
* table. Reflects only collisions that committed (consistent with event
|
|
781
|
+
* delivery) and is maintained whether or not a listener was ever subscribed.
|
|
782
|
+
*/
|
|
783
|
+
getMaterializedViewCollisionStats() {
|
|
784
|
+
this.checkOpen();
|
|
785
|
+
return this.eventEmitter.getMaterializedViewCollisionStats();
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* Subscribe to grouped per-transaction commit batches — the authoritative
|
|
789
|
+
* "one logical transaction = one group" boundary. A
|
|
790
|
+
* {@link TransactionCommitBatch} fires **once** per committed transaction,
|
|
791
|
+
* carrying every data and schema event of that transaction across **all**
|
|
792
|
+
* tables, in flush order. Unlike the per-event {@link onDataChange} /
|
|
793
|
+
* {@link onSchemaChange} channels (which this does not replace — it is purely
|
|
794
|
+
* additive), a single subscription receives the whole transaction as one unit,
|
|
795
|
+
* which is what a consumer grouping changes by transaction (e.g. assigning one
|
|
796
|
+
* HLC per transaction) needs. Dropped on rollback; never fires for a
|
|
797
|
+
* transaction that produced no data/schema events.
|
|
798
|
+
*
|
|
799
|
+
* @param listener Callback invoked once per committed transaction
|
|
800
|
+
* @returns Unsubscribe function
|
|
801
|
+
*
|
|
802
|
+
* @example
|
|
803
|
+
* ```typescript
|
|
804
|
+
* const off = db.onTransactionCommit((batch) => {
|
|
805
|
+
* // All changes of one transaction, across all tables, in order.
|
|
806
|
+
* const local = batch.dataEvents.filter((e) => !e.remote);
|
|
807
|
+
* console.log(`committed ${local.length} local row changes, ` +
|
|
808
|
+
* `${batch.schemaEvents.length} schema changes`);
|
|
809
|
+
* });
|
|
810
|
+
* ```
|
|
811
|
+
*/
|
|
812
|
+
onTransactionCommit(listener) {
|
|
813
|
+
this.checkOpen();
|
|
814
|
+
return this.eventEmitter.onTransactionCommit(listener);
|
|
815
|
+
}
|
|
634
816
|
/**
|
|
635
817
|
* Get the internal event emitter for advanced use cases.
|
|
636
818
|
* @internal
|
|
@@ -688,6 +870,8 @@ export class Database {
|
|
|
688
870
|
this.assertionEvaluator.dispose();
|
|
689
871
|
// Clean up watcher manager (dispose all subscriptions + schema listener)
|
|
690
872
|
this.watcherManager.dispose();
|
|
873
|
+
// Clean up materialized-view manager (unsubscribe schema listener)
|
|
874
|
+
this.materializedViewManager.dispose();
|
|
691
875
|
// Clear schemas, ensuring VTabs are potentially disconnected
|
|
692
876
|
// This will also call destroy on VTabs via SchemaManager.clearAll -> schema.clearTables -> schemaManager.dropTable
|
|
693
877
|
this.schemaManager.clearAll();
|
|
@@ -741,7 +925,7 @@ export class Database {
|
|
|
741
925
|
this.checkOpen();
|
|
742
926
|
const baseFlags = (options.deterministic ? FunctionFlags.DETERMINISTIC : 0) | FunctionFlags.UTF8;
|
|
743
927
|
const flags = options.flags ?? baseFlags;
|
|
744
|
-
const schema = createScalarFunction({ name, numArgs: options.numArgs, flags }, func);
|
|
928
|
+
const schema = createScalarFunction({ name, numArgs: options.numArgs, flags, replicable: options.replicable }, func);
|
|
745
929
|
this.registerFunctionWithErrorHandling('scalar', name, options.numArgs, () => {
|
|
746
930
|
this.schemaManager.getMainSchema().addFunction(schema);
|
|
747
931
|
});
|
|
@@ -757,7 +941,7 @@ export class Database {
|
|
|
757
941
|
createAggregateFunction(name, options, stepFunc, finalFunc) {
|
|
758
942
|
this.checkOpen();
|
|
759
943
|
const flags = options.flags ?? FunctionFlags.UTF8;
|
|
760
|
-
const schema = createAggregateFunction({ name, numArgs: options.numArgs, flags, initialValue: options.initialState }, stepFunc, finalFunc);
|
|
944
|
+
const schema = createAggregateFunction({ name, numArgs: options.numArgs, flags, replicable: options.replicable, initialValue: options.initialState }, stepFunc, finalFunc);
|
|
761
945
|
this.registerFunctionWithErrorHandling('aggregate', name, options.numArgs, () => {
|
|
762
946
|
this.schemaManager.getMainSchema().addFunction(schema);
|
|
763
947
|
});
|
|
@@ -881,10 +1065,17 @@ export class Database {
|
|
|
881
1065
|
* Registers a user-defined collation sequence.
|
|
882
1066
|
* @param name The name of the collation sequence (case-insensitive).
|
|
883
1067
|
* @param func The comparison function (a, b) => number (-1, 0, 1).
|
|
884
|
-
* @param
|
|
885
|
-
*
|
|
886
|
-
*
|
|
887
|
-
*
|
|
1068
|
+
* @param optionsOrNormalizer Either a bare key normalizer (the legacy positional
|
|
1069
|
+
* form) or an options object `{ normalizer?, replicable? }`:
|
|
1070
|
+
* - `normalizer` — a function whose output equality partitions strings into the
|
|
1071
|
+
* same equivalence classes as `func` (modulo total ordering). Required to make
|
|
1072
|
+
* this collation usable as the key for a compound index; ORDER BY / standalone
|
|
1073
|
+
* comparisons work without it.
|
|
1074
|
+
* - `replicable` — assert this collation is **bit-identical across peers,
|
|
1075
|
+
* platforms, and app versions** (not merely deterministic). Consulted only by
|
|
1076
|
+
* the materialized-view replicable-collation gate when a backing host declares
|
|
1077
|
+
* `requiresReplicableDerivations`. Defaults to `false` — the conservative
|
|
1078
|
+
* default for a custom collation (built-ins auto-qualify).
|
|
888
1079
|
* @example
|
|
889
1080
|
* // Example: Create a custom collation for phone numbers
|
|
890
1081
|
* db.registerCollation('PHONENUMBER', (a, b) => {
|
|
@@ -894,11 +1085,14 @@ export class Database {
|
|
|
894
1085
|
* return numA < numB ? -1 : numA > numB ? 1 : 0;
|
|
895
1086
|
* }, (s) => s.replace(/\D/g, ''));
|
|
896
1087
|
*
|
|
1088
|
+
* // A locale-independent custom collation a replicating backing can host:
|
|
1089
|
+
* db.registerCollation('CODEPOINT', cmp, { replicable: true });
|
|
1090
|
+
*
|
|
897
1091
|
* // Then use it in SQL:
|
|
898
1092
|
* // SELECT * FROM contacts ORDER BY phone COLLATE PHONENUMBER;
|
|
899
1093
|
* // CREATE INDEX phone_idx ON contacts(phone COLLATE PHONENUMBER);
|
|
900
1094
|
*/
|
|
901
|
-
registerCollation(name, func,
|
|
1095
|
+
registerCollation(name, func, optionsOrNormalizer) {
|
|
902
1096
|
this.checkOpen();
|
|
903
1097
|
if (typeof name !== 'string' || !name) {
|
|
904
1098
|
throw new MisuseError('registerCollation: name must be a non-empty string');
|
|
@@ -906,6 +1100,21 @@ export class Database {
|
|
|
906
1100
|
if (typeof func !== 'function') {
|
|
907
1101
|
throw new MisuseError('registerCollation: func must be a function');
|
|
908
1102
|
}
|
|
1103
|
+
// A function-typed third arg is the legacy normalizer-only path (existing call
|
|
1104
|
+
// sites unchanged, `replicable` defaults to false); an object reads its fields;
|
|
1105
|
+
// any other non-undefined third arg is a misused legacy normalizer.
|
|
1106
|
+
let normalizer;
|
|
1107
|
+
let replicable = false;
|
|
1108
|
+
if (typeof optionsOrNormalizer === 'function') {
|
|
1109
|
+
normalizer = optionsOrNormalizer;
|
|
1110
|
+
}
|
|
1111
|
+
else if (typeof optionsOrNormalizer === 'object' && optionsOrNormalizer !== null) {
|
|
1112
|
+
normalizer = optionsOrNormalizer.normalizer;
|
|
1113
|
+
replicable = optionsOrNormalizer.replicable === true;
|
|
1114
|
+
}
|
|
1115
|
+
else if (optionsOrNormalizer !== undefined) {
|
|
1116
|
+
throw new MisuseError('registerCollation: normalizer must be a function when supplied');
|
|
1117
|
+
}
|
|
909
1118
|
if (normalizer !== undefined && typeof normalizer !== 'function') {
|
|
910
1119
|
throw new MisuseError('registerCollation: normalizer must be a function when supplied');
|
|
911
1120
|
}
|
|
@@ -913,10 +1122,13 @@ export class Database {
|
|
|
913
1122
|
if (this.collations.has(upperName)) {
|
|
914
1123
|
log('Overwriting existing collation: %s', upperName);
|
|
915
1124
|
}
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
1125
|
+
const entry = { comparator: func };
|
|
1126
|
+
if (normalizer !== undefined)
|
|
1127
|
+
entry.normalizer = normalizer;
|
|
1128
|
+
if (replicable)
|
|
1129
|
+
entry.replicable = true;
|
|
1130
|
+
this.collations.set(upperName, entry);
|
|
1131
|
+
log('Registered collation: %s%s%s', upperName, normalizer !== undefined ? ' (with normalizer)' : '', replicable ? ' (replicable)' : '');
|
|
920
1132
|
}
|
|
921
1133
|
/**
|
|
922
1134
|
* Registers a custom logical type.
|
|
@@ -997,6 +1209,16 @@ export class Database {
|
|
|
997
1209
|
// resolves to the canonical built-in normalizer.
|
|
998
1210
|
return BUILTIN_NORMALIZERS[upper];
|
|
999
1211
|
}
|
|
1212
|
+
/** @internal True iff the named collation is asserted REPLICABLE — bit-identical
|
|
1213
|
+
* across peers/platforms/app-versions. Built-ins are stamped `replicable` at
|
|
1214
|
+
* registration; a custom collation opts in with `replicable: true`. An unknown
|
|
1215
|
+
* collation returns `false` defensively (an unknown collation in a derivation
|
|
1216
|
+
* body errors earlier at create). Consumed only by the materialized-view
|
|
1217
|
+
* replicable-collation gate when the backing host declares
|
|
1218
|
+
* `requiresReplicableDerivations`. */
|
|
1219
|
+
_isCollationReplicable(name) {
|
|
1220
|
+
return this.collations.get(name.toUpperCase())?.replicable === true;
|
|
1221
|
+
}
|
|
1000
1222
|
_queueDeferredConstraintRow(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor) {
|
|
1001
1223
|
this.deferredConstraints.enqueue(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor);
|
|
1002
1224
|
}
|
|
@@ -1305,8 +1527,15 @@ export class Database {
|
|
|
1305
1527
|
_findFunction(funcName, nArg) {
|
|
1306
1528
|
return this.schemaManager.findFunction(funcName, nArg);
|
|
1307
1529
|
}
|
|
1308
|
-
/**
|
|
1309
|
-
|
|
1530
|
+
/**
|
|
1531
|
+
* @internal Build a fresh top-level {@link PlanningContext} (global → parameter scope,
|
|
1532
|
+
* default schema path, an empty dependency tracker). The shared seam {@link _buildPlan}
|
|
1533
|
+
* builds its planning context from, and a throwaway context the static updateability
|
|
1534
|
+
* surfaces (`func/builtins/schema.ts`) use to plan a view body / run an insertability
|
|
1535
|
+
* probe — whose `schemaDependencies` are discarded (the read TVF already discards the body
|
|
1536
|
+
* plan's), so a fresh tracker per call is correct.
|
|
1537
|
+
*/
|
|
1538
|
+
_buildProbeContext(paramsOrTypes) {
|
|
1310
1539
|
const globalScope = new GlobalScope(this.schemaManager);
|
|
1311
1540
|
// If we received parameter values, infer their types
|
|
1312
1541
|
// If we received explicit parameter types, use them as-is
|
|
@@ -1317,21 +1546,24 @@ export class Database {
|
|
|
1317
1546
|
const parameterScope = new ParameterScope(globalScope, parameterTypes);
|
|
1318
1547
|
// Get default schema path from options
|
|
1319
1548
|
const schemaPath = parseSchemaPath(this.options.getStringOption('schema_path'));
|
|
1320
|
-
|
|
1321
|
-
const ctx = {
|
|
1549
|
+
return {
|
|
1322
1550
|
db: this,
|
|
1323
1551
|
schemaManager: this.schemaManager,
|
|
1324
1552
|
parameters: paramsOrTypes instanceof Map ? {} : (paramsOrTypes ?? {}),
|
|
1325
1553
|
scope: parameterScope,
|
|
1326
1554
|
cteNodes: new Map(),
|
|
1327
|
-
schemaDependencies,
|
|
1555
|
+
schemaDependencies: new BuildTimeDependencyTracker(),
|
|
1328
1556
|
schemaCache: new Map(),
|
|
1329
1557
|
cteReferenceCache: new Map(),
|
|
1330
1558
|
outputScopes: new Map(),
|
|
1331
1559
|
schemaPath
|
|
1332
1560
|
};
|
|
1561
|
+
}
|
|
1562
|
+
/** @internal */
|
|
1563
|
+
_buildPlan(statements, paramsOrTypes) {
|
|
1564
|
+
const ctx = this._buildProbeContext(paramsOrTypes);
|
|
1333
1565
|
const plan = buildBlock(ctx, statements);
|
|
1334
|
-
return { plan, schemaDependencies };
|
|
1566
|
+
return { plan, schemaDependencies: ctx.schemaDependencies };
|
|
1335
1567
|
}
|
|
1336
1568
|
/**
|
|
1337
1569
|
* @internal Registers an active VirtualTable connection for transaction management.
|
|
@@ -1453,8 +1685,36 @@ export class Database {
|
|
|
1453
1685
|
if (!this.isOpen)
|
|
1454
1686
|
throw new MisuseError("Database is closed");
|
|
1455
1687
|
}
|
|
1456
|
-
async runGlobalAssertions() {
|
|
1457
|
-
await this.assertionEvaluator.runGlobalAssertions();
|
|
1688
|
+
async runGlobalAssertions(sink) {
|
|
1689
|
+
await this.assertionEvaluator.runGlobalAssertions(sink);
|
|
1690
|
+
}
|
|
1691
|
+
/** @internal Install (or clear, with `null`) the report-mode sink the next
|
|
1692
|
+
* commit's global-assertion pass collects into instead of throwing. Used by
|
|
1693
|
+
* the external-row ingestion seam around its implicit commit; see
|
|
1694
|
+
* {@link ingestExternalRowChanges} and `database-transaction.ts`. */
|
|
1695
|
+
_setPendingCommitAssertionSink(sink) {
|
|
1696
|
+
this.transactionManager.setPendingCommitAssertionSink(sink);
|
|
1697
|
+
}
|
|
1698
|
+
/** @internal Apply-mode RESTRICT suppression flag — see {@link _setFkRestrictSuppressed}. */
|
|
1699
|
+
_fkRestrictSuppressed = false;
|
|
1700
|
+
/** @internal Apply-mode RESTRICT suppression. While set, the parent-side FK
|
|
1701
|
+
* RESTRICT pre-checks ({@link assertTransitiveRestrictsForParentMutation} and its
|
|
1702
|
+
* callees) early-return — the trust-the-origin external-row apply path: the origin
|
|
1703
|
+
* already enforced RESTRICT at its own commit, so re-enforcing it on the receiver
|
|
1704
|
+
* would wedge the sync stream. Cascade / set-null / set-default propagation is
|
|
1705
|
+
* unaffected. Set for the duration of an apply batch (mutex held, so no concurrent
|
|
1706
|
+
* statement observes it) and honored by every nested cascade DML and MV-maintenance
|
|
1707
|
+
* FK pass. Returns the prior value so the caller restores it in a `finally`
|
|
1708
|
+
* (supports nesting). */
|
|
1709
|
+
_setFkRestrictSuppressed(value) {
|
|
1710
|
+
const prior = this._fkRestrictSuppressed;
|
|
1711
|
+
this._fkRestrictSuppressed = value;
|
|
1712
|
+
return prior;
|
|
1713
|
+
}
|
|
1714
|
+
/** @internal Whether apply-mode RESTRICT suppression is active — see
|
|
1715
|
+
* {@link _setFkRestrictSuppressed}. */
|
|
1716
|
+
_isFkRestrictSuppressed() {
|
|
1717
|
+
return this._fkRestrictSuppressed;
|
|
1458
1718
|
}
|
|
1459
1719
|
/**
|
|
1460
1720
|
* Subscribe to changes described by a {@link ChangeScope}.
|
|
@@ -1486,6 +1746,210 @@ export class Database {
|
|
|
1486
1746
|
async runPostCommitWatchers() {
|
|
1487
1747
|
await this.watcherManager.runPostCommit();
|
|
1488
1748
|
}
|
|
1749
|
+
/**
|
|
1750
|
+
* Fire all active watchers whose scope includes `schema.table`, as if the
|
|
1751
|
+
* whole table changed, **without** a local commit. For hosts whose tables
|
|
1752
|
+
* are backed by an external/replicated store (e.g. the optimystic vtab) that
|
|
1753
|
+
* learns of remote writes out-of-band, so the change never touches this
|
|
1754
|
+
* `Database`'s commit change-log and the post-commit watcher path would
|
|
1755
|
+
* otherwise never fire.
|
|
1756
|
+
*
|
|
1757
|
+
* Coarse by design: handlers receive a global (whole-table) {@link WatchEvent}
|
|
1758
|
+
* — `full` watches fire with empty `hits`; `rows`/`rowsByGroup` watches
|
|
1759
|
+
* surface all their registered literal values as possibly-changed; `groups`
|
|
1760
|
+
* fire with empty hits. Over-firing only costs the consumer an extra
|
|
1761
|
+
* re-query; it never misses a change. A no-op when no subscription matches.
|
|
1762
|
+
* Async to mirror the post-commit watcher path (handlers may be async).
|
|
1763
|
+
*
|
|
1764
|
+
* When the host has the actual row images, prefer the precise,
|
|
1765
|
+
* in-transaction {@link ingestExternalRowChanges} seam instead: row-granular
|
|
1766
|
+
* watch hits at commit, plus MV maintenance, assertion evaluation, and
|
|
1767
|
+
* opt-in FK actions.
|
|
1768
|
+
*
|
|
1769
|
+
* @param tableName The table whose watchers to fire.
|
|
1770
|
+
* @param schemaName Defaults to the current schema
|
|
1771
|
+
* (`schemaManager.getCurrentSchemaName()`).
|
|
1772
|
+
*/
|
|
1773
|
+
async notifyExternalChange(tableName, schemaName) {
|
|
1774
|
+
this.checkOpen();
|
|
1775
|
+
const schema = schemaName ?? this.schemaManager.getCurrentSchemaName();
|
|
1776
|
+
const fqName = `${schema}.${tableName}`.toLowerCase();
|
|
1777
|
+
await this.watcherManager.notifyExternalTableChange(fqName);
|
|
1778
|
+
}
|
|
1779
|
+
/**
|
|
1780
|
+
* Batch ingestion seam for externally-applied row changes: drives the
|
|
1781
|
+
* post-write pipeline — change capture (`Database.watch` post-commit
|
|
1782
|
+
* dispatch + commit-time global assertions), batch-amortized row-time
|
|
1783
|
+
* materialized-view maintenance, and opt-in parent-side FK actions — for
|
|
1784
|
+
* writes the caller has already applied directly to module storage,
|
|
1785
|
+
* bypassing the DML executor. The precise, in-transaction alternative to
|
|
1786
|
+
* the coarse whole-table {@link notifyExternalChange}.
|
|
1787
|
+
*
|
|
1788
|
+
* `changes` is a flat ordered array; same-row changes must appear in event
|
|
1789
|
+
* order (each change's `oldRow` must be the true before-image of *that*
|
|
1790
|
+
* change — the prior change's `newRow`). The FK-actions facet re-reads
|
|
1791
|
+
* post-write merged storage and is order-independent for realistic batch
|
|
1792
|
+
* shapes (see `docs/sync.md` § Transactional Integrity During Sync for the
|
|
1793
|
+
* (E)/(F) exotic-topology caveats). The seam
|
|
1794
|
+
* trusts the origin — it re-validates NOTHING (no CHECK / NOT NULL /
|
|
1795
|
+
* UNIQUE / child-side FK existence), and it does NOT emit module data
|
|
1796
|
+
* events (the external writer owns those, including the `remote` flag).
|
|
1797
|
+
*
|
|
1798
|
+
* Transaction contract: runs inside the caller's active transaction when
|
|
1799
|
+
* one exists (the reported rows must already be visible to a vtab read
|
|
1800
|
+
* within it — the residual/full-rebuild maintenance arms re-read the
|
|
1801
|
+
* source); otherwise begins an implicit transaction it commits at batch
|
|
1802
|
+
* end. The batch's DERIVED effects are atomic via a batch savepoint; a
|
|
1803
|
+
* mid-batch error unwinds them all (the externally-applied storage rows
|
|
1804
|
+
* are NOT unwound by Quereus). Serialized via the exec mutex — do NOT call
|
|
1805
|
+
* from within statement execution or vtab callbacks (deadlock); the
|
|
1806
|
+
* two-arg `_maintainRowTimeCoveringStructures` is the seam for that
|
|
1807
|
+
* context. See `docs/materialized-views.md` § External row-change
|
|
1808
|
+
* ingestion for the full contract.
|
|
1809
|
+
*
|
|
1810
|
+
* Returns the collected commit-time global-assertion violations. With the
|
|
1811
|
+
* default `assertionFailureMode: 'throw'` a violation throws (and rolls the
|
|
1812
|
+
* batch's derived effects back) so the returned list is always empty; with
|
|
1813
|
+
* `'report'` — honored only for the seam-owned implicit transaction with
|
|
1814
|
+
* capture on — a violation is collected and the batch still commits (derived
|
|
1815
|
+
* effects land, watch dispatches), so the returned list names every violated
|
|
1816
|
+
* assertion. Empty in every other case.
|
|
1817
|
+
*/
|
|
1818
|
+
async ingestExternalRowChanges(changes, options) {
|
|
1819
|
+
this.checkOpen();
|
|
1820
|
+
return ingestExternalRowChangeBatch(this, changes, options);
|
|
1821
|
+
}
|
|
1822
|
+
/** @internal Compile + register an MV for row-time write-through maintenance.
|
|
1823
|
+
* Throws on a body that is not row-time maintainable (the mandatory create-time gate). */
|
|
1824
|
+
registerMaterializedView(mv) {
|
|
1825
|
+
this.materializedViewManager.registerMaterializedView(mv);
|
|
1826
|
+
}
|
|
1827
|
+
/** @internal Detach an MV's row-time maintenance plan (DROP path). */
|
|
1828
|
+
unregisterMaterializedView(schemaName, name) {
|
|
1829
|
+
this.materializedViewManager.unregisterMaterializedView(schemaName, name);
|
|
1830
|
+
}
|
|
1831
|
+
/** @internal Force-mark an MV stale: detach its row-time plan and invalidate cached
|
|
1832
|
+
* backing reads so the next reference re-hits the build-time stale guard
|
|
1833
|
+
* (ALTER … RENAME propagation failure path). */
|
|
1834
|
+
markMaterializedViewStale(mv) {
|
|
1835
|
+
this.materializedViewManager.markMaterializedViewStale(mv);
|
|
1836
|
+
}
|
|
1837
|
+
/**
|
|
1838
|
+
* Refresh every maintained table (materialized view) in source-dependency
|
|
1839
|
+
* order, bringing each backing current with its sources. The convergence
|
|
1840
|
+
* point after a wholesale external load (e.g. a sync snapshot bootstrap) that
|
|
1841
|
+
* deferred row-time maintenance. Each MV is refreshed through the same
|
|
1842
|
+
* full-rebuild path as `refresh materialized view` (stale revalidation, shape
|
|
1843
|
+
* re-derivation/reshape, row-time re-registration, `stale` clear), so a
|
|
1844
|
+
* bounded-delta MV is full-rebuilt here too — convergence does not depend on
|
|
1845
|
+
* delta replay, and the full rebuild re-reads the complete source through the
|
|
1846
|
+
* vtab regardless of how its rows arrived (out-of-band direct-storage writes
|
|
1847
|
+
* included). MV-over-MV chains converge base-first: refresh is commit-first per
|
|
1848
|
+
* MV, so a base MV's backing is committed before a dependent's body re-reads it.
|
|
1849
|
+
*
|
|
1850
|
+
* NOT atomic across the sweep — the whole sweep is deliberately NOT wrapped in
|
|
1851
|
+
* one explicit transaction (refresh is commit-first per MV, so an enclosing
|
|
1852
|
+
* transaction would not make it atomic anyway). Each MV ensures/commits its own
|
|
1853
|
+
* implicit transaction exactly as the single-MV `refresh` does, so a failure
|
|
1854
|
+
* partway leaves earlier MVs converged; the caller (snapshot bootstrap) retries
|
|
1855
|
+
* the whole load idempotently.
|
|
1856
|
+
*
|
|
1857
|
+
* Serialized via the exec mutex like any statement — do NOT call from within
|
|
1858
|
+
* statement execution or a vtab callback (deadlock; same constraint as
|
|
1859
|
+
* `refresh materialized view` itself). Returns the refreshed MV identifiers
|
|
1860
|
+
* (for coarse watch notification); `[]` (no mutex, no transaction) when there
|
|
1861
|
+
* are no maintained tables. See `docs/materialized-views.md` § Converging all
|
|
1862
|
+
* materialized views.
|
|
1863
|
+
*/
|
|
1864
|
+
async refreshAllMaterializedViews() {
|
|
1865
|
+
this.checkOpen();
|
|
1866
|
+
// Build the order BEFORE the mutex: it only reads catalog/plan state, and an
|
|
1867
|
+
// empty catalog must take no mutex and start no transaction.
|
|
1868
|
+
const order = this.materializedViewManager.materializedViewRefreshOrder();
|
|
1869
|
+
if (order.length === 0)
|
|
1870
|
+
return [];
|
|
1871
|
+
const refreshed = [];
|
|
1872
|
+
await this._withMutex(async () => {
|
|
1873
|
+
// Per-MV implicit-transaction scope mirrors `exec`'s per-statement boundary:
|
|
1874
|
+
// each refresh commits independently (commit-first), so a mid-sweep failure
|
|
1875
|
+
// leaves the already-refreshed MVs converged rather than rolling them back.
|
|
1876
|
+
for (const mv of order) {
|
|
1877
|
+
try {
|
|
1878
|
+
await this._ensureTransaction();
|
|
1879
|
+
const live = await refreshMaintainedTable(this, mv);
|
|
1880
|
+
if (this._isImplicitTransaction()) {
|
|
1881
|
+
await this._commitTransaction();
|
|
1882
|
+
}
|
|
1883
|
+
refreshed.push({ schemaName: live.schemaName, name: live.name });
|
|
1884
|
+
}
|
|
1885
|
+
catch (err) {
|
|
1886
|
+
if (this._isImplicitTransaction()) {
|
|
1887
|
+
await this._rollbackTransaction();
|
|
1888
|
+
}
|
|
1889
|
+
throw err;
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
});
|
|
1893
|
+
return refreshed;
|
|
1894
|
+
}
|
|
1895
|
+
/** @internal Cheap synchronous guard for the per-row DML maintenance hook: true
|
|
1896
|
+
* iff a `row-time` covering structure reads `sourceBase` (lowercased or raw
|
|
1897
|
+
* `schema.table`). Lets a hot write path skip the maintenance call entirely when
|
|
1898
|
+
* no row-time MV depends on the written table. */
|
|
1899
|
+
_hasRowTimeCoveringStructures(sourceBase) {
|
|
1900
|
+
return this.materializedViewManager.hasRowTimePlanFor(sourceBase);
|
|
1901
|
+
}
|
|
1902
|
+
/** @internal Synchronously maintain every `row-time` covering structure on
|
|
1903
|
+
* `sourceBase` for one source row-write, before the writing statement observes
|
|
1904
|
+
* its own effects. Drives a per-row backing delta through the backing table's
|
|
1905
|
+
* coordinated transactional connection (reads-own-writes within the txn;
|
|
1906
|
+
* committed/rolled-back in lockstep with the source write). See
|
|
1907
|
+
* `database-materialized-views.ts` § row-time write-through.
|
|
1908
|
+
*
|
|
1909
|
+
* `cache` is the optional per-statement {@link BackingConnectionCache} the DML
|
|
1910
|
+
* generator threads in so the backing-connection resolution is amortized over the
|
|
1911
|
+
* whole statement (one scan per backing, not one per source row). The cold
|
|
1912
|
+
* eviction callers (memory `checkUniqueViaMaterializedView`, store-table.ts) omit
|
|
1913
|
+
* it and re-resolve the same connection deterministically — the `DatabaseInternal`
|
|
1914
|
+
* surface deliberately exposes only the two-arg form (a host reporting writes from
|
|
1915
|
+
* OUTSIDE a statement uses the batch-amortized {@link ingestExternalRowChanges}
|
|
1916
|
+
* seam instead).
|
|
1917
|
+
*
|
|
1918
|
+
* `deferred` is the optional per-statement deferred-rebuild set: a `'full-rebuild'`
|
|
1919
|
+
* plan is marked dirty in it (no per-row apply) and drained once at the
|
|
1920
|
+
* end-of-statement {@link _flushDeferredRebuilds}. The DML generator owns it; cold
|
|
1921
|
+
* callers omit it (and never name a full-rebuild MV, which is never a covering
|
|
1922
|
+
* structure — so an inline rebuild is at worst a safe, unreached fallback). */
|
|
1923
|
+
async _maintainRowTimeCoveringStructures(sourceBase, change, cache, deferred) {
|
|
1924
|
+
await this.materializedViewManager.maintainRowTime(sourceBase, change, cache, deferred);
|
|
1925
|
+
}
|
|
1926
|
+
/** @internal Drain the per-statement deferred full-rebuild set at the
|
|
1927
|
+
* end-of-statement boundary: rebuild every dirtied full-rebuild covering MV exactly
|
|
1928
|
+
* once and cascade each rebuild's delta onward (MV-over-MV). The DML generator calls
|
|
1929
|
+
* this after the row loop and before releasing the statement-atomicity savepoint, so
|
|
1930
|
+
* a failed rebuild rolls the whole statement back. `cache` is the same per-statement
|
|
1931
|
+
* {@link BackingConnectionCache} the row loop used. See
|
|
1932
|
+
* `database-materialized-views.ts` § flushDeferredRebuilds. */
|
|
1933
|
+
async _flushDeferredRebuilds(deferred, cache) {
|
|
1934
|
+
await this.materializedViewManager.flushDeferredRebuilds(deferred, cache);
|
|
1935
|
+
}
|
|
1936
|
+
/** @internal Resolve the linked, `row-time`, enforcement-ready covering MV for a
|
|
1937
|
+
* UNIQUE constraint on `schema.table`, or `undefined`. Synchronous (a map lookup
|
|
1938
|
+
* plus name/staleness checks) with an O(1) negative fast path, so the UNIQUE-check
|
|
1939
|
+
* path can consult it without async overhead. When it returns an MV, conflict
|
|
1940
|
+
* resolution routes through the covering MV's backing table (in preference to the
|
|
1941
|
+
* auto-index) — see `docs/materialized-views.md` § Covering structures. */
|
|
1942
|
+
_findRowTimeCoveringStructure(schemaName, tableName, uc) {
|
|
1943
|
+
return this.materializedViewManager.findRowTimeCoveringStructure(schemaName, tableName, uc);
|
|
1944
|
+
}
|
|
1945
|
+
/** @internal Point-look up a row-time covering MV's backing table for rows whose
|
|
1946
|
+
* backing columns equal `newRow`'s UNIQUE values, returning the conflicting
|
|
1947
|
+
* **source** PK(s) (excluding `newSourcePk`, the row being written). Reads-own-writes
|
|
1948
|
+
* through the backing table's coordinated connection. The caller validates each
|
|
1949
|
+
* candidate against its live source row and applies IGNORE/ABORT/REPLACE. */
|
|
1950
|
+
async _lookupCoveringConflicts(mv, uc, newRow, newSourcePk) {
|
|
1951
|
+
return this.materializedViewManager.lookupCoveringConflicts(mv, uc, newRow, newSourcePk);
|
|
1952
|
+
}
|
|
1489
1953
|
/** @internal Invalidate cached assertion plan (called on DROP ASSERTION) */
|
|
1490
1954
|
invalidateAssertionCache(name) {
|
|
1491
1955
|
this.assertionEvaluator.invalidateAssertion(name);
|