@quereus/quereus 4.3.0 → 4.3.2
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 +25 -7
- package/dist/src/common/types.d.ts +9 -59
- 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 +2 -2
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +4 -3
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-external-changes.d.ts +1 -1
- package/dist/src/core/database-external-changes.js +1 -1
- package/dist/src/core/database-internal.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-analysis.d.ts +199 -0
- package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views-analysis.js +502 -0
- package/dist/src/core/database-materialized-views-analysis.js.map +1 -0
- package/dist/src/core/database-materialized-views-apply.d.ts +280 -0
- package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views-apply.js +624 -0
- package/dist/src/core/database-materialized-views-apply.js.map +1 -0
- package/dist/src/core/database-materialized-views-plan-builders.d.ts +203 -0
- package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views-plan-builders.js +1084 -0
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
- package/dist/src/core/database-materialized-views-plans.d.ts +417 -0
- package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views-plans.js +13 -0
- package/dist/src/core/database-materialized-views-plans.js.map +1 -0
- package/dist/src/core/database-materialized-views.d.ts +11 -819
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +60 -2069
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +10 -1
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +16 -4
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts.map +1 -1
- package/dist/src/core/database-watchers.js +2 -1
- package/dist/src/core/database-watchers.js.map +1 -1
- package/dist/src/core/database.d.ts +99 -13
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +250 -33
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts +1 -1
- package/dist/src/core/derived-row-validator.d.ts.map +1 -1
- package/dist/src/core/derived-row-validator.js +5 -3
- package/dist/src/core/derived-row-validator.js.map +1 -1
- package/dist/src/core/statement.d.ts +8 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +98 -18
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +24 -13
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +2 -1
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +2 -1
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.d.ts.map +1 -1
- package/dist/src/func/builtins/mutation.js +3 -2
- package/dist/src/func/builtins/mutation.js.map +1 -1
- package/dist/src/index.d.ts +16 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +33 -7
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +2 -2
- package/dist/src/parser/lexer.d.ts +11 -1
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +40 -34
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +16 -9
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/analysis/authored-inverse.js +1 -1
- package/dist/src/planner/analysis/comparison-collation.d.ts +52 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.js +84 -7
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +64 -17
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +1 -1
- package/dist/src/planner/analysis/sat-checker.d.ts +8 -1
- package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -1
- package/dist/src/planner/analysis/sat-checker.js +117 -22
- package/dist/src/planner/analysis/sat-checker.js.map +1 -1
- package/dist/src/planner/analysis/scalar-invertibility.d.ts +13 -4
- package/dist/src/planner/analysis/scalar-invertibility.d.ts.map +1 -1
- package/dist/src/planner/analysis/scalar-invertibility.js +12 -3
- package/dist/src/planner/analysis/scalar-invertibility.js.map +1 -1
- package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
- package/dist/src/planner/analysis/update-lineage.js +1 -1
- package/dist/src/planner/analysis/update-lineage.js.map +1 -1
- package/dist/src/planner/analysis/view-complement.d.ts +2 -2
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +13 -2
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +2 -2
- package/dist/src/planner/building/dml-target.js +2 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +53 -2
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/schema-resolution.d.ts +3 -0
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/schema-resolution.js +4 -5
- package/dist/src/planner/building/schema-resolution.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +72 -4
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select.js +3 -3
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +16 -2
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +7 -7
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +1 -2
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +21 -14
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/cache/reference-graph.d.ts +14 -1
- package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
- package/dist/src/planner/cache/reference-graph.js +26 -26
- package/dist/src/planner/cache/reference-graph.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +7 -3
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/debug.d.ts +3 -2
- package/dist/src/planner/debug.d.ts.map +1 -1
- package/dist/src/planner/debug.js +9 -3
- package/dist/src/planner/debug.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +46 -19
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +50 -134
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/context.d.ts +8 -44
- package/dist/src/planner/framework/context.d.ts.map +1 -1
- package/dist/src/planner/framework/context.js +0 -91
- package/dist/src/planner/framework/context.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts +7 -0
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +84 -0
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/registry.d.ts +13 -42
- package/dist/src/planner/framework/registry.d.ts.map +1 -1
- package/dist/src/planner/framework/registry.js +14 -182
- package/dist/src/planner/framework/registry.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts +2 -2
- package/dist/src/planner/mutation/cte-flatten.js +1 -1
- package/dist/src/planner/mutation/decomposition.d.ts +2 -2
- package/dist/src/planner/mutation/decomposition.js +1 -1
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.js +2 -1
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
- package/dist/src/planner/mutation/multi-source.d.ts +8 -8
- package/dist/src/planner/mutation/multi-source.js +11 -11
- package/dist/src/planner/mutation/multi-source.js.map +1 -1
- package/dist/src/planner/mutation/propagate.d.ts +1 -1
- package/dist/src/planner/mutation/propagate.js +1 -1
- package/dist/src/planner/mutation/scope-transform.d.ts +2 -2
- package/dist/src/planner/mutation/scope-transform.js +3 -3
- package/dist/src/planner/mutation/scope-transform.js.map +1 -1
- package/dist/src/planner/mutation/set-op.d.ts +1 -1
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
- package/dist/src/planner/mutation/set-op.js +3 -2
- package/dist/src/planner/mutation/set-op.js.map +1 -1
- package/dist/src/planner/mutation/single-source.d.ts +3 -3
- package/dist/src/planner/mutation/single-source.js +9 -9
- package/dist/src/planner/mutation/single-source.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-function.d.ts +3 -1
- package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-function.js +1 -0
- package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +1 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +8 -1
- 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 +3 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.js +3 -2
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.js +5 -2
- package/dist/src/planner/nodes/asserted-keys-node.js.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/async-gather-node.js +3 -1
- package/dist/src/planner/nodes/async-gather-node.js.map +1 -1
- package/dist/src/planner/nodes/block.js +3 -3
- package/dist/src/planner/nodes/block.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts +2 -0
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +5 -1
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts +1 -0
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +1 -0
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +1 -0
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +4 -1
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +3 -3
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +21 -0
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.d.ts +1 -1
- package/dist/src/planner/nodes/envelope-scan-node.js +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +4 -2
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts +10 -2
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +81 -14
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +12 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +28 -1
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts +3 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js +1 -0
- package/dist/src/planner/nodes/internal-recursive-cte-ref-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +3 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +5 -5
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +4 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts +1 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +4 -3
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts +2 -0
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +6 -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 +3 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +68 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +137 -24
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts +3 -2
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +1 -0
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +8 -2
- package/dist/src/planner/nodes/recursive-cte-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +5 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +3 -0
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/remote-query-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/remote-query-node.js +3 -1
- package/dist/src/planner/nodes/remote-query-node.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +3 -1
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +3 -1
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/sink-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/sink-node.js +3 -1
- package/dist/src/planner/nodes/sink-node.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts +2 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +9 -5
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +12 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +32 -3
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +2 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +2 -0
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +2 -2
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.js +5 -1
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
- package/dist/src/planner/nodes/window-function.d.ts +3 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +1 -0
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +52 -8
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +885 -894
- package/dist/src/planner/optimizer.js.map +1 -1
- 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 +235 -202
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.d.ts +2 -2
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +2 -2
- package/dist/src/planner/rules/cache/rule-scalar-cse.d.ts +1 -1
- package/dist/src/planner/rules/cache/rule-scalar-cse.js +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +90 -26
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
- package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
- package/dist/src/planner/rules/shared/index-style-context.js +26 -0
- package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
- 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 +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
- package/dist/src/planner/scopes/registered.d.ts +21 -0
- package/dist/src/planner/scopes/registered.d.ts.map +1 -1
- package/dist/src/planner/scopes/registered.js +31 -1
- package/dist/src/planner/scopes/registered.js.map +1 -1
- package/dist/src/planner/stats/analyze.d.ts.map +1 -1
- package/dist/src/planner/stats/analyze.js +2 -20
- package/dist/src/planner/stats/analyze.js.map +1 -1
- package/dist/src/planner/stats/histogram.d.ts.map +1 -1
- package/dist/src/planner/stats/histogram.js +4 -0
- package/dist/src/planner/stats/histogram.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +2 -3
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +2 -3
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/validation/plan-validator.d.ts +16 -0
- package/dist/src/planner/validation/plan-validator.d.ts.map +1 -1
- package/dist/src/planner/validation/plan-validator.js +36 -0
- package/dist/src/planner/validation/plan-validator.js.map +1 -1
- package/dist/src/runtime/async-util.d.ts +26 -0
- package/dist/src/runtime/async-util.d.ts.map +1 -1
- package/dist/src/runtime/async-util.js +139 -55
- package/dist/src/runtime/async-util.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +32 -4
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +26 -9
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +2 -1
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emission-context.d.ts +27 -3
- package/dist/src/runtime/emission-context.d.ts.map +1 -1
- package/dist/src/runtime/emission-context.js +38 -7
- package/dist/src/runtime/emission-context.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +7 -1
- 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 +17 -13
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +98 -9
- 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 +13 -10
- package/dist/src/runtime/emit/asof-scan.js.map +1 -1
- package/dist/src/runtime/emit/async-gather.d.ts.map +1 -1
- package/dist/src/runtime/emit/async-gather.js +4 -3
- package/dist/src/runtime/emit/async-gather.js.map +1 -1
- package/dist/src/runtime/emit/between.d.ts.map +1 -1
- package/dist/src/runtime/emit/between.js +2 -1
- 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 +122 -14
- 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 +2 -1
- 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 +20 -8
- package/dist/src/runtime/emit/bloom-join.js.map +1 -1
- package/dist/src/runtime/emit/cache.d.ts.map +1 -1
- package/dist/src/runtime/emit/cache.js +2 -1
- package/dist/src/runtime/emit/cache.js.map +1 -1
- package/dist/src/runtime/emit/case.d.ts.map +1 -1
- package/dist/src/runtime/emit/case.js +66 -45
- package/dist/src/runtime/emit/case.js.map +1 -1
- package/dist/src/runtime/emit/cast.d.ts.map +1 -1
- package/dist/src/runtime/emit/cast.js +2 -1
- package/dist/src/runtime/emit/cast.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +13 -7
- package/dist/src/runtime/emit/constraint-check.js.map +1 -1
- package/dist/src/runtime/emit/create-assertion.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-assertion.js +2 -1
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/create-index.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-index.js +12 -1
- package/dist/src/runtime/emit/create-index.js.map +1 -1
- package/dist/src/runtime/emit/create-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-table.js +12 -1
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/cte-reference.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte-reference.js +2 -1
- package/dist/src/runtime/emit/cte-reference.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js +2 -1
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/ddl-transaction-policy.d.ts +50 -0
- package/dist/src/runtime/emit/ddl-transaction-policy.d.ts.map +1 -0
- package/dist/src/runtime/emit/ddl-transaction-policy.js +69 -0
- package/dist/src/runtime/emit/ddl-transaction-policy.js.map +1 -0
- package/dist/src/runtime/emit/delete.d.ts.map +1 -1
- package/dist/src/runtime/emit/delete.js +2 -1
- package/dist/src/runtime/emit/delete.js.map +1 -1
- package/dist/src/runtime/emit/distinct.d.ts.map +1 -1
- package/dist/src/runtime/emit/distinct.js +2 -1
- package/dist/src/runtime/emit/distinct.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +147 -34
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +2 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-index.js +17 -1
- package/dist/src/runtime/emit/drop-index.js.map +1 -1
- package/dist/src/runtime/emit/drop-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-table.js +11 -1
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/eager-prefetch.d.ts.map +1 -1
- package/dist/src/runtime/emit/eager-prefetch.js +2 -1
- package/dist/src/runtime/emit/eager-prefetch.js.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/envelope-scan.js +2 -1
- package/dist/src/runtime/emit/envelope-scan.js.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.js +3 -2
- package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
- package/dist/src/runtime/emit/filter.d.ts.map +1 -1
- package/dist/src/runtime/emit/filter.js +8 -3
- package/dist/src/runtime/emit/filter.js.map +1 -1
- package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/hash-aggregate.js +16 -11
- package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
- package/dist/src/runtime/emit/insert.d.ts.map +1 -1
- package/dist/src/runtime/emit/insert.js +2 -1
- package/dist/src/runtime/emit/insert.js.map +1 -1
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +20 -6
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
- package/dist/src/runtime/emit/limit-offset.js +2 -1
- package/dist/src/runtime/emit/limit-offset.js.map +1 -1
- package/dist/src/runtime/emit/literal.d.ts.map +1 -1
- package/dist/src/runtime/emit/literal.js +2 -1
- package/dist/src/runtime/emit/literal.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +22 -0
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +123 -12
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +6 -0
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/merge-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/merge-join.js +14 -4
- package/dist/src/runtime/emit/merge-join.js.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.js +2 -1
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
- package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
- package/dist/src/runtime/emit/pragma.js +2 -1
- package/dist/src/runtime/emit/pragma.js.map +1 -1
- package/dist/src/runtime/emit/project.d.ts.map +1 -1
- package/dist/src/runtime/emit/project.js +7 -2
- package/dist/src/runtime/emit/project.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +2 -1
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +7 -2
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/scalar-function.js +2 -1
- package/dist/src/runtime/emit/scalar-function.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +55 -17
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +6 -5
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/sequencing.d.ts.map +1 -1
- package/dist/src/runtime/emit/sequencing.js +2 -1
- package/dist/src/runtime/emit/sequencing.js.map +1 -1
- package/dist/src/runtime/emit/set-operation.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-operation.js +6 -5
- package/dist/src/runtime/emit/set-operation.js.map +1 -1
- package/dist/src/runtime/emit/sink.d.ts.map +1 -1
- package/dist/src/runtime/emit/sink.js +2 -1
- package/dist/src/runtime/emit/sink.js.map +1 -1
- package/dist/src/runtime/emit/sort.d.ts.map +1 -1
- package/dist/src/runtime/emit/sort.js +2 -1
- package/dist/src/runtime/emit/sort.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +42 -23
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.js +2 -1
- package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
- package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -1
- package/dist/src/runtime/emit/temporal-arithmetic.js +2 -1
- package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -1
- package/dist/src/runtime/emit/transaction.d.ts.map +1 -1
- package/dist/src/runtime/emit/transaction.js +2 -1
- package/dist/src/runtime/emit/transaction.js.map +1 -1
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +2 -1
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +2 -1
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/emit/values.d.ts.map +1 -1
- package/dist/src/runtime/emit/values.js +2 -1
- package/dist/src/runtime/emit/values.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
- package/dist/src/runtime/emit/view-mutation.js +6 -3
- package/dist/src/runtime/emit/view-mutation.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +26 -9
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/emitters.d.ts +11 -3
- package/dist/src/runtime/emitters.d.ts.map +1 -1
- package/dist/src/runtime/emitters.js +13 -22
- package/dist/src/runtime/emitters.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +39 -13
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/parallel-driver.d.ts +18 -4
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +72 -18
- package/dist/src/runtime/parallel-driver.js.map +1 -1
- package/dist/src/runtime/scheduler.d.ts +56 -7
- package/dist/src/runtime/scheduler.d.ts.map +1 -1
- package/dist/src/runtime/scheduler.js +223 -200
- package/dist/src/runtime/scheduler.js.map +1 -1
- package/dist/src/runtime/strict-flags.d.ts +22 -0
- package/dist/src/runtime/strict-flags.d.ts.map +1 -0
- package/dist/src/runtime/strict-flags.js +26 -0
- package/dist/src/runtime/strict-flags.js.map +1 -0
- package/dist/src/runtime/strict-fork.d.ts +4 -4
- package/dist/src/runtime/strict-fork.d.ts.map +1 -1
- package/dist/src/runtime/strict-fork.js +175 -31
- package/dist/src/runtime/strict-fork.js.map +1 -1
- package/dist/src/runtime/types.d.ts +66 -4
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js +37 -0
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/runtime/utils.d.ts.map +1 -1
- package/dist/src/runtime/utils.js +8 -17
- package/dist/src/runtime/utils.js.map +1 -1
- package/dist/src/schema/column.d.ts +8 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/ddl-generator.js +5 -0
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/lens-compiler.js +2 -2
- package/dist/src/schema/lens-compiler.js.map +1 -1
- package/dist/src/schema/lens-prover.d.ts.map +1 -1
- package/dist/src/schema/lens-prover.js +2 -3
- package/dist/src/schema/lens-prover.js.map +1 -1
- package/dist/src/schema/lens.d.ts +1 -1
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +7 -2
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +61 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +77 -0
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/table.d.ts +36 -8
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +61 -11
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +28 -5
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +37 -5
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/schema/view.d.ts +1 -1
- package/dist/src/schema/view.js +1 -1
- package/dist/src/types/json-type.d.ts.map +1 -1
- package/dist/src/types/json-type.js +18 -8
- package/dist/src/types/json-type.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +26 -0
- package/dist/src/types/logical-type.d.ts.map +1 -1
- package/dist/src/types/logical-type.js.map +1 -1
- package/dist/src/util/comparison.d.ts +83 -59
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +191 -131
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/json-canonical.d.ts +34 -0
- package/dist/src/util/json-canonical.d.ts.map +1 -0
- package/dist/src/util/json-canonical.js +32 -0
- package/dist/src/util/json-canonical.js.map +1 -0
- package/dist/src/util/key-serializer.d.ts +10 -3
- package/dist/src/util/key-serializer.d.ts.map +1 -1
- package/dist/src/util/key-serializer.js +43 -17
- package/dist/src/util/key-serializer.js.map +1 -1
- package/dist/src/util/key-tuple-codec.d.ts +37 -0
- package/dist/src/util/key-tuple-codec.d.ts.map +1 -0
- package/dist/src/util/key-tuple-codec.js +65 -0
- package/dist/src/util/key-tuple-codec.js.map +1 -0
- package/dist/src/util/latches.d.ts +29 -3
- package/dist/src/util/latches.d.ts.map +1 -1
- package/dist/src/util/latches.js +60 -6
- package/dist/src/util/latches.js.map +1 -1
- package/dist/src/util/patterns.d.ts +22 -8
- package/dist/src/util/patterns.d.ts.map +1 -1
- package/dist/src/util/patterns.js +87 -16
- package/dist/src/util/patterns.js.map +1 -1
- package/dist/src/util/qualified-name.d.ts +10 -0
- package/dist/src/util/qualified-name.d.ts.map +1 -0
- package/dist/src/util/qualified-name.js +15 -0
- package/dist/src/util/qualified-name.js.map +1 -0
- package/dist/src/vtab/backing-host.d.ts +8 -1
- package/dist/src/vtab/backing-host.d.ts.map +1 -1
- package/dist/src/vtab/backing-host.js +7 -0
- package/dist/src/vtab/backing-host.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +18 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +15 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +44 -0
- package/dist/src/vtab/capabilities.d.ts.map +1 -1
- package/dist/src/vtab/filter-info.d.ts +42 -0
- package/dist/src/vtab/filter-info.d.ts.map +1 -1
- package/dist/src/vtab/filter-info.js +137 -1
- package/dist/src/vtab/filter-info.js.map +1 -1
- package/dist/src/vtab/idx-str.d.ts +62 -0
- package/dist/src/vtab/idx-str.d.ts.map +1 -0
- package/dist/src/vtab/idx-str.js +130 -0
- package/dist/src/vtab/idx-str.js.map +1 -0
- package/dist/src/vtab/index-descriptor.d.ts +122 -0
- package/dist/src/vtab/index-descriptor.d.ts.map +1 -0
- package/dist/src/vtab/index-descriptor.js +104 -0
- package/dist/src/vtab/index-descriptor.js.map +1 -0
- package/dist/src/vtab/mapping-advertisement.d.ts +1 -1
- package/dist/src/vtab/memory/index.d.ts +12 -4
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +17 -9
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +85 -31
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +127 -86
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/connection.d.ts +27 -0
- package/dist/src/vtab/memory/layer/connection.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/connection.js +36 -1
- package/dist/src/vtab/memory/layer/connection.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +24 -4
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +212 -16
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +754 -170
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts +26 -1
- package/dist/src/vtab/memory/layer/plan-filter.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/plan-filter.js +29 -11
- package/dist/src/vtab/memory/layer/plan-filter.js.map +1 -1
- package/dist/src/vtab/memory/layer/safe-iterate.d.ts +2 -2
- package/dist/src/vtab/memory/layer/safe-iterate.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/safe-iterate.js +2 -2
- package/dist/src/vtab/memory/layer/safe-iterate.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts +5 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +38 -22
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +334 -9
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +21 -4
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +45 -16
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +30 -4
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +63 -15
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +35 -14
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -8
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +64 -14
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +41 -2
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js +19 -0
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +5 -4
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
|
@@ -0,0 +1,624 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialized-view maintenance — **delta apply**. The per-row / per-flush appliers that
|
|
3
|
+
* take a compiled {@link MaintenancePlan} plus a source {@link BackingRowChange}, compute the
|
|
4
|
+
* bounded backing delta (or the full-rebuild diff), and write it through the backing table's
|
|
5
|
+
* coordinated transaction connection — plus the residual runners, backing-host / connection
|
|
6
|
+
* resolvers, derived-row and parent-side referential enforcement, and the small key-compare
|
|
7
|
+
* helpers they share. Extracted from database-materialized-views.ts as free functions over
|
|
8
|
+
* {@link MaterializedViewManagerContext}; the manager's orchestration methods
|
|
9
|
+
* (`maintainRowTime`, `flushDeferredRebuilds`, `lookupCoveringConflicts`) call in.
|
|
10
|
+
*/
|
|
11
|
+
import { QuereusError } from '../common/errors.js';
|
|
12
|
+
import { StatusCode } from '../common/types.js';
|
|
13
|
+
import { createStrictRowContextMap, wrapTableContextsStrict } from '../runtime/strict-fork.js';
|
|
14
|
+
import { isAsyncIterable } from '../runtime/utils.js';
|
|
15
|
+
import { resolveBackingHost, nullInNotNullSeededPkError } from '../runtime/emit/materialized-view-helpers.js';
|
|
16
|
+
import { assertTransitiveRestrictsForParentMutation, executeForeignKeyActionsAndLens } from '../runtime/foreign-key-actions.js';
|
|
17
|
+
import { validateDerivedRowImage } from './derived-row-validator.js';
|
|
18
|
+
import { buildPrimaryKeyFromValues } from '../vtab/memory/utils/primary-key.js';
|
|
19
|
+
import { compareSqlValuesFast, rowsValueIdentical } from '../util/comparison.js';
|
|
20
|
+
import { canonKeyValues } from './database-materialized-views-analysis.js';
|
|
21
|
+
/**
|
|
22
|
+
* Compute an `'inverse-projection'` plan's per-row backing delta, apply it, and
|
|
23
|
+
* return the **effective** {@link BackingRowChange}(s) the backing layer realized.
|
|
24
|
+
* An out-of-scope row (or a delete of an absent backing key) yields no change. This
|
|
25
|
+
* body is the shipped covering-index maintenance, lifted verbatim from the former
|
|
26
|
+
* `applyRowTimeChange`, plus the equal-image short-circuit: an UPDATE whose old and
|
|
27
|
+
* new projected images are value-identical (both in scope) projects to NO backing
|
|
28
|
+
* delta — the dominant no-op echo (a source update touching only unprojected columns,
|
|
29
|
+
* or rewriting a projected column to its existing value) is suppressed before any
|
|
30
|
+
* backing-connection work. Accurate by the maintenance invariant (the backing row IS
|
|
31
|
+
* the old image's projection), so nothing would have changed; the host's
|
|
32
|
+
* value-identical upsert skip (vtab/backing-host.ts) remains the effective-state
|
|
33
|
+
* backstop for the paths that do emit ops.
|
|
34
|
+
*/
|
|
35
|
+
export async function applyInverseProjection(ctx, plan, change, cache) {
|
|
36
|
+
const inScope = (row) => plan.predicate === undefined || plan.predicate.evaluate(row) === true;
|
|
37
|
+
const project = (row) => plan.projectors.map(p => p.kind === 'passthrough' ? row[p.sourceCol] : p.eval(row));
|
|
38
|
+
const keyOf = (backingRow) => buildPrimaryKeyFromValues(plan.backingPkDefinition.map(d => backingRow[d.index]), plan.backingPkDefinition);
|
|
39
|
+
const ops = [];
|
|
40
|
+
if (change.op === 'insert') {
|
|
41
|
+
if (inScope(change.newRow))
|
|
42
|
+
ops.push({ kind: 'upsert', row: project(change.newRow) });
|
|
43
|
+
}
|
|
44
|
+
else if (change.op === 'delete') {
|
|
45
|
+
if (inScope(change.oldRow))
|
|
46
|
+
ops.push({ kind: 'delete-key', key: keyOf(project(change.oldRow)) });
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// UPDATE: a both-in-scope, same-backing-key change is one upsert (the host
|
|
50
|
+
// reports a single `update`); otherwise delete the old image if it was in
|
|
51
|
+
// scope and upsert the new image if it is — predicate-scope transitions and
|
|
52
|
+
// key-changing updates are genuinely two-sided. The scope check reads the
|
|
53
|
+
// SOURCE row (the predicate may reference unprojected columns), so both
|
|
54
|
+
// images must be in scope for the equal-image short-circuit.
|
|
55
|
+
const oldIn = inScope(change.oldRow);
|
|
56
|
+
const newIn = inScope(change.newRow);
|
|
57
|
+
if (oldIn && newIn) {
|
|
58
|
+
const oldImage = project(change.oldRow);
|
|
59
|
+
const newImage = project(change.newRow);
|
|
60
|
+
// Byte-faithful identity (rowsValueIdentical): subsumes key equality, and a
|
|
61
|
+
// collation-equal / byte-different image is NOT suppressed (it must re-key
|
|
62
|
+
// the stored bytes) — the same discipline as the host-level upsert skip.
|
|
63
|
+
if (rowsValueIdentical(oldImage, newImage))
|
|
64
|
+
return [];
|
|
65
|
+
if (backingPkEqual(plan.backingPkDefinition, oldImage, newImage)) {
|
|
66
|
+
// Same backing key (collation-aware — a collation-equal / byte-different
|
|
67
|
+
// key is the SAME btree identity, and the upsert re-keys the stored
|
|
68
|
+
// bytes): one upsert replaces the row wholesale, so the host reports
|
|
69
|
+
// a single `update` — matching the residual arms' post-suppression
|
|
70
|
+
// shape (one cascade dispatch, one change-log entry, no secondary-index
|
|
71
|
+
// churn from a delete+insert at an unchanged key).
|
|
72
|
+
ops.push({ kind: 'upsert', row: newImage });
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
ops.push({ kind: 'delete-key', key: keyOf(oldImage) });
|
|
76
|
+
ops.push({ kind: 'upsert', row: newImage });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
if (oldIn)
|
|
81
|
+
ops.push({ kind: 'delete-key', key: keyOf(project(change.oldRow)) });
|
|
82
|
+
if (newIn)
|
|
83
|
+
ops.push({ kind: 'upsert', row: project(change.newRow) });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (ops.length === 0)
|
|
87
|
+
return [];
|
|
88
|
+
const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
89
|
+
if (!backing) {
|
|
90
|
+
throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
|
|
91
|
+
}
|
|
92
|
+
const host = backingHost(ctx, backing);
|
|
93
|
+
const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
|
|
94
|
+
return host.applyMaintenance(connection, ops);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Validate the row images a maintenance apply WROTE (insert/update
|
|
98
|
+
* {@link BackingRowChange}s — a delete writes no image) against the plan's
|
|
99
|
+
* compiled {@link DerivedRowConstraintValidator}. Inline checks abort the
|
|
100
|
+
* writing statement with the maintained-table-attributed CONSTRAINT error;
|
|
101
|
+
* auto-deferred checks (subquery CHECK, every child-side FK) queue to the
|
|
102
|
+
* deferred-constraint queue and validate at commit. Deferred entries are
|
|
103
|
+
* pinned to the backing connection the maintenance write used (resolved from
|
|
104
|
+
* the per-statement cache, or re-resolved deterministically — the same
|
|
105
|
+
* connection either way) so commit-time evaluation reads the same pending
|
|
106
|
+
* state, mirroring the DML pipeline's active-connection capture.
|
|
107
|
+
*/
|
|
108
|
+
export async function validateDerivedChanges(ctx, plan, validator, changes, cache) {
|
|
109
|
+
let connectionId;
|
|
110
|
+
if (validator.checks.some(c => c.needsDeferred)) {
|
|
111
|
+
const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
112
|
+
if (backing) {
|
|
113
|
+
const host = backingHost(ctx, backing);
|
|
114
|
+
const conn = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
|
|
115
|
+
connectionId = conn.connectionId;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
for (const change of changes) {
|
|
119
|
+
if (change.op === 'delete')
|
|
120
|
+
continue;
|
|
121
|
+
await validateDerivedRowImage(ctx, validator, change.newRow, connectionId);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Row-time guard: reject a maintenance write that would store a NULL into a backing column
|
|
126
|
+
* the schema declares NOT NULL *and* that is a physical-PK member whose re-derived body
|
|
127
|
+
* output turned nullable — the row-time analogue of the refresh-path
|
|
128
|
+
* `assertNoNullInNotNullSeededPk` (runtime/emit/materialized-view-helpers.ts). Row-time
|
|
129
|
+
* maintenance is the PRIMARY silent-corruption vector: it fires at the source
|
|
130
|
+
* insert/update, before any refresh, so without this guard a NULL lands in a
|
|
131
|
+
* declared-NOT-NULL PK column with no error.
|
|
132
|
+
*
|
|
133
|
+
* The offending skew (a NOT-NULL ordering-seeded PK column over a loosened source) is
|
|
134
|
+
* precomputed once at plan build into {@link MaintenancePlanCommon.nullGuardColumns}
|
|
135
|
+
* (`undefined` for nearly every MV — the zero-overhead gate), so the common path pays a
|
|
136
|
+
* single boolean check per maintained write and only the rare skewed MV scans its guarded
|
|
137
|
+
* columns per change. A `delete` writes no image and is skipped. The throw unwinds the source
|
|
138
|
+
* statement with nothing committed — the backing write rides the pending layer, discarded on
|
|
139
|
+
* a throw before commit, exactly like {@link validateDerivedChanges}. Called BEFORE the
|
|
140
|
+
* MV-over-MV cascade so a NULL row never reaches a consumer. See
|
|
141
|
+
* fix/bug-mv-rowtime-null-into-notnull-seeded-pk.
|
|
142
|
+
*/
|
|
143
|
+
export function assertNoNullInNotNullSeededPkRowTime(plan, changes) {
|
|
144
|
+
const guard = plan.nullGuardColumns;
|
|
145
|
+
if (!guard)
|
|
146
|
+
return;
|
|
147
|
+
for (const change of changes) {
|
|
148
|
+
if (change.op === 'delete')
|
|
149
|
+
continue; // a delete writes no image
|
|
150
|
+
for (const g of guard) {
|
|
151
|
+
const v = change.newRow[g.index];
|
|
152
|
+
if (v === null || v === undefined) {
|
|
153
|
+
throw nullInNotNullSeededPkError(plan.mv.schemaName, plan.mv.name, g.name);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Fire **parent-side** referential enforcement over the backing rows a maintenance
|
|
160
|
+
* apply REMOVED or re-keyed (delete / key-update {@link BackingRowChange}s — an insert
|
|
161
|
+
* has no parent-side action). When the maintained table `M` is the PARENT (FK target)
|
|
162
|
+
* of an FK declared on an ordinary table `C` (`create table C (… references M(col) …)`),
|
|
163
|
+
* a maintenance-driven delete/key-update of the referenced `M` row would silently orphan
|
|
164
|
+
* `C`'s rows, bypassing the declared RESTRICT / referential action. This is the
|
|
165
|
+
* **dual** of {@link validateDerivedChanges} (constraints declared *on* `M`); the FK here
|
|
166
|
+
* lives on `C` and references `M`, so it is invisible to `M`'s own plan/validator.
|
|
167
|
+
*
|
|
168
|
+
* It reuses the SAME shared referential-action engine the DML executor and the
|
|
169
|
+
* external-change ingestion seam use — no third copy — applying its two functions over
|
|
170
|
+
* each backing change exactly as `database-external-changes.ts` does:
|
|
171
|
+
* - {@link assertTransitiveRestrictsForParentMutation} — pre-walk the transitive cascade
|
|
172
|
+
* closure and throw a CONSTRAINT error naming `M` on any surviving RESTRICT child;
|
|
173
|
+
* - {@link executeForeignKeyActionsAndLens} — run declared CASCADE / SET NULL / SET DEFAULT,
|
|
174
|
+
* re-entering the DML executor (the already-holding-the-mutex variant) for each cascaded
|
|
175
|
+
* child write, so `C`'s own constraints, watches, nested cascades, and (if `C` is itself
|
|
176
|
+
* an MV source) its own maintenance all fire.
|
|
177
|
+
*
|
|
178
|
+
* Ordering: called AFTER the backing delta has landed in the pending layer (the RESTRICT
|
|
179
|
+
* walk runs POST-application — the child rows it keys off still exist because the cascade
|
|
180
|
+
* has not run yet) and AFTER `M`'s own image is validated, matching the DML executor's
|
|
181
|
+
* per-change order (capture → MV maintenance → FK actions) and the external-changes seam.
|
|
182
|
+
* `lensRouted = false`: a maintenance backing write is a physical basis write (maintained
|
|
183
|
+
* tables are not lens basis spines). A surviving RESTRICT throws up through
|
|
184
|
+
* {@link maintainRowTime} → the DML executor → the statement, rolling back the source write
|
|
185
|
+
* attributed to `M`.
|
|
186
|
+
*
|
|
187
|
+
* Gate: a cheap `foreign_keys`-pragma early-return keeps the pragma-off path free (the
|
|
188
|
+
* engine also early-returns, but skipping the `getTable` + loop avoids all per-change work).
|
|
189
|
+
* NOT gated on `plan.derivedRowValidator` — that gate is child-side (constraints *on* `M`);
|
|
190
|
+
* an inbound FK lives on `C` and leaves `M`'s plan untouched. Beyond the gate it fires
|
|
191
|
+
* unconditionally per delete/update change, but the engine no longer pays an `O(catalog)`
|
|
192
|
+
* scan: both calls route through `SchemaManager.getReferencingForeignKeys`, the precomputed
|
|
193
|
+
* reverse-FK index, so an `M` that nothing references resolves to the shared empty bucket and
|
|
194
|
+
* each call early-returns in O(1) — a maintained table with no inbound FK (the common case)
|
|
195
|
+
* pays only the pragma check plus one map lookup per delete/key-update change.
|
|
196
|
+
*/
|
|
197
|
+
export async function enforceParentSideReferentialActions(ctx, plan, changes) {
|
|
198
|
+
const db = ctx;
|
|
199
|
+
if (!db.options.getBooleanOption('foreign_keys'))
|
|
200
|
+
return; // cheap gate; engine early-returns too
|
|
201
|
+
// The backing `TableSchema` — same object validateDerivedChanges resolves; its `.name`
|
|
202
|
+
// equals `M`'s, so an FK on `C` (`references M`) matches the engine's referencing scan.
|
|
203
|
+
const parent = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
204
|
+
if (!parent)
|
|
205
|
+
return; // backing gone ⇒ MV already broken
|
|
206
|
+
for (const change of changes) {
|
|
207
|
+
if (change.op === 'insert')
|
|
208
|
+
continue; // inserts have no parent-side actions
|
|
209
|
+
await assertTransitiveRestrictsForParentMutation(db, parent, change.op, change.oldRow, change.newRow);
|
|
210
|
+
await executeForeignKeyActionsAndLens(db, parent, change.op, change.oldRow, change.newRow);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Resolve the {@link BackingHost} capability surface for a backing table —
|
|
215
|
+
* see `vtab/backing-host.ts` for the contract. The host is resolved fresh per
|
|
216
|
+
* use (a map lookup on the owning module), so a drop+recreate of the backing
|
|
217
|
+
* always yields the new incarnation's host.
|
|
218
|
+
*/
|
|
219
|
+
export function backingHost(ctx, backing) {
|
|
220
|
+
// The ctx IS the Database (same construction as buildMaintenancePlan's cast).
|
|
221
|
+
return resolveBackingHost(ctx, backing);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Obtain (lazily create + register) the backing table's
|
|
225
|
+
* {@link VirtualTableConnection} for the current transaction. Reuses the same
|
|
226
|
+
* connection a `select` from the MV resolves to (so reads-own-writes holds) —
|
|
227
|
+
* matched among the Database's registered connections by
|
|
228
|
+
* {@link BackingHost.ownsConnection}, which is pinned to the live backing
|
|
229
|
+
* incarnation; a freshly created connection is registered with the Database so
|
|
230
|
+
* the coordinated commit/rollback covers its pending state in lockstep with the
|
|
231
|
+
* source write.
|
|
232
|
+
*
|
|
233
|
+
* When an optional per-statement {@link BackingConnectionCache} is supplied, the
|
|
234
|
+
* scan over the Database's active connections (the dominant per-row cost on a bulk
|
|
235
|
+
* write) is paid once per (statement, backing): a hit returns the cached connection
|
|
236
|
+
* directly, and a miss caches whichever connection the scan resolves — or the one it
|
|
237
|
+
* lazily creates + registers. Caching the resolved/created connection is sound
|
|
238
|
+
* because the scan is deterministic within a statement (nothing interleaves between
|
|
239
|
+
* a statement's rows to change which connection a `select` from the MV picks), so the
|
|
240
|
+
* cache holds exactly what an uncached re-resolution would return.
|
|
241
|
+
*/
|
|
242
|
+
export async function getBackingConnection(ctx, host, qualifiedName, cache) {
|
|
243
|
+
const cacheKey = qualifiedName.toLowerCase();
|
|
244
|
+
const cached = cache?.get(cacheKey);
|
|
245
|
+
if (cached)
|
|
246
|
+
return cached;
|
|
247
|
+
for (const c of ctx.getConnectionsForTable(qualifiedName)) {
|
|
248
|
+
if (host.ownsConnection(c)) {
|
|
249
|
+
cache?.set(cacheKey, c);
|
|
250
|
+
return c;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
const conn = host.connect();
|
|
254
|
+
await ctx.registerConnection(conn);
|
|
255
|
+
cache?.set(cacheKey, conn);
|
|
256
|
+
return conn;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Execute a cached key-filtered residual for one affected key tuple, returning its
|
|
260
|
+
* result rows (0 or 1 for the aggregate shape; 0..N for the lateral-TVF fan-out shape).
|
|
261
|
+
* Bound through a fresh {@link RuntimeContext} on the live `db` so the residual's source
|
|
262
|
+
* scan reuses `T`'s transaction connection and reads this statement's pending writes
|
|
263
|
+
* (reads-own-writes) — the synchronous analogue of
|
|
264
|
+
* `database-assertions.ts:executeResidualPerTuple`. Shared by the residual-recompute
|
|
265
|
+
* (`'gk'`) and prefix-delete (`'pk'`) arms.
|
|
266
|
+
*/
|
|
267
|
+
export async function runResidual(ctx, residualScheduler, bindParamPrefix, keyTuple) {
|
|
268
|
+
const params = {};
|
|
269
|
+
for (let i = 0; i < keyTuple.length; i++) {
|
|
270
|
+
params[`${bindParamPrefix}${i}`] = keyTuple[i];
|
|
271
|
+
}
|
|
272
|
+
return runScheduler(ctx, residualScheduler, params);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Run a cached maintenance scheduler to completion against **live mid-transaction source
|
|
276
|
+
* state** and collect its result rows. Bound through a fresh strict {@link RuntimeContext}
|
|
277
|
+
* on the live `db` so the scan reuses the source's transaction connection and reads this
|
|
278
|
+
* statement's pending writes (reads-own-writes). The no-`stmt`, fresh-context shape is the
|
|
279
|
+
* synchronous analogue of `database-assertions.ts:executeResidualPerTuple`. Shared by the
|
|
280
|
+
* key-filtered residual arms ({@link runResidual}, parameterized) and the whole-body
|
|
281
|
+
* full-rebuild arm ({@link applyFullRebuild}, no params).
|
|
282
|
+
*/
|
|
283
|
+
export async function runScheduler(ctx, scheduler, params) {
|
|
284
|
+
const rctx = {
|
|
285
|
+
db: ctx,
|
|
286
|
+
stmt: undefined,
|
|
287
|
+
params,
|
|
288
|
+
context: createStrictRowContextMap(),
|
|
289
|
+
tableContexts: wrapTableContextsStrict(new Map()),
|
|
290
|
+
enableMetrics: false,
|
|
291
|
+
};
|
|
292
|
+
const result = await scheduler.run(rctx);
|
|
293
|
+
const rows = [];
|
|
294
|
+
if (isAsyncIterable(result)) {
|
|
295
|
+
for await (const r of result)
|
|
296
|
+
rows.push(r);
|
|
297
|
+
}
|
|
298
|
+
return rows;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Compute a **forward** key-filtered residual plan's per-row backing delta and apply it:
|
|
302
|
+
* derive the affected binding key(s) from the changed row (OLD ∪ NEW, deduped), re-run
|
|
303
|
+
* the key-filtered residual against live source state for each, and apply the **keyed
|
|
304
|
+
* diff**: a non-empty recomputed slice is upserted (the backing key IS the affected key,
|
|
305
|
+
* so the upsert replaces the old row wholesale — no delete-first — and the host's
|
|
306
|
+
* value-identical upsert skip turns a no-op recompute into ZERO effective changes
|
|
307
|
+
* instead of delete+insert churn); an emptied slice (residual returns nothing) emits the
|
|
308
|
+
* point delete, removing the stale backing row (nothing reported if it was already
|
|
309
|
+
* absent). Returns the effective {@link BackingRowChange}(s) the backing layer realized,
|
|
310
|
+
* for the MV-over-MV cascade — a real same-key change now reports one `update`.
|
|
311
|
+
*
|
|
312
|
+
* Shared by the single-source aggregate (`'residual-recompute'`, group key, ≤1 row per
|
|
313
|
+
* key) and the 1:1-join (`'join-residual'`, the driving table `T`'s PK, exactly the one
|
|
314
|
+
* joined row per key) arms — both bind on the forward driving source via
|
|
315
|
+
* {@link ForwardResidualPlan}; the only difference is the binding (group vs PK).
|
|
316
|
+
*
|
|
317
|
+
* Per-row recompute is correct without per-statement batching: every change to a key
|
|
318
|
+
* triggers a full recompute of that key's slice from live (reads-own-writes) state, so
|
|
319
|
+
* the last change to touch a key writes the authoritative backing row. Batching/dedup
|
|
320
|
+
* across a whole statement is an affordability optimization deferred with the
|
|
321
|
+
* statement-flush boundary (see the ticket handoff).
|
|
322
|
+
*/
|
|
323
|
+
export async function applyForwardResidual(ctx, plan, change, cache) {
|
|
324
|
+
// Distinct affected keys (OLD ∪ NEW), deduped on the backing-key values: a
|
|
325
|
+
// non-key-changing update recomputes the group once; a key-changing update
|
|
326
|
+
// recomputes both the old and the new group.
|
|
327
|
+
const affected = new Map();
|
|
328
|
+
const addFrom = (row) => {
|
|
329
|
+
const keyVals = plan.backingPkSourceCols.map(sc => row[sc]);
|
|
330
|
+
const dedupKey = canonKeyValues(keyVals);
|
|
331
|
+
if (affected.has(dedupKey))
|
|
332
|
+
return;
|
|
333
|
+
affected.set(dedupKey, {
|
|
334
|
+
keyTuple: plan.bindColumns.map(c => row[c]),
|
|
335
|
+
keyVals,
|
|
336
|
+
deleteKey: buildPrimaryKeyFromValues(keyVals, plan.backingPkDefinition),
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
if (change.op === 'insert')
|
|
340
|
+
addFrom(change.newRow);
|
|
341
|
+
else if (change.op === 'delete')
|
|
342
|
+
addFrom(change.oldRow);
|
|
343
|
+
else {
|
|
344
|
+
addFrom(change.oldRow);
|
|
345
|
+
addFrom(change.newRow);
|
|
346
|
+
}
|
|
347
|
+
const ops = [];
|
|
348
|
+
for (const { keyTuple, keyVals, deleteKey } of affected.values()) {
|
|
349
|
+
const recomputed = await runResidual(ctx, plan.residualScheduler, plan.bindParamPrefix, keyTuple);
|
|
350
|
+
// Keep only the recomputed rows whose backing key equals the affected key.
|
|
351
|
+
// The residual for key K must only contribute K's slice; any other row is
|
|
352
|
+
// spurious and is dropped. This is the soundness net for an emptied group: when
|
|
353
|
+
// no source row matches the key, a *correct* grouped residual returns zero rows,
|
|
354
|
+
// but a constant-pinned multi-column grouped aggregate is mis-collapsed by the
|
|
355
|
+
// optimizer into a *scalar* aggregate that emits one all-NULL `count=0` row over
|
|
356
|
+
// the empty input (a pre-existing optimizer bug, filed separately as
|
|
357
|
+
// `fix/optimizer-constant-group-aggregate-empty-input-spurious-row`). That row's
|
|
358
|
+
// key ≠ K, so it is filtered here and the delete-without-upsert correctly removes
|
|
359
|
+
// the emptied group's backing row.
|
|
360
|
+
const slice = recomputed.filter(row => residualRowMatchesKey(plan, row, keyVals));
|
|
361
|
+
if (slice.length === 0) {
|
|
362
|
+
// Emptied slice: delete-without-upsert removes the stale backing row (the
|
|
363
|
+
// host reports nothing if the key was already absent).
|
|
364
|
+
ops.push({ kind: 'delete-key', key: deleteKey });
|
|
365
|
+
}
|
|
366
|
+
else {
|
|
367
|
+
// The slice shares the affected backing key, so each upsert REPLACES the old
|
|
368
|
+
// backing row — no delete-first — and the host's value-identical skip
|
|
369
|
+
// (vtab/backing-host.ts) suppresses a recompute that changed nothing.
|
|
370
|
+
for (const row of slice)
|
|
371
|
+
ops.push({ kind: 'upsert', row });
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
if (ops.length === 0)
|
|
375
|
+
return [];
|
|
376
|
+
const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
377
|
+
if (!backing) {
|
|
378
|
+
throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
|
|
379
|
+
}
|
|
380
|
+
const host = backingHost(ctx, backing);
|
|
381
|
+
const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
|
|
382
|
+
return host.applyMaintenance(connection, ops);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* True iff `row`'s backing primary-key columns equal `keyVals` (the affected binding
|
|
386
|
+
* key, in `backingPkDefinition` order), under each column's collation. Used to keep
|
|
387
|
+
* only the residual row(s) belonging to the recomputed key — see
|
|
388
|
+
* {@link applyForwardResidual}.
|
|
389
|
+
*/
|
|
390
|
+
export function residualRowMatchesKey(plan, row, keyVals) {
|
|
391
|
+
for (let i = 0; i < plan.backingPkDefinition.length; i++) {
|
|
392
|
+
const d = plan.backingPkDefinition[i];
|
|
393
|
+
if (compareSqlValuesFast(row[d.index], keyVals[i], d.collationFn) !== 0)
|
|
394
|
+
return false;
|
|
395
|
+
}
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Dispatch a `'join-residual'` plan on **which source changed**. A write to the driving
|
|
400
|
+
* table `T` (`changedBase === plan.sourceBase`) is the forward case — recompute the one
|
|
401
|
+
* joined row keyed on `T`'s PK, identical to a size-1 `'row'`-binding residual — so it
|
|
402
|
+
* delegates straight to {@link applyForwardResidual} (delete old backing slice → run the
|
|
403
|
+
* `T`-keyed residual → upsert). A write to the lookup table `P` is the reverse case,
|
|
404
|
+
* handled by {@link applyLookupResidual}.
|
|
405
|
+
*/
|
|
406
|
+
export async function applyJoinResidual(ctx, plan, change, changedBase, cache) {
|
|
407
|
+
if (changedBase === plan.sourceBase) {
|
|
408
|
+
return applyForwardResidual(ctx, plan, change, cache);
|
|
409
|
+
}
|
|
410
|
+
return applyLookupResidual(ctx, plan, change, cache);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Maintain a `'join-residual'` MV for a **lookup-side (`P`)** change: refresh the joined
|
|
414
|
+
* rows referencing each affected `P` key. Derive the affected `P` key(s) from the changed
|
|
415
|
+
* row (OLD ∪ NEW, deduped on `P`'s PK), and for each run the in-scope lookup-keyed residual
|
|
416
|
+
* (`… where P.pk = :pk0`, the body's WHERE retained) against live source state — returning
|
|
417
|
+
* every currently in-scope joined row, each carrying its `T.pk` backing key — and **upsert**
|
|
418
|
+
* each.
|
|
419
|
+
*
|
|
420
|
+
* **Upsert-only is sound for a no-WHERE / `T`-only-WHERE body.** For an inner/cross join with
|
|
421
|
+
* enforced RI and a predicate that cannot reference `P`, the *set* of backing rows referencing
|
|
422
|
+
* a given `P` row is `{ T : T.fk = P.pk }`, determined entirely by `T.fk` (a `T` column the
|
|
423
|
+
* `P` write cannot change), and the WHERE — over `T` only — cannot flip on a `P` write. So a
|
|
424
|
+
* `P` change can only re-derive the lookup-projected columns of those existing backing rows
|
|
425
|
+
* (an upsert at the unchanged `T.pk` key), never add or remove one: a `P` insert with no
|
|
426
|
+
* referencing `T` rows yields an empty residual (no-op); a `P` delete is only admissible (RI)
|
|
427
|
+
* when no `T` references it (empty residual); a `P` payload update upserts the affected rows
|
|
428
|
+
* with the new value.
|
|
429
|
+
*
|
|
430
|
+
* **A `P`-referencing WHERE needs the delete-capable pass.** When the body WHERE references
|
|
431
|
+
* `P`, a `P` write can flip a joined row's WHERE truth and so add or remove its backing row —
|
|
432
|
+
* which the in-scope upsert above (it returns *only* in-scope rows) could never delete. The
|
|
433
|
+
* builder then supplies `lookupMembershipResidualScheduler` (the body with the WHERE stripped,
|
|
434
|
+
* keyed on `P`). Per affected `P` key this runs both residuals against the same live state and
|
|
435
|
+
* applies the **keyed diff**: it **deletes** only the membership keys the in-scope recompute no
|
|
436
|
+
* longer produces (rows that left scope — the delete keys come from live `T` via the join, so
|
|
437
|
+
* they match existing backing keys and touch nothing belonging to another `P`; membership and
|
|
438
|
+
* in-scope rows read the same live state, so their key bytes match exactly), and **upserts**
|
|
439
|
+
* every in-scope row. A row leaving scope is deleted (removed); a row entering scope is
|
|
440
|
+
* upserted (added); an unchanged in-scope row's upsert is suppressed by the host's
|
|
441
|
+
* value-identical skip (vtab/backing-host.ts) — ZERO effective changes instead of the former
|
|
442
|
+
* delete+insert refresh churn; a changed in-scope row reports one `update`. The membership
|
|
443
|
+
* residual MUST ignore the WHERE — else a row leaving scope would never be deleted.
|
|
444
|
+
*
|
|
445
|
+
* A `T`-side membership change (insert/delete/FK-move) is the *forward* path's job and fires
|
|
446
|
+
* its own maintenance. Returns the effective {@link BackingRowChange}(s) for the MV-over-MV
|
|
447
|
+
* cascade. Per-row recompute is correct without batching for the same
|
|
448
|
+
* last-write-wins-against-live-state reason as {@link applyForwardResidual}.
|
|
449
|
+
*/
|
|
450
|
+
export async function applyLookupResidual(ctx, plan, change, cache) {
|
|
451
|
+
// Distinct affected lookup keys (OLD ∪ NEW), deduped on `P`'s PK values.
|
|
452
|
+
const affected = new Map();
|
|
453
|
+
const addFrom = (row) => {
|
|
454
|
+
const keyTuple = plan.lookupBindColumns.map(c => row[c]);
|
|
455
|
+
const dedupKey = canonKeyValues(keyTuple);
|
|
456
|
+
if (!affected.has(dedupKey))
|
|
457
|
+
affected.set(dedupKey, keyTuple);
|
|
458
|
+
};
|
|
459
|
+
if (change.op === 'insert')
|
|
460
|
+
addFrom(change.newRow);
|
|
461
|
+
else if (change.op === 'delete')
|
|
462
|
+
addFrom(change.oldRow);
|
|
463
|
+
else {
|
|
464
|
+
addFrom(change.oldRow);
|
|
465
|
+
addFrom(change.newRow);
|
|
466
|
+
}
|
|
467
|
+
const ops = [];
|
|
468
|
+
for (const keyTuple of affected.values()) {
|
|
469
|
+
const recomputed = await runResidual(ctx, plan.lookupResidualScheduler, plan.lookupBindParamPrefix, keyTuple);
|
|
470
|
+
// Delete-capable (P-referencing WHERE): keyed diff of the membership residual
|
|
471
|
+
// (WHERE stripped) against the in-scope recompute — delete ONLY the membership
|
|
472
|
+
// keys the recompute no longer produces (rows that left the WHERE scope), not
|
|
473
|
+
// every member. Both residuals read the same live state, so a surviving row's
|
|
474
|
+
// key bytes match exactly (the byte-canonical set lookup is exact). Deletes
|
|
475
|
+
// precede upserts, preserving the prior arm's ordering discipline.
|
|
476
|
+
if (plan.lookupMembershipResidualScheduler) {
|
|
477
|
+
const produced = new Set(recomputed.map(row => canonKeyValues(plan.backingPkDefinition.map(d => row[d.index]))));
|
|
478
|
+
const members = await runResidual(ctx, plan.lookupMembershipResidualScheduler, plan.lookupBindParamPrefix, keyTuple);
|
|
479
|
+
for (const row of members) {
|
|
480
|
+
const keyVals = plan.backingPkDefinition.map(d => row[d.index]);
|
|
481
|
+
if (produced.has(canonKeyValues(keyVals)))
|
|
482
|
+
continue; // still in scope — upserted below
|
|
483
|
+
ops.push({ kind: 'delete-key', key: buildPrimaryKeyFromValues(keyVals, plan.backingPkDefinition) });
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
// Upsert every in-scope row; the host's value-identical skip suppresses the
|
|
487
|
+
// unchanged ones (an in-scope refresh that changed nothing reports nothing).
|
|
488
|
+
for (const row of recomputed)
|
|
489
|
+
ops.push({ kind: 'upsert', row });
|
|
490
|
+
}
|
|
491
|
+
if (ops.length === 0)
|
|
492
|
+
return [];
|
|
493
|
+
const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
494
|
+
if (!backing) {
|
|
495
|
+
throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
|
|
496
|
+
}
|
|
497
|
+
const host = backingHost(ctx, backing);
|
|
498
|
+
const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
|
|
499
|
+
return host.applyMaintenance(connection, ops);
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Compute a `'prefix-delete'` plan's per-row backing delta and apply it: derive the
|
|
503
|
+
* affected base key(s) from the changed row (OLD ∪ NEW, deduped on the base key), and
|
|
504
|
+
* for each — re-run the base-PK-keyed residual against live source state and apply the
|
|
505
|
+
* **keyed diff against the existing effective fan-out slice** (read via the host's
|
|
506
|
+
* `scanEffective` with the base prefix, pending over committed — the same contiguous
|
|
507
|
+
* range the former wholesale `'delete-by-prefix'` removed): delete ONLY the existing
|
|
508
|
+
* keys the recompute no longer produces, upsert every recomputed row (the host's
|
|
509
|
+
* value-identical skip suppresses the unchanged ones). A base-PK-changing UPDATE
|
|
510
|
+
* recomputes both the OLD base key (slice diffs to all-deletes; the residual returns
|
|
511
|
+
* nothing for the now-absent old PK) and the NEW base key (new fan-out upserted); a
|
|
512
|
+
* DELETE diffs the old slice to all-deletes; an INSERT diffs against an empty slice
|
|
513
|
+
* (all upserts). An emptied/shrunk fan-out keeps the delete-without-upsert exactly —
|
|
514
|
+
* a disappearance is never "skipped". Returns the effective
|
|
515
|
+
* {@link BackingRowChange}(s) the backing layer realized, for the MV-over-MV cascade.
|
|
516
|
+
*
|
|
517
|
+
* Prefix-scan soundness is unchanged from the wholesale arm: the diff's slice read
|
|
518
|
+
* uses the same binary `equalityPrefix` scan `'delete-by-prefix'` used, sound under
|
|
519
|
+
* the build-time collation gate (the backing base-PK prefix inherits the source PK
|
|
520
|
+
* collation, and source-PK uniqueness collapses each collation class to one binary
|
|
521
|
+
* value). The stored slice's prefix bytes always equal the OLD image's (the slice was
|
|
522
|
+
* projected from that very source row), and OLD ∪ NEW both iterate, so a case-only
|
|
523
|
+
* base-PK rewrite still converges: the OLD-prefix pass pairs the slice with the
|
|
524
|
+
* recomputed rows (key pairing is collation-aware — the btree's identity — so a
|
|
525
|
+
* collation-equal key is REPLACED by its upsert, never also deleted) and the byte
|
|
526
|
+
* change surfaces as `update`s that re-key the stored bytes.
|
|
527
|
+
*
|
|
528
|
+
* Structurally the same as {@link applyForwardResidual}, differing only in the
|
|
529
|
+
* **prefix-slice** diff (one base row owns N backing rows sharing the prefix) and the
|
|
530
|
+
* **N-row** residual. Per-row recompute is correct without per-statement batching: the
|
|
531
|
+
* residual reads live (reads-own-writes) state, so the last write to a base key produces
|
|
532
|
+
* the authoritative slice. (Statement-level dedup of distinct base keys is the same
|
|
533
|
+
* affordability optimization deferred for the aggregate arm.)
|
|
534
|
+
*/
|
|
535
|
+
export async function applyPrefixDelete(ctx, plan, change, cache) {
|
|
536
|
+
// Distinct affected base keys (OLD ∪ NEW), deduped on the base-PK values. `keyTuple`
|
|
537
|
+
// binds the residual (`pk{i}`); `prefix` is the slice's leading-PK equality key (the
|
|
538
|
+
// base-PK values in backing-PK order — identical here since the base PK leads the
|
|
539
|
+
// backing PK, but kept distinct for clarity).
|
|
540
|
+
const affected = new Map();
|
|
541
|
+
const addFrom = (row) => {
|
|
542
|
+
const keyTuple = plan.bindColumns.map(c => row[c]);
|
|
543
|
+
const dedupKey = canonKeyValues(keyTuple);
|
|
544
|
+
if (affected.has(dedupKey))
|
|
545
|
+
return;
|
|
546
|
+
affected.set(dedupKey, { keyTuple, prefix: plan.backingPrefixSourceCols.map(sc => row[sc]) });
|
|
547
|
+
};
|
|
548
|
+
if (change.op === 'insert')
|
|
549
|
+
addFrom(change.newRow);
|
|
550
|
+
else if (change.op === 'delete')
|
|
551
|
+
addFrom(change.oldRow);
|
|
552
|
+
else {
|
|
553
|
+
addFrom(change.oldRow);
|
|
554
|
+
addFrom(change.newRow);
|
|
555
|
+
}
|
|
556
|
+
// Resolved up front (unlike the point-op arms): the keyed diff reads the existing
|
|
557
|
+
// effective slice before any op exists. The former wholesale arm always emitted ops,
|
|
558
|
+
// so this resolves no more connections than it did.
|
|
559
|
+
const backing = ctx.schemaManager.getTable(plan.backingSchema, plan.backingTableName);
|
|
560
|
+
if (!backing) {
|
|
561
|
+
throw new QuereusError(`Internal error: backing table '${plan.backingTableName}' for materialized view '${plan.mv.name}' not found`, StatusCode.INTERNAL);
|
|
562
|
+
}
|
|
563
|
+
const host = backingHost(ctx, backing);
|
|
564
|
+
const connection = await getBackingConnection(ctx, host, `${plan.backingSchema}.${plan.backingTableName}`, cache);
|
|
565
|
+
const ops = [];
|
|
566
|
+
for (const { keyTuple, prefix } of affected.values()) {
|
|
567
|
+
const recomputed = await runResidual(ctx, plan.residualScheduler, plan.bindParamPrefix, keyTuple);
|
|
568
|
+
// The residual for base key K filters T to K, so every row it returns shares K's
|
|
569
|
+
// base-PK prefix; the prefix-match guard is a defensive soundness net (mirrors
|
|
570
|
+
// the aggregate arm's `residualRowMatchesKey`).
|
|
571
|
+
const slice = recomputed.filter(row => residualRowMatchesBasePrefix(plan, row, prefix));
|
|
572
|
+
// Existing effective fan-out rows for this base prefix (pending over committed).
|
|
573
|
+
const existing = [];
|
|
574
|
+
for await (const row of host.scanEffective(connection, { equalityPrefix: prefix })) {
|
|
575
|
+
existing.push(row);
|
|
576
|
+
}
|
|
577
|
+
// Keyed diff. Key pairing is collation-aware over the full backing PK (the btree's
|
|
578
|
+
// identity): a recomputed row whose key is collation-equal to an existing row
|
|
579
|
+
// REPLACES it via the upsert below, so it must not also be deleted. Deletes precede
|
|
580
|
+
// upserts (the wholesale arm's ordering discipline). The delete keys are built from
|
|
581
|
+
// the EXISTING rows' stored values, so the host's collation-aware point lookup
|
|
582
|
+
// always finds them.
|
|
583
|
+
for (const ex of existing) {
|
|
584
|
+
if (slice.some(row => backingPkEqual(plan.backingPkDefinition, row, ex)))
|
|
585
|
+
continue;
|
|
586
|
+
ops.push({
|
|
587
|
+
kind: 'delete-key',
|
|
588
|
+
key: buildPrimaryKeyFromValues(plan.backingPkDefinition.map(d => ex[d.index]), plan.backingPkDefinition),
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
for (const row of slice)
|
|
592
|
+
ops.push({ kind: 'upsert', row });
|
|
593
|
+
}
|
|
594
|
+
if (ops.length === 0)
|
|
595
|
+
return [];
|
|
596
|
+
return host.applyMaintenance(connection, ops);
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* True iff two backing rows agree on every backing-PK column under that column's
|
|
600
|
+
* collation — the btree's key identity. Pairs an existing slice row with the
|
|
601
|
+
* recomputed row that replaces it in {@link applyPrefixDelete}'s keyed diff.
|
|
602
|
+
*/
|
|
603
|
+
export function backingPkEqual(pkDef, a, b) {
|
|
604
|
+
for (const d of pkDef) {
|
|
605
|
+
if (compareSqlValuesFast(a[d.index], b[d.index], d.collationFn) !== 0)
|
|
606
|
+
return false;
|
|
607
|
+
}
|
|
608
|
+
return true;
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* True iff `row`'s **leading** (base-prefix) backing-PK columns equal `prefixVals` (the
|
|
612
|
+
* affected base key, in backing-PK order), under each column's collation. Keeps only the
|
|
613
|
+
* residual fan-out row(s) belonging to the recomputed base key — see
|
|
614
|
+
* {@link applyPrefixDelete}.
|
|
615
|
+
*/
|
|
616
|
+
export function residualRowMatchesBasePrefix(plan, row, prefixVals) {
|
|
617
|
+
for (let i = 0; i < plan.basePrefixLength; i++) {
|
|
618
|
+
const d = plan.backingPkDefinition[i];
|
|
619
|
+
if (compareSqlValuesFast(row[d.index], prefixVals[i], d.collationFn) !== 0)
|
|
620
|
+
return false;
|
|
621
|
+
}
|
|
622
|
+
return true;
|
|
623
|
+
}
|
|
624
|
+
//# sourceMappingURL=database-materialized-views-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-materialized-views-apply.js","sourceRoot":"","sources":["../../../src/core/database-materialized-views-apply.ts"],"names":[],"mappings":"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"}
|