@quereus/quereus 3.3.0 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/src/common/datatype.d.ts +12 -0
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/types.d.ts +24 -0
- package/dist/src/common/types.d.ts.map +1 -1
- package/dist/src/common/types.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +37 -9
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +62 -110
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +163 -0
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +235 -21
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +28 -0
- package/dist/src/core/database-external-changes.d.ts.map +1 -0
- package/dist/src/core/database-external-changes.js +242 -0
- package/dist/src/core/database-external-changes.js.map +1 -0
- package/dist/src/core/database-internal.d.ts +50 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +1253 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views.js +3064 -0
- package/dist/src/core/database-materialized-views.js.map +1 -0
- package/dist/src/core/database-options.d.ts +4 -0
- package/dist/src/core/database-options.d.ts.map +1 -1
- package/dist/src/core/database-options.js +10 -0
- package/dist/src/core/database-options.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +19 -3
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +30 -3
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +19 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +63 -3
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +204 -11
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +493 -29
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +137 -0
- package/dist/src/core/derived-row-validator.d.ts.map +1 -0
- package/dist/src/core/derived-row-validator.js +314 -0
- package/dist/src/core/derived-row-validator.js.map +1 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +30 -9
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +135 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +793 -118
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -10
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +32 -0
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts +3 -0
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +229 -0
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +10 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +3 -2
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts +2 -0
- package/dist/src/func/builtins/mutation.d.ts.map +1 -0
- package/dist/src/func/builtins/mutation.js +53 -0
- package/dist/src/func/builtins/mutation.js.map +1 -0
- package/dist/src/func/builtins/schema.d.ts +2 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +716 -27
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.js +1 -1
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/registration.d.ts +13 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +5 -0
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +25 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +27 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +353 -21
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/index.d.ts +14 -1
- package/dist/src/parser/index.d.ts.map +1 -1
- package/dist/src/parser/index.js +19 -0
- package/dist/src/parser/index.js.map +1 -1
- package/dist/src/parser/lexer.d.ts +9 -0
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +9 -0
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts +276 -7
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +1387 -469
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +12 -8
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +4 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +8 -4
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.d.ts +22 -0
- package/dist/src/planner/analysis/authored-inverse.d.ts.map +1 -0
- package/dist/src/planner/analysis/authored-inverse.js +267 -0
- package/dist/src/planner/analysis/authored-inverse.js.map +1 -0
- package/dist/src/planner/analysis/change-scope.d.ts +34 -4
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +108 -7
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +36 -2
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +174 -46
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/coarsened-key.d.ts +109 -0
- package/dist/src/planner/analysis/coarsened-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/coarsened-key.js +228 -0
- package/dist/src/planner/analysis/coarsened-key.js.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts +216 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -0
- package/dist/src/planner/analysis/comparison-collation.js +341 -0
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +3 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +192 -9
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +321 -0
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -0
- package/dist/src/planner/analysis/coverage-prover.js +1038 -0
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -0
- package/dist/src/planner/analysis/key-filter.d.ts +22 -0
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -0
- package/dist/src/planner/analysis/key-filter.js +105 -0
- package/dist/src/planner/analysis/key-filter.js.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +36 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.js +148 -22
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-normalizer.js +30 -1
- package/dist/src/planner/analysis/predicate-normalizer.js.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts +36 -1
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +51 -13
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +314 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js +1081 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +92 -0
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-invertibility.js +129 -0
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +196 -0
- package/dist/src/planner/analysis/update-lineage.d.ts.map +1 -0
- package/dist/src/planner/analysis/update-lineage.js +322 -0
- package/dist/src/planner/analysis/update-lineage.js.map +1 -0
- package/dist/src/planner/analysis/view-complement.d.ts +42 -0
- package/dist/src/planner/analysis/view-complement.d.ts.map +1 -0
- package/dist/src/planner/analysis/view-complement.js +54 -0
- package/dist/src/planner/analysis/view-complement.js.map +1 -0
- package/dist/src/planner/building/alter-table.d.ts +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +211 -2
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +18 -1
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +33 -5
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +63 -28
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +9 -0
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +41 -12
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +94 -0
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/declare-schema.d.ts +1 -0
- package/dist/src/planner/building/declare-schema.d.ts.map +1 -1
- package/dist/src/planner/building/declare-schema.js +4 -1
- package/dist/src/planner/building/declare-schema.js.map +1 -1
- package/dist/src/planner/building/default-scope.d.ts +26 -0
- package/dist/src/planner/building/default-scope.d.ts.map +1 -0
- package/dist/src/planner/building/default-scope.js +41 -0
- package/dist/src/planner/building/default-scope.js.map +1 -0
- package/dist/src/planner/building/delete.d.ts +19 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +109 -30
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +118 -0
- package/dist/src/planner/building/dml-target.d.ts.map +1 -0
- package/dist/src/planner/building/dml-target.js +282 -0
- package/dist/src/planner/building/dml-target.js.map +1 -0
- package/dist/src/planner/building/drop-index.d.ts.map +1 -1
- package/dist/src/planner/building/drop-index.js +4 -1
- package/dist/src/planner/building/drop-index.js.map +1 -1
- package/dist/src/planner/building/drop-view.d.ts.map +1 -1
- package/dist/src/planner/building/drop-view.js +4 -2
- package/dist/src/planner/building/drop-view.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +60 -21
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +30 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +160 -129
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts +45 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +257 -88
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/lens-auxiliary-access.d.ts +22 -0
- package/dist/src/planner/building/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/building/lens-auxiliary-access.js +132 -0
- package/dist/src/planner/building/lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/building/materialized-view.d.ts +16 -0
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -0
- package/dist/src/planner/building/materialized-view.js +57 -0
- package/dist/src/planner/building/materialized-view.js.map +1 -0
- package/dist/src/planner/building/returning-star.d.ts +32 -0
- package/dist/src/planner/building/returning-star.d.ts.map +1 -0
- package/dist/src/planner/building/returning-star.js +45 -0
- package/dist/src/planner/building/returning-star.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +47 -0
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.d.ts.map +1 -1
- package/dist/src/planner/building/select-compound.js +84 -11
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +10 -2
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +7 -1
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +6 -0
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +18 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +30 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +8 -2
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +26 -4
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +8 -5
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +164 -59
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/set-object-tags.d.ts +7 -0
- package/dist/src/planner/building/set-object-tags.d.ts.map +1 -0
- package/dist/src/planner/building/set-object-tags.js +38 -0
- package/dist/src/planner/building/set-object-tags.js.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts +27 -0
- package/dist/src/planner/building/tag-diagnostics.d.ts.map +1 -0
- package/dist/src/planner/building/tag-diagnostics.js +37 -0
- package/dist/src/planner/building/tag-diagnostics.js.map +1 -0
- package/dist/src/planner/building/update.d.ts +18 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +134 -58
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +15 -0
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -0
- package/dist/src/planner/building/view-mutation-builder.js +1158 -0
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -0
- package/dist/src/planner/building/with.d.ts +11 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +48 -10
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +83 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +114 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +38 -4
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -6
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +2 -1
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +39 -1
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +18 -2
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +131 -0
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -0
- package/dist/src/planner/mutation/backward-body.js +135 -0
- package/dist/src/planner/mutation/backward-body.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts +17 -0
- package/dist/src/planner/mutation/cte-flatten.d.ts.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +364 -0
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -0
- package/dist/src/planner/mutation/decomposition.d.ts +273 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -0
- package/dist/src/planner/mutation/decomposition.js +1719 -0
- package/dist/src/planner/mutation/decomposition.js.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts +165 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -0
- package/dist/src/planner/mutation/lens-enforcement.js +745 -0
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -0
- package/dist/src/planner/mutation/multi-source.d.ts +568 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/multi-source.js +2915 -0
- package/dist/src/planner/mutation/multi-source.js.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +37 -0
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js +24 -0
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts +33 -0
- package/dist/src/planner/mutation/mutation-tags.d.ts.map +1 -0
- package/dist/src/planner/mutation/mutation-tags.js +31 -0
- package/dist/src/planner/mutation/mutation-tags.js.map +1 -0
- package/dist/src/planner/mutation/propagate.d.ts +97 -0
- package/dist/src/planner/mutation/propagate.d.ts.map +1 -0
- package/dist/src/planner/mutation/propagate.js +220 -0
- package/dist/src/planner/mutation/propagate.js.map +1 -0
- package/dist/src/planner/mutation/scope-transform.d.ts +181 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -0
- package/dist/src/planner/mutation/scope-transform.js +574 -0
- package/dist/src/planner/mutation/scope-transform.js.map +1 -0
- package/dist/src/planner/mutation/set-op.d.ts +242 -0
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -0
- package/dist/src/planner/mutation/set-op.js +1687 -0
- package/dist/src/planner/mutation/set-op.js.map +1 -0
- package/dist/src/planner/mutation/single-source.d.ts +261 -0
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -0
- package/dist/src/planner/mutation/single-source.js +1096 -0
- package/dist/src/planner/mutation/single-source.js.map +1 -0
- package/dist/src/planner/nodes/aggregate-node.js +3 -3
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +5 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +124 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +27 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/analyze-node.d.ts +2 -1
- package/dist/src/planner/nodes/analyze-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/analyze-node.js +18 -1
- package/dist/src/planner/nodes/analyze-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +43 -0
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asserted-keys-node.js +99 -0
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -0
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +33 -8
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +2 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/create-view-node.d.ts +7 -2
- package/dist/src/planner/nodes/create-view-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-view-node.js +4 -1
- package/dist/src/planner/nodes/create-view-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts +13 -1
- package/dist/src/planner/nodes/declarative-schema.d.ts.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +32 -0
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +2 -0
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +29 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +27 -3
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -0
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +42 -0
- package/dist/src/planner/nodes/envelope-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/envelope-scan-node.js +62 -0
- package/dist/src/planner/nodes/envelope-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +11 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +63 -13
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +41 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +78 -8
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +33 -6
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +124 -9
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +104 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +91 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +4 -5
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts +69 -0
- package/dist/src/planner/nodes/materialized-view-nodes.d.ts.map +1 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js +111 -0
- package/dist/src/planner/nodes/materialized-view-nodes.js.map +1 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +2 -1
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +2 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts +9 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +9 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +265 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +2 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +12 -0
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +14 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +85 -11
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +62 -27
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +7 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +10 -3
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +20 -0
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +71 -14
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-object-tags-node.d.ts +39 -0
- package/dist/src/planner/nodes/set-object-tags-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/set-object-tags-node.js +41 -0
- package/dist/src/planner/nodes/set-object-tags-node.js.map +1 -0
- package/dist/src/planner/nodes/set-operation-node.d.ts +123 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +291 -18
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -0
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +7 -6
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts +2 -0
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +18 -2
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +23 -3
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +6 -0
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/values-node.d.ts +1 -0
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +16 -6
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +259 -0
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/view-mutation-node.js +273 -0
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -0
- package/dist/src/planner/nodes/window-function.d.ts +17 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +15 -1
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.js +2 -2
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +372 -39
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +1 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts +70 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.d.ts.map +1 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js +156 -0
- package/dist/src/planner/rules/access/lens-access-form-matcher.js.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts +31 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js +176 -0
- package/dist/src/planner/rules/access/rule-lens-auxiliary-access.js.map +1 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +435 -37
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +9 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +39 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +616 -0
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +8 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +36 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +38 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +10 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +19 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +130 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +206 -0
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +67 -14
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +81 -25
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts +84 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js +138 -0
- package/dist/src/planner/rules/join/rule-join-existence-pruning.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +9 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +12 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +4 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +10 -0
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts +286 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js +548 -0
- package/dist/src/planner/rules/join/rule-semijoin-existence-recovery.js.map +1 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js +9 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-union-all.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +7 -0
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.d.ts.map +1 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js +10 -1
- package/dist/src/planner/rules/parallel/rule-eager-prefetch-probe.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +9 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +18 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +7 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +9 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +13 -3
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js +14 -0
- package/dist/src/planner/rules/retrieve/rule-projection-pruning.js.map +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +4 -4
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +8 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +7 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +12 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +14 -0
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +66 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +177 -43
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +396 -101
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +27 -1
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +80 -6
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +81 -12
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/set-op-wrapper.d.ts +37 -0
- package/dist/src/planner/util/set-op-wrapper.d.ts.map +1 -0
- package/dist/src/planner/util/set-op-wrapper.js +82 -0
- package/dist/src/planner/util/set-op-wrapper.js.map +1 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +1 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +13 -1
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +7 -1
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +30 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +29 -4
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +38 -5
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +10 -8
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +664 -108
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/analyze.d.ts.map +1 -1
- package/dist/src/runtime/emit/analyze.js +2 -1
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/asof-scan.js +18 -5
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/asserted-keys.d.ts +13 -0
- package/dist/src/runtime/emit/asserted-keys.d.ts.map +1 -0
- package/dist/src/runtime/emit/asserted-keys.js +13 -0
- package/dist/src/runtime/emit/asserted-keys.js.map +1 -0
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +24 -19
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +5 -9
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/block.d.ts.map +1 -1
- package/dist/src/runtime/emit/block.js +11 -2
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/bloom-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/bloom-join.js +8 -2
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +15 -0
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +8 -0
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +16 -1
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts +27 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +413 -193
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +10 -0
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +17 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts +13 -0
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/envelope-scan.js +22 -0
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -0
- package/dist/src/runtime/emit/join.d.ts +10 -2
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +128 -38
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.d.ts.map +1 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js +16 -0
- package/dist/src/runtime/emit/lens-auxiliary-access.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +640 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js +2576 -0
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -0
- package/dist/src/runtime/emit/materialized-view.d.ts +31 -0
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -0
- package/dist/src/runtime/emit/materialized-view.js +187 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -0
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +15 -3
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +10 -5
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +1 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +101 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.d.ts +16 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.js +57 -0
- package/dist/src/runtime/emit/set-object-tags.js.map +1 -0
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +140 -24
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +110 -5
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +34 -6
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +70 -0
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -0
- package/dist/src/runtime/emit/view-mutation.js +299 -0
- package/dist/src/runtime/emit/view-mutation.js.map +1 -0
- package/dist/src/runtime/emit/window.js +29 -5
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +66 -3
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +580 -172
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +4 -1
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +5 -1
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +17 -1
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/types.d.ts +10 -0
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/basis-backfill.d.ts +63 -0
- package/dist/src/schema/basis-backfill.d.ts.map +1 -0
- package/dist/src/schema/basis-backfill.js +161 -0
- package/dist/src/schema/basis-backfill.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +115 -1
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +249 -22
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +42 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/column.d.ts +16 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +182 -0
- package/dist/src/schema/constraint-builder.d.ts.map +1 -0
- package/dist/src/schema/constraint-builder.js +424 -0
- package/dist/src/schema/constraint-builder.js.map +1 -0
- package/dist/src/schema/ddl-generator.d.ts +86 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +316 -20
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +51 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +61 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +106 -0
- package/dist/src/schema/derivation.d.ts.map +1 -0
- package/dist/src/schema/derivation.js +25 -0
- package/dist/src/schema/derivation.js.map +1 -0
- package/dist/src/schema/function.d.ts +20 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-ack.d.ts +90 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -0
- package/dist/src/schema/lens-ack.js +361 -0
- package/dist/src/schema/lens-ack.js.map +1 -0
- package/dist/src/schema/lens-compiler.d.ts +62 -0
- package/dist/src/schema/lens-compiler.d.ts.map +1 -0
- package/dist/src/schema/lens-compiler.js +1594 -0
- package/dist/src/schema/lens-compiler.js.map +1 -0
- package/dist/src/schema/lens-fk-discovery.d.ts +175 -0
- package/dist/src/schema/lens-fk-discovery.d.ts.map +1 -0
- package/dist/src/schema/lens-fk-discovery.js +336 -0
- package/dist/src/schema/lens-fk-discovery.js.map +1 -0
- package/dist/src/schema/lens-prover.d.ts +336 -0
- package/dist/src/schema/lens-prover.d.ts.map +1 -0
- package/dist/src/schema/lens-prover.js +1988 -0
- package/dist/src/schema/lens-prover.js.map +1 -0
- package/dist/src/schema/lens.d.ts +254 -0
- package/dist/src/schema/lens.d.ts.map +1 -0
- package/dist/src/schema/lens.js +21 -0
- package/dist/src/schema/lens.js.map +1 -0
- package/dist/src/schema/manager.d.ts +676 -18
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +1573 -238
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/mapping-advertisement-tags.d.ts +39 -0
- package/dist/src/schema/mapping-advertisement-tags.d.ts.map +1 -0
- package/dist/src/schema/mapping-advertisement-tags.js +216 -0
- package/dist/src/schema/mapping-advertisement-tags.js.map +1 -0
- package/dist/src/schema/rename-rewriter.d.ts +45 -4
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +412 -19
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags-policy.d.ts +32 -0
- package/dist/src/schema/reserved-tags-policy.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags-policy.js +34 -0
- package/dist/src/schema/reserved-tags-policy.js.map +1 -0
- package/dist/src/schema/reserved-tags.d.ts +170 -0
- package/dist/src/schema/reserved-tags.d.ts.map +1 -0
- package/dist/src/schema/reserved-tags.js +507 -0
- package/dist/src/schema/reserved-tags.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts +158 -2
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +1460 -78
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +8 -3
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +22 -2
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/schema.d.ts +25 -1
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +36 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +259 -10
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +309 -26
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +78 -0
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -0
- package/dist/src/schema/unique-enforcement.js +93 -0
- package/dist/src/schema/unique-enforcement.js.map +1 -0
- package/dist/src/schema/view.d.ts +83 -2
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +67 -1
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/schema/window-function.d.ts +9 -1
- package/dist/src/schema/window-function.d.ts.map +1 -1
- package/dist/src/schema/window-function.js.map +1 -1
- package/dist/src/util/comparison.d.ts +24 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +34 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/mutation-statement.d.ts.map +1 -1
- package/dist/src/util/mutation-statement.js +4 -1
- package/dist/src/util/mutation-statement.js.map +1 -1
- package/dist/src/util/serialization.d.ts +9 -0
- package/dist/src/util/serialization.d.ts.map +1 -1
- package/dist/src/util/serialization.js +26 -0
- package/dist/src/util/serialization.js.map +1 -1
- package/dist/src/vtab/backing-host.d.ts +286 -0
- package/dist/src/vtab/backing-host.d.ts.map +1 -0
- package/dist/src/vtab/backing-host.js +118 -0
- package/dist/src/vtab/backing-host.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +21 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +5 -5
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/mapping-advertisement.d.ts +163 -0
- package/dist/src/vtab/mapping-advertisement.d.ts.map +1 -0
- package/dist/src/vtab/mapping-advertisement.js +2 -0
- package/dist/src/vtab/mapping-advertisement.js.map +1 -0
- package/dist/src/vtab/memory/index.d.ts +64 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +119 -12
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +38 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +112 -24
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +291 -4
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +1050 -91
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +35 -6
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +66 -14
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts +14 -0
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +27 -4
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +5 -1
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +17 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +82 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +15 -5
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/types.d.ts +20 -2
- package/dist/src/vtab/memory/types.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +46 -24
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts +31 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js +101 -0
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts +8 -0
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -5
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +203 -4
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -0
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +17 -16
|
@@ -59,8 +59,68 @@ export interface DatabaseSchemaChangeEvent {
|
|
|
59
59
|
/** True if event originated from sync/remote source, false for local changes */
|
|
60
60
|
remote: boolean;
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Materialized-view key-coarsening **collision** event emitted at the database
|
|
64
|
+
* level — the operational complement to the create-time key-coarsening warning
|
|
65
|
+
* (`docs/materialized-views.md` § Coarsened backing keys). Fired from row-time
|
|
66
|
+
* maintenance whenever an upsert under the coarsened backing key K′ replaces a
|
|
67
|
+
* backing row whose **source identity differs** from the incoming row's — i.e.
|
|
68
|
+
* two distinct source-key tuples (`'Bob'` / `'bob'`) merged into one derived row
|
|
69
|
+
* under K′'s coarsened (output) collation, last-writer-win (`docs/migration.md`
|
|
70
|
+
* § Convergence hazards). One event per realized colliding merge, delivered on
|
|
71
|
+
* the commit that realized it (it rides the same transaction batching the
|
|
72
|
+
* data/schema channels use, so a collision inside a rolled-back transaction
|
|
73
|
+
* reports nothing).
|
|
74
|
+
*/
|
|
75
|
+
export interface MaintenanceCollisionEvent {
|
|
76
|
+
/** Schema name of the maintained (backing) table. */
|
|
77
|
+
schemaName: string;
|
|
78
|
+
/** Maintained (backing) table name. */
|
|
79
|
+
tableName: string;
|
|
80
|
+
/** The coarsened backing key K′ values (from the incoming/new row), in key order. */
|
|
81
|
+
key: SqlValue[];
|
|
82
|
+
/** Names of the weakened K′ column(s) whose values diverged under the source
|
|
83
|
+
* (pre-coarsening, stricter) collation — the columns whose coarsening realized
|
|
84
|
+
* the merge. */
|
|
85
|
+
weakenedColumns: string[];
|
|
86
|
+
/** The replaced backing row (the losing source identity's prior image). */
|
|
87
|
+
oldRow: Row;
|
|
88
|
+
/** The incoming backing row that won the merge (the new image). */
|
|
89
|
+
newRow: Row;
|
|
90
|
+
/** Reserved: true when the colliding write arrived via the external-change
|
|
91
|
+
* ingest seam (peer) rather than local DML. Not threaded through maintenance
|
|
92
|
+
* in v1 (see the ticket's Out of scope) — left unset. */
|
|
93
|
+
remote?: boolean;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The complete, ordered fact set of one committed logical transaction, delivered
|
|
97
|
+
* as a single group on the {@link DatabaseEventEmitter.onTransactionCommit}
|
|
98
|
+
* channel. This is the authoritative "one transaction = one group" boundary the
|
|
99
|
+
* sync layer anchors an HLC to: it spans **all** tables touched by the
|
|
100
|
+
* transaction (every module's emitter feeds the same engine-level batch), so a
|
|
101
|
+
* cross-table commit is never split — unlike a per-table store coordinator, which
|
|
102
|
+
* commits each table separately. See `docs/sync.md` § Transaction-Based Change
|
|
103
|
+
* Grouping.
|
|
104
|
+
*
|
|
105
|
+
* Delivered once from `flushBatch()` (i.e. after a successful commit), never on
|
|
106
|
+
* rollback. The `dataEvents`/`schemaEvents` carry the same
|
|
107
|
+
* {@link DatabaseDataChangeEvent}/{@link DatabaseSchemaChangeEvent} shapes the
|
|
108
|
+
* per-event `onDataChange`/`onSchemaChange` channels deliver — `onTransactionCommit`
|
|
109
|
+
* is purely additive and does not replace them.
|
|
110
|
+
*/
|
|
111
|
+
export interface TransactionCommitBatch {
|
|
112
|
+
/** All data events of the committed transaction, in flush order (base batch
|
|
113
|
+
* then each savepoint layer, in push order — the same order `flushBatch`
|
|
114
|
+
* emits per-event). Per-module/per-table arrival order at commit, not global
|
|
115
|
+
* DML-interleave order; deterministic and replayable. */
|
|
116
|
+
readonly dataEvents: ReadonlyArray<DatabaseDataChangeEvent>;
|
|
117
|
+
/** All schema events of the committed transaction, in flush order. */
|
|
118
|
+
readonly schemaEvents: ReadonlyArray<DatabaseSchemaChangeEvent>;
|
|
119
|
+
}
|
|
62
120
|
export type DatabaseDataChangeListener = (event: DatabaseDataChangeEvent) => void;
|
|
63
121
|
export type DatabaseSchemaChangeListener = (event: DatabaseSchemaChangeEvent) => void;
|
|
122
|
+
export type MaintenanceCollisionListener = (event: MaintenanceCollisionEvent) => void;
|
|
123
|
+
export type TransactionCommitListener = (batch: TransactionCommitBatch) => void;
|
|
64
124
|
/**
|
|
65
125
|
* Options for subscribing to data change events.
|
|
66
126
|
* Reserved fields for future filtering capabilities, plus pass-through for module-specific options.
|
|
@@ -89,13 +149,26 @@ export interface SchemaChangeSubscriptionOptions {
|
|
|
89
149
|
export declare class DatabaseEventEmitter {
|
|
90
150
|
private dataListeners;
|
|
91
151
|
private schemaListeners;
|
|
152
|
+
private collisionListeners;
|
|
153
|
+
private transactionCommitListeners;
|
|
92
154
|
private maxListeners;
|
|
93
155
|
/** Batched events waiting for commit (base transaction level) */
|
|
94
156
|
private batchedDataEvents;
|
|
95
157
|
private batchedSchemaEvents;
|
|
158
|
+
private batchedCollisionEvents;
|
|
96
159
|
/** Savepoint layers for event batching - each layer captures events since that savepoint */
|
|
97
160
|
private dataEventLayers;
|
|
98
161
|
private schemaEventLayers;
|
|
162
|
+
private collisionEventLayers;
|
|
163
|
+
/**
|
|
164
|
+
* Cumulative count of COMMITTED key-coarsening collisions, keyed by lowercased
|
|
165
|
+
* qualified `schema.table` of the maintained table. Incremented in
|
|
166
|
+
* {@link flushBatch} as each batched collision is emitted (or immediately on the
|
|
167
|
+
* non-batching path) — so the count reflects only collisions that actually
|
|
168
|
+
* committed, consistent with event delivery, and survives a host that never
|
|
169
|
+
* subscribed an `onMaintenanceCollision` listener.
|
|
170
|
+
*/
|
|
171
|
+
private collisionCounts;
|
|
99
172
|
/** Whether we're currently in a transaction (batching mode) */
|
|
100
173
|
private isBatching;
|
|
101
174
|
/** Map of module emitters we've subscribed to, for cleanup */
|
|
@@ -132,6 +205,58 @@ export declare class DatabaseEventEmitter {
|
|
|
132
205
|
* Check if there are any schema change listeners registered.
|
|
133
206
|
*/
|
|
134
207
|
hasSchemaListeners(): boolean;
|
|
208
|
+
/**
|
|
209
|
+
* Subscribe to materialized-view key-coarsening collision events
|
|
210
|
+
* ({@link MaintenanceCollisionEvent}). Events share the data/schema channels'
|
|
211
|
+
* transaction-batching discipline — delivered after the commit that realized
|
|
212
|
+
* the merge, dropped on rollback.
|
|
213
|
+
* @param listener Callback invoked for each committed collision
|
|
214
|
+
* @returns Unsubscribe function
|
|
215
|
+
*/
|
|
216
|
+
onMaintenanceCollision(listener: MaintenanceCollisionListener): () => void;
|
|
217
|
+
/**
|
|
218
|
+
* Check if there are any maintenance-collision listeners registered.
|
|
219
|
+
*/
|
|
220
|
+
hasCollisionListeners(): boolean;
|
|
221
|
+
/**
|
|
222
|
+
* Subscribe to grouped per-transaction commit batches
|
|
223
|
+
* ({@link TransactionCommitBatch}). Fired **once** per committed logical
|
|
224
|
+
* transaction, after the per-event {@link onDataChange}/{@link onSchemaChange}
|
|
225
|
+
* delivery, carrying every data and schema event of that transaction (across
|
|
226
|
+
* all tables) in flush order — the authoritative grouping boundary for
|
|
227
|
+
* "one transaction = one group". Never fires on rollback, and never fires for a
|
|
228
|
+
* transaction that produced no data or schema events (an empty/idle commit).
|
|
229
|
+
* This is additive: the per-event channels are untouched.
|
|
230
|
+
* @param listener Callback invoked once per committed transaction
|
|
231
|
+
* @returns Unsubscribe function
|
|
232
|
+
*/
|
|
233
|
+
onTransactionCommit(listener: TransactionCommitListener): () => void;
|
|
234
|
+
/**
|
|
235
|
+
* Check if there are any transaction-commit listeners registered.
|
|
236
|
+
*/
|
|
237
|
+
hasTransactionCommitListeners(): boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Whether the engine must collect data-change events for delivery — true when
|
|
240
|
+
* any per-event {@link onDataChange} listener OR any {@link onTransactionCommit}
|
|
241
|
+
* listener is registered. A transaction-commit listener needs the grouped data
|
|
242
|
+
* events, so the auto-event generation gate must open for it too even when no
|
|
243
|
+
* per-event data listener is subscribed. Consulted by the DML executor's
|
|
244
|
+
* auto-event gate (see `dml-executor.ts`).
|
|
245
|
+
*/
|
|
246
|
+
needsDataEvents(): boolean;
|
|
247
|
+
/**
|
|
248
|
+
* Whether the engine must collect schema-change events for delivery — true when
|
|
249
|
+
* any per-event {@link onSchemaChange} listener OR any {@link onTransactionCommit}
|
|
250
|
+
* listener is registered. Companion to {@link needsDataEvents}; consulted by the
|
|
251
|
+
* schema manager's auto-event gate (see `schema/manager.ts`).
|
|
252
|
+
*/
|
|
253
|
+
needsSchemaEvents(): boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Read-only snapshot of the cumulative committed-collision counter, keyed by
|
|
256
|
+
* lowercased qualified `schema.table`. A fresh copy each call, so the caller
|
|
257
|
+
* cannot mutate the live counter.
|
|
258
|
+
*/
|
|
259
|
+
getMaterializedViewCollisionStats(): ReadonlyMap<string, number>;
|
|
135
260
|
/**
|
|
136
261
|
* Hook a module's event emitter to forward events to the database level.
|
|
137
262
|
* Called when a module with native event support is detected.
|
|
@@ -159,6 +284,10 @@ export declare class DatabaseEventEmitter {
|
|
|
159
284
|
* Get the active schema event store (top layer or base).
|
|
160
285
|
*/
|
|
161
286
|
private getActiveSchemaStore;
|
|
287
|
+
/**
|
|
288
|
+
* Get the active collision event store (top savepoint layer or base).
|
|
289
|
+
*/
|
|
290
|
+
private getActiveCollisionStore;
|
|
162
291
|
/**
|
|
163
292
|
* Handle a data change event from a module.
|
|
164
293
|
* If batching, queue the event; otherwise emit immediately.
|
|
@@ -186,6 +315,34 @@ export declare class DatabaseEventEmitter {
|
|
|
186
315
|
* @param event The event to emit
|
|
187
316
|
*/
|
|
188
317
|
emitAutoSchemaEvent(moduleName: string, event: VTableSchemaChangeEvent): void;
|
|
318
|
+
/**
|
|
319
|
+
* Queue a materialized-view key-coarsening collision for delivery. If batching
|
|
320
|
+
* (inside a transaction/savepoint), the event is captured in the active store
|
|
321
|
+
* and emitted only on commit (dropped on rollback); otherwise it is emitted —
|
|
322
|
+
* and counted — immediately. Mirrors {@link emitAutoDataEvent}.
|
|
323
|
+
*/
|
|
324
|
+
queueCollision(event: MaintenanceCollisionEvent): void;
|
|
325
|
+
/**
|
|
326
|
+
* Count and emit one collision event. The cumulative committed-collision
|
|
327
|
+
* counter is incremented FIRST (always — even with no listeners, so the count
|
|
328
|
+
* survives a host that never subscribed), then the event is delivered to each
|
|
329
|
+
* listener. A throwing listener is isolated so it cannot break emission to the
|
|
330
|
+
* others or the commit (mirrors {@link emitDataEvent}).
|
|
331
|
+
*/
|
|
332
|
+
private emitCollisionEvent;
|
|
333
|
+
/**
|
|
334
|
+
* Project a pending data event into the database-level {@link DatabaseDataChangeEvent}
|
|
335
|
+
* shape delivered to listeners. The single source of truth for the projection,
|
|
336
|
+
* reused by both the per-event {@link emitDataEvent} path and the grouped
|
|
337
|
+
* {@link flushBatch} transaction-commit batch so listeners on either channel see
|
|
338
|
+
* identical shapes.
|
|
339
|
+
*/
|
|
340
|
+
private toDataChangeEvent;
|
|
341
|
+
/**
|
|
342
|
+
* Project a pending schema event into the database-level {@link DatabaseSchemaChangeEvent}
|
|
343
|
+
* shape. Companion to {@link toDataChangeEvent}; same dual-use rationale.
|
|
344
|
+
*/
|
|
345
|
+
private toSchemaChangeEvent;
|
|
189
346
|
/**
|
|
190
347
|
* Emit a data event to all listeners.
|
|
191
348
|
*/
|
|
@@ -203,6 +360,12 @@ export declare class DatabaseEventEmitter {
|
|
|
203
360
|
* Collects events from all layers (base + savepoint layers) and emits them.
|
|
204
361
|
*/
|
|
205
362
|
flushBatch(): void;
|
|
363
|
+
/**
|
|
364
|
+
* Deliver one grouped {@link TransactionCommitBatch} to each transaction-commit
|
|
365
|
+
* listener. A throwing listener is isolated so it cannot break delivery to the
|
|
366
|
+
* others or the commit (mirrors {@link emitDataEvent}).
|
|
367
|
+
*/
|
|
368
|
+
private emitTransactionCommit;
|
|
206
369
|
/**
|
|
207
370
|
* Discard all batched events (called on rollback).
|
|
208
371
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-events.d.ts","sourceRoot":"","sources":["../../../src/core/database-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAM5G;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,qCAAqC;IACrC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,yBAAyB;IACzB,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC;IACjB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,uCAAuC;IACvC,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACzC,mCAAmC;IACnC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAClC,wCAAwC;IACxC,UAAU,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACzC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,MAAM,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,0BAA0B,GAAG,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,CAAC;AAClF,MAAM,MAAM,4BAA4B,GAAG,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"database-events.d.ts","sourceRoot":"","sources":["../../../src/core/database-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,13 +28,26 @@ const DEFAULT_MAX_LISTENERS = 100;
|
|
|
28
28
|
export class DatabaseEventEmitter {
|
|
29
29
|
dataListeners = new Set();
|
|
30
30
|
schemaListeners = new Set();
|
|
31
|
+
collisionListeners = new Set();
|
|
32
|
+
transactionCommitListeners = new Set();
|
|
31
33
|
maxListeners = DEFAULT_MAX_LISTENERS;
|
|
32
34
|
/** Batched events waiting for commit (base transaction level) */
|
|
33
35
|
batchedDataEvents = [];
|
|
34
36
|
batchedSchemaEvents = [];
|
|
37
|
+
batchedCollisionEvents = [];
|
|
35
38
|
/** Savepoint layers for event batching - each layer captures events since that savepoint */
|
|
36
39
|
dataEventLayers = [];
|
|
37
40
|
schemaEventLayers = [];
|
|
41
|
+
collisionEventLayers = [];
|
|
42
|
+
/**
|
|
43
|
+
* Cumulative count of COMMITTED key-coarsening collisions, keyed by lowercased
|
|
44
|
+
* qualified `schema.table` of the maintained table. Incremented in
|
|
45
|
+
* {@link flushBatch} as each batched collision is emitted (or immediately on the
|
|
46
|
+
* non-batching path) — so the count reflects only collisions that actually
|
|
47
|
+
* committed, consistent with event delivery, and survives a host that never
|
|
48
|
+
* subscribed an `onMaintenanceCollision` listener.
|
|
49
|
+
*/
|
|
50
|
+
collisionCounts = new Map();
|
|
38
51
|
/** Whether we're currently in a transaction (batching mode) */
|
|
39
52
|
isBatching = false;
|
|
40
53
|
/** Map of module emitters we've subscribed to, for cleanup */
|
|
@@ -95,6 +108,84 @@ export class DatabaseEventEmitter {
|
|
|
95
108
|
hasSchemaListeners() {
|
|
96
109
|
return this.schemaListeners.size > 0;
|
|
97
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Subscribe to materialized-view key-coarsening collision events
|
|
113
|
+
* ({@link MaintenanceCollisionEvent}). Events share the data/schema channels'
|
|
114
|
+
* transaction-batching discipline — delivered after the commit that realized
|
|
115
|
+
* the merge, dropped on rollback.
|
|
116
|
+
* @param listener Callback invoked for each committed collision
|
|
117
|
+
* @returns Unsubscribe function
|
|
118
|
+
*/
|
|
119
|
+
onMaintenanceCollision(listener) {
|
|
120
|
+
this.collisionListeners.add(listener);
|
|
121
|
+
this.checkListenerCount('collision', this.collisionListeners.size);
|
|
122
|
+
log('Added maintenance-collision listener, total: %d', this.collisionListeners.size);
|
|
123
|
+
return () => {
|
|
124
|
+
this.collisionListeners.delete(listener);
|
|
125
|
+
log('Removed maintenance-collision listener, total: %d', this.collisionListeners.size);
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if there are any maintenance-collision listeners registered.
|
|
130
|
+
*/
|
|
131
|
+
hasCollisionListeners() {
|
|
132
|
+
return this.collisionListeners.size > 0;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Subscribe to grouped per-transaction commit batches
|
|
136
|
+
* ({@link TransactionCommitBatch}). Fired **once** per committed logical
|
|
137
|
+
* transaction, after the per-event {@link onDataChange}/{@link onSchemaChange}
|
|
138
|
+
* delivery, carrying every data and schema event of that transaction (across
|
|
139
|
+
* all tables) in flush order — the authoritative grouping boundary for
|
|
140
|
+
* "one transaction = one group". Never fires on rollback, and never fires for a
|
|
141
|
+
* transaction that produced no data or schema events (an empty/idle commit).
|
|
142
|
+
* This is additive: the per-event channels are untouched.
|
|
143
|
+
* @param listener Callback invoked once per committed transaction
|
|
144
|
+
* @returns Unsubscribe function
|
|
145
|
+
*/
|
|
146
|
+
onTransactionCommit(listener) {
|
|
147
|
+
this.transactionCommitListeners.add(listener);
|
|
148
|
+
this.checkListenerCount('transaction-commit', this.transactionCommitListeners.size);
|
|
149
|
+
log('Added transaction-commit listener, total: %d', this.transactionCommitListeners.size);
|
|
150
|
+
return () => {
|
|
151
|
+
this.transactionCommitListeners.delete(listener);
|
|
152
|
+
log('Removed transaction-commit listener, total: %d', this.transactionCommitListeners.size);
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if there are any transaction-commit listeners registered.
|
|
157
|
+
*/
|
|
158
|
+
hasTransactionCommitListeners() {
|
|
159
|
+
return this.transactionCommitListeners.size > 0;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Whether the engine must collect data-change events for delivery — true when
|
|
163
|
+
* any per-event {@link onDataChange} listener OR any {@link onTransactionCommit}
|
|
164
|
+
* listener is registered. A transaction-commit listener needs the grouped data
|
|
165
|
+
* events, so the auto-event generation gate must open for it too even when no
|
|
166
|
+
* per-event data listener is subscribed. Consulted by the DML executor's
|
|
167
|
+
* auto-event gate (see `dml-executor.ts`).
|
|
168
|
+
*/
|
|
169
|
+
needsDataEvents() {
|
|
170
|
+
return this.dataListeners.size > 0 || this.transactionCommitListeners.size > 0;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Whether the engine must collect schema-change events for delivery — true when
|
|
174
|
+
* any per-event {@link onSchemaChange} listener OR any {@link onTransactionCommit}
|
|
175
|
+
* listener is registered. Companion to {@link needsDataEvents}; consulted by the
|
|
176
|
+
* schema manager's auto-event gate (see `schema/manager.ts`).
|
|
177
|
+
*/
|
|
178
|
+
needsSchemaEvents() {
|
|
179
|
+
return this.schemaListeners.size > 0 || this.transactionCommitListeners.size > 0;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Read-only snapshot of the cumulative committed-collision counter, keyed by
|
|
183
|
+
* lowercased qualified `schema.table`. A fresh copy each call, so the caller
|
|
184
|
+
* cannot mutate the live counter.
|
|
185
|
+
*/
|
|
186
|
+
getMaterializedViewCollisionStats() {
|
|
187
|
+
return new Map(this.collisionCounts);
|
|
188
|
+
}
|
|
98
189
|
/**
|
|
99
190
|
* Hook a module's event emitter to forward events to the database level.
|
|
100
191
|
* Called when a module with native event support is detected.
|
|
@@ -163,6 +254,14 @@ export class DatabaseEventEmitter {
|
|
|
163
254
|
? this.schemaEventLayers[this.schemaEventLayers.length - 1]
|
|
164
255
|
: this.batchedSchemaEvents;
|
|
165
256
|
}
|
|
257
|
+
/**
|
|
258
|
+
* Get the active collision event store (top savepoint layer or base).
|
|
259
|
+
*/
|
|
260
|
+
getActiveCollisionStore() {
|
|
261
|
+
return this.collisionEventLayers.length > 0
|
|
262
|
+
? this.collisionEventLayers[this.collisionEventLayers.length - 1]
|
|
263
|
+
: this.batchedCollisionEvents;
|
|
264
|
+
}
|
|
166
265
|
/**
|
|
167
266
|
* Handle a data change event from a module.
|
|
168
267
|
* If batching, queue the event; otherwise emit immediately.
|
|
@@ -222,12 +321,51 @@ export class DatabaseEventEmitter {
|
|
|
222
321
|
}
|
|
223
322
|
}
|
|
224
323
|
/**
|
|
225
|
-
*
|
|
324
|
+
* Queue a materialized-view key-coarsening collision for delivery. If batching
|
|
325
|
+
* (inside a transaction/savepoint), the event is captured in the active store
|
|
326
|
+
* and emitted only on commit (dropped on rollback); otherwise it is emitted —
|
|
327
|
+
* and counted — immediately. Mirrors {@link emitAutoDataEvent}.
|
|
226
328
|
*/
|
|
227
|
-
|
|
228
|
-
if (this.
|
|
329
|
+
queueCollision(event) {
|
|
330
|
+
if (this.isBatching) {
|
|
331
|
+
this.getActiveCollisionStore().push(event);
|
|
332
|
+
log('Batched maintenance-collision event on %s.%s', event.schemaName, event.tableName);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
this.emitCollisionEvent(event);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Count and emit one collision event. The cumulative committed-collision
|
|
340
|
+
* counter is incremented FIRST (always — even with no listeners, so the count
|
|
341
|
+
* survives a host that never subscribed), then the event is delivered to each
|
|
342
|
+
* listener. A throwing listener is isolated so it cannot break emission to the
|
|
343
|
+
* others or the commit (mirrors {@link emitDataEvent}).
|
|
344
|
+
*/
|
|
345
|
+
emitCollisionEvent(event) {
|
|
346
|
+
const counterKey = `${event.schemaName}.${event.tableName}`.toLowerCase();
|
|
347
|
+
this.collisionCounts.set(counterKey, (this.collisionCounts.get(counterKey) ?? 0) + 1);
|
|
348
|
+
if (this.collisionListeners.size === 0)
|
|
229
349
|
return;
|
|
230
|
-
|
|
350
|
+
log('Emitting maintenance-collision event on %s.%s (weakened: %s)', event.schemaName, event.tableName, event.weakenedColumns.join(', '));
|
|
351
|
+
for (const listener of this.collisionListeners) {
|
|
352
|
+
try {
|
|
353
|
+
listener(event);
|
|
354
|
+
}
|
|
355
|
+
catch (e) {
|
|
356
|
+
errorLog('Maintenance-collision listener error on %s.%s: %O', event.schemaName, event.tableName, e);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Project a pending data event into the database-level {@link DatabaseDataChangeEvent}
|
|
362
|
+
* shape delivered to listeners. The single source of truth for the projection,
|
|
363
|
+
* reused by both the per-event {@link emitDataEvent} path and the grouped
|
|
364
|
+
* {@link flushBatch} transaction-commit batch so listeners on either channel see
|
|
365
|
+
* identical shapes.
|
|
366
|
+
*/
|
|
367
|
+
toDataChangeEvent(moduleName, event) {
|
|
368
|
+
return {
|
|
231
369
|
type: event.type,
|
|
232
370
|
moduleName,
|
|
233
371
|
schemaName: event.schemaName,
|
|
@@ -238,6 +376,31 @@ export class DatabaseEventEmitter {
|
|
|
238
376
|
changedColumns: event.changedColumns,
|
|
239
377
|
remote: event.remote ?? false,
|
|
240
378
|
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Project a pending schema event into the database-level {@link DatabaseSchemaChangeEvent}
|
|
382
|
+
* shape. Companion to {@link toDataChangeEvent}; same dual-use rationale.
|
|
383
|
+
*/
|
|
384
|
+
toSchemaChangeEvent(moduleName, event) {
|
|
385
|
+
return {
|
|
386
|
+
type: event.type,
|
|
387
|
+
objectType: event.objectType,
|
|
388
|
+
moduleName,
|
|
389
|
+
schemaName: event.schemaName,
|
|
390
|
+
objectName: event.objectName,
|
|
391
|
+
columnName: event.columnName,
|
|
392
|
+
oldColumnName: event.oldColumnName,
|
|
393
|
+
ddl: event.ddl,
|
|
394
|
+
remote: event.remote ?? false,
|
|
395
|
+
};
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Emit a data event to all listeners.
|
|
399
|
+
*/
|
|
400
|
+
emitDataEvent(moduleName, event) {
|
|
401
|
+
if (this.dataListeners.size === 0)
|
|
402
|
+
return;
|
|
403
|
+
const dbEvent = this.toDataChangeEvent(moduleName, event);
|
|
241
404
|
log('Emitting data event: %s on %s.%s (module: %s, remote: %s)', dbEvent.type, dbEvent.schemaName, dbEvent.tableName, moduleName, dbEvent.remote);
|
|
242
405
|
for (const listener of this.dataListeners) {
|
|
243
406
|
try {
|
|
@@ -254,17 +417,7 @@ export class DatabaseEventEmitter {
|
|
|
254
417
|
emitSchemaEvent(moduleName, event) {
|
|
255
418
|
if (this.schemaListeners.size === 0)
|
|
256
419
|
return;
|
|
257
|
-
const dbEvent =
|
|
258
|
-
type: event.type,
|
|
259
|
-
objectType: event.objectType,
|
|
260
|
-
moduleName,
|
|
261
|
-
schemaName: event.schemaName,
|
|
262
|
-
objectName: event.objectName,
|
|
263
|
-
columnName: event.columnName,
|
|
264
|
-
oldColumnName: event.oldColumnName,
|
|
265
|
-
ddl: event.ddl,
|
|
266
|
-
remote: event.remote ?? false,
|
|
267
|
-
};
|
|
420
|
+
const dbEvent = this.toSchemaChangeEvent(moduleName, event);
|
|
268
421
|
log('Emitting schema event: %s %s %s (module: %s, remote: %s)', dbEvent.type, dbEvent.objectType, dbEvent.objectName, moduleName, dbEvent.remote);
|
|
269
422
|
for (const listener of this.schemaListeners) {
|
|
270
423
|
try {
|
|
@@ -282,8 +435,10 @@ export class DatabaseEventEmitter {
|
|
|
282
435
|
this.isBatching = true;
|
|
283
436
|
this.batchedDataEvents = [];
|
|
284
437
|
this.batchedSchemaEvents = [];
|
|
438
|
+
this.batchedCollisionEvents = [];
|
|
285
439
|
this.dataEventLayers = [];
|
|
286
440
|
this.schemaEventLayers = [];
|
|
441
|
+
this.collisionEventLayers = [];
|
|
287
442
|
log('Started event batching');
|
|
288
443
|
}
|
|
289
444
|
/**
|
|
@@ -301,12 +456,18 @@ export class DatabaseEventEmitter {
|
|
|
301
456
|
for (const layer of this.schemaEventLayers) {
|
|
302
457
|
allSchemaEvents.push(...layer);
|
|
303
458
|
}
|
|
459
|
+
const allCollisionEvents = [...this.batchedCollisionEvents];
|
|
460
|
+
for (const layer of this.collisionEventLayers) {
|
|
461
|
+
allCollisionEvents.push(...layer);
|
|
462
|
+
}
|
|
304
463
|
// Clear all
|
|
305
464
|
this.batchedDataEvents = [];
|
|
306
465
|
this.batchedSchemaEvents = [];
|
|
466
|
+
this.batchedCollisionEvents = [];
|
|
307
467
|
this.dataEventLayers = [];
|
|
308
468
|
this.schemaEventLayers = [];
|
|
309
|
-
|
|
469
|
+
this.collisionEventLayers = [];
|
|
470
|
+
log('Flushing %d data events, %d schema events, and %d collision events', allDataEvents.length, allSchemaEvents.length, allCollisionEvents.length);
|
|
310
471
|
// Emit schema events first (table creation before data insertion makes logical sense)
|
|
311
472
|
for (const { moduleName, event } of allSchemaEvents) {
|
|
312
473
|
this.emitSchemaEvent(moduleName, event);
|
|
@@ -315,6 +476,40 @@ export class DatabaseEventEmitter {
|
|
|
315
476
|
for (const { moduleName, event } of allDataEvents) {
|
|
316
477
|
this.emitDataEvent(moduleName, event);
|
|
317
478
|
}
|
|
479
|
+
// Then count + emit collision events (each increments the cumulative counter,
|
|
480
|
+
// so the count reflects only committed collisions).
|
|
481
|
+
for (const event of allCollisionEvents) {
|
|
482
|
+
this.emitCollisionEvent(event);
|
|
483
|
+
}
|
|
484
|
+
// Finally, deliver the whole committed transaction as a single grouped
|
|
485
|
+
// batch on the additive onTransactionCommit channel. Built from the same
|
|
486
|
+
// allDataEvents/allSchemaEvents projections the per-event path used, so the
|
|
487
|
+
// shapes match. Skipped entirely when no listener is subscribed (avoid the
|
|
488
|
+
// per-commit allocation in the common no-subscriber case) or when the
|
|
489
|
+
// transaction produced no data/schema facts (an empty/idle commit, or one
|
|
490
|
+
// that produced only collisions — collisions keep their own channel).
|
|
491
|
+
if (this.transactionCommitListeners.size > 0 && (allDataEvents.length + allSchemaEvents.length) > 0) {
|
|
492
|
+
this.emitTransactionCommit({
|
|
493
|
+
dataEvents: allDataEvents.map(({ moduleName, event }) => this.toDataChangeEvent(moduleName, event)),
|
|
494
|
+
schemaEvents: allSchemaEvents.map(({ moduleName, event }) => this.toSchemaChangeEvent(moduleName, event)),
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Deliver one grouped {@link TransactionCommitBatch} to each transaction-commit
|
|
500
|
+
* listener. A throwing listener is isolated so it cannot break delivery to the
|
|
501
|
+
* others or the commit (mirrors {@link emitDataEvent}).
|
|
502
|
+
*/
|
|
503
|
+
emitTransactionCommit(batch) {
|
|
504
|
+
log('Emitting transaction-commit batch: %d data events, %d schema events', batch.dataEvents.length, batch.schemaEvents.length);
|
|
505
|
+
for (const listener of this.transactionCommitListeners) {
|
|
506
|
+
try {
|
|
507
|
+
listener(batch);
|
|
508
|
+
}
|
|
509
|
+
catch (e) {
|
|
510
|
+
errorLog('Transaction-commit listener error: %O', e);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
318
513
|
}
|
|
319
514
|
/**
|
|
320
515
|
* Discard all batched events (called on rollback).
|
|
@@ -323,11 +518,14 @@ export class DatabaseEventEmitter {
|
|
|
323
518
|
this.isBatching = false;
|
|
324
519
|
const discardedData = this.batchedDataEvents.length + this.dataEventLayers.reduce((sum, layer) => sum + layer.length, 0);
|
|
325
520
|
const discardedSchema = this.batchedSchemaEvents.length + this.schemaEventLayers.reduce((sum, layer) => sum + layer.length, 0);
|
|
521
|
+
const discardedCollision = this.batchedCollisionEvents.length + this.collisionEventLayers.reduce((sum, layer) => sum + layer.length, 0);
|
|
326
522
|
this.batchedDataEvents = [];
|
|
327
523
|
this.batchedSchemaEvents = [];
|
|
524
|
+
this.batchedCollisionEvents = [];
|
|
328
525
|
this.dataEventLayers = [];
|
|
329
526
|
this.schemaEventLayers = [];
|
|
330
|
-
|
|
527
|
+
this.collisionEventLayers = [];
|
|
528
|
+
log('Discarded %d data events, %d schema events, and %d collision events', discardedData, discardedSchema, discardedCollision);
|
|
331
529
|
}
|
|
332
530
|
/**
|
|
333
531
|
* Begin a new savepoint layer for event batching.
|
|
@@ -336,6 +534,7 @@ export class DatabaseEventEmitter {
|
|
|
336
534
|
beginSavepointLayer() {
|
|
337
535
|
this.dataEventLayers.push([]);
|
|
338
536
|
this.schemaEventLayers.push([]);
|
|
537
|
+
this.collisionEventLayers.push([]);
|
|
339
538
|
log('Started savepoint event layer (depth: %d)', this.dataEventLayers.length);
|
|
340
539
|
}
|
|
341
540
|
/**
|
|
@@ -345,7 +544,8 @@ export class DatabaseEventEmitter {
|
|
|
345
544
|
rollbackSavepointLayer() {
|
|
346
545
|
const discardedData = this.dataEventLayers.pop();
|
|
347
546
|
const discardedSchema = this.schemaEventLayers.pop();
|
|
348
|
-
|
|
547
|
+
const discardedCollision = this.collisionEventLayers.pop();
|
|
548
|
+
log('Rolled back savepoint event layer, discarded %d data, %d schema, and %d collision events', discardedData?.length ?? 0, discardedSchema?.length ?? 0, discardedCollision?.length ?? 0);
|
|
349
549
|
}
|
|
350
550
|
/**
|
|
351
551
|
* Release the current savepoint layer, merging its events into the parent layer.
|
|
@@ -367,7 +567,14 @@ export class DatabaseEventEmitter {
|
|
|
367
567
|
: this.batchedSchemaEvents;
|
|
368
568
|
targetSchema.push(...topSchema);
|
|
369
569
|
}
|
|
370
|
-
|
|
570
|
+
const topCollision = this.collisionEventLayers.pop();
|
|
571
|
+
if (topCollision && topCollision.length > 0) {
|
|
572
|
+
const targetCollision = this.collisionEventLayers.length > 0
|
|
573
|
+
? this.collisionEventLayers[this.collisionEventLayers.length - 1]
|
|
574
|
+
: this.batchedCollisionEvents;
|
|
575
|
+
targetCollision.push(...topCollision);
|
|
576
|
+
}
|
|
577
|
+
log('Released savepoint event layer, merged %d data, %d schema, and %d collision events', topData?.length ?? 0, topSchema?.length ?? 0, topCollision?.length ?? 0);
|
|
371
578
|
}
|
|
372
579
|
/**
|
|
373
580
|
* Remove all listeners and unhook all modules.
|
|
@@ -377,15 +584,22 @@ export class DatabaseEventEmitter {
|
|
|
377
584
|
removeAllListeners() {
|
|
378
585
|
const dataCount = this.dataListeners.size;
|
|
379
586
|
const schemaCount = this.schemaListeners.size;
|
|
380
|
-
|
|
381
|
-
|
|
587
|
+
const collisionCount = this.collisionListeners.size;
|
|
588
|
+
const txCommitCount = this.transactionCommitListeners.size;
|
|
589
|
+
if (dataCount > 0 || schemaCount > 0 || collisionCount > 0 || txCommitCount > 0) {
|
|
590
|
+
warnLog('removeAllListeners() called with %d data, %d schema, %d collision, and %d transaction-commit listeners still registered — possible listener leak', dataCount, schemaCount, collisionCount, txCommitCount);
|
|
382
591
|
}
|
|
383
592
|
this.dataListeners.clear();
|
|
384
593
|
this.schemaListeners.clear();
|
|
594
|
+
this.collisionListeners.clear();
|
|
595
|
+
this.transactionCommitListeners.clear();
|
|
385
596
|
this.batchedDataEvents = [];
|
|
386
597
|
this.batchedSchemaEvents = [];
|
|
598
|
+
this.batchedCollisionEvents = [];
|
|
387
599
|
this.dataEventLayers = [];
|
|
388
600
|
this.schemaEventLayers = [];
|
|
601
|
+
this.collisionEventLayers = [];
|
|
602
|
+
this.collisionCounts.clear();
|
|
389
603
|
this.isBatching = false;
|
|
390
604
|
// Unhook all module emitters
|
|
391
605
|
for (const [, subs] of this.moduleSubscriptions) {
|