@quereus/quereus 4.3.1 → 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.js +2 -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.js +3 -3
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.js +2 -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 +22 -20
- 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/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 +70 -31
- 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 +11 -4
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +35 -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 +38 -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
|
@@ -15,7 +15,28 @@ let transactionLayerCounter = 1000;
|
|
|
15
15
|
export class TransactionLayer {
|
|
16
16
|
layerId;
|
|
17
17
|
parentLayer;
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Inherited verbatim from the parent layer: this layer's secondary BTrees are
|
|
20
|
+
* built over the parent's (`new MemoryIndex(..., parentSecondaryTree)`), so the
|
|
21
|
+
* child's `compareKeys` must come from the same collation function the parent
|
|
22
|
+
* ordered those nodes with.
|
|
23
|
+
*/
|
|
24
|
+
collationResolver;
|
|
25
|
+
/**
|
|
26
|
+
* Schema when this layer was started. Replaced when DDL runs inside this layer's own
|
|
27
|
+
* transaction: by {@link adoptSchema} for additive index/constraint DDL, a secondary-index
|
|
28
|
+
* re-key from `alter column … set collate`, and index/constraint removal (`drop index` /
|
|
29
|
+
* `drop constraint`), and by {@link rekeyPrimaryKey} when that collate change lands on a
|
|
30
|
+
* primary-key column. The column set is identical across every such swap.
|
|
31
|
+
*/
|
|
32
|
+
tableSchemaAtCreation;
|
|
33
|
+
/**
|
|
34
|
+
* Derived from {@link tableSchemaAtCreation}'s primary key definition, so the primary
|
|
35
|
+
* tree, every inherited secondary index, and every scan share one comparator/encoder
|
|
36
|
+
* set — and one pass of collation resolution. Rebuilt only by {@link rekeyPrimaryKey},
|
|
37
|
+
* which rebuilds the structures keyed by them in the same call.
|
|
38
|
+
*/
|
|
39
|
+
pkFunctions;
|
|
19
40
|
// Primary modifications BTree that inherits from parent
|
|
20
41
|
primaryModifications;
|
|
21
42
|
// Secondary index BTrees that inherit from parent's indexes
|
|
@@ -24,23 +45,33 @@ export class TransactionLayer {
|
|
|
24
45
|
_hasModifications = false;
|
|
25
46
|
/** Pending changes for event emission. Null if tracking disabled. */
|
|
26
47
|
pendingChanges = null;
|
|
48
|
+
// NOTE: always-on, one entry per record{Upsert,Delete} call — an ordered
|
|
49
|
+
// list, so repeated writes to the same PK are all retained (last-write-wins is
|
|
50
|
+
// applied at replay by re-deriving each key's effective row on the new head).
|
|
51
|
+
// If a write-heavy transaction ever shows memory pressure from this log,
|
|
52
|
+
// collapse it to a PK-keyed last-write map (only the net per-PK effect is ever
|
|
53
|
+
// replayed).
|
|
54
|
+
/** Always-maintained log of this layer's own structural writes (see {@link OwnWrite}). */
|
|
55
|
+
ownWrites = [];
|
|
27
56
|
constructor(parent) {
|
|
28
57
|
this.layerId = transactionLayerCounter++;
|
|
29
58
|
this.parentLayer = parent;
|
|
59
|
+
this.collationResolver = parent.collationResolver;
|
|
30
60
|
const schema = parent.getSchema();
|
|
31
61
|
if (!schema) {
|
|
32
62
|
throw new QuereusError(`TransactionLayer: parent layer ${parent.getLayerId()} has no schema. ` +
|
|
33
63
|
'This usually means a savepoint snapshot was created before the overlay was initialised.', StatusCode.INTERNAL);
|
|
34
64
|
}
|
|
35
65
|
this.tableSchemaAtCreation = schema; // Schema is fixed at creation
|
|
66
|
+
this.pkFunctions = createPrimaryKeyFunctions(schema, this.collationResolver);
|
|
36
67
|
// Initialize primary modifications BTree with parent's primary tree as base
|
|
37
|
-
const {
|
|
68
|
+
const { extractFromRow, compare: primaryKeyComparator } = this.pkFunctions;
|
|
38
69
|
const btreeKeyFromValue = (value) => {
|
|
39
|
-
const result =
|
|
70
|
+
const result = extractFromRow(value);
|
|
40
71
|
return result;
|
|
41
72
|
};
|
|
42
73
|
const parentPrimaryTree = parent.getModificationTree('primary');
|
|
43
|
-
this.primaryModifications = new BTree(btreeKeyFromValue, primaryKeyComparator, parentPrimaryTree || undefined // Use parent's primary tree as base
|
|
74
|
+
this.primaryModifications = new BTree(btreeKeyFromValue, primaryKeyComparator, { base: parentPrimaryTree || undefined } // Use parent's primary tree as base
|
|
44
75
|
);
|
|
45
76
|
// Initialize secondary indexes that inherit from parent's secondary indexes
|
|
46
77
|
this.secondaryIndexes = new Map();
|
|
@@ -53,15 +84,301 @@ export class TransactionLayer {
|
|
|
53
84
|
// All layers of a table derive the PK comparator and encoder from the same PK
|
|
54
85
|
// definition, so an inherited entry's `primaryKeys` Map keys stay valid for this
|
|
55
86
|
// layer's value add/remove on each MemoryIndex entry.
|
|
56
|
-
const pkFunctions =
|
|
87
|
+
const pkFunctions = this.pkFunctions;
|
|
57
88
|
for (const indexSchema of schema.indexes) {
|
|
58
89
|
const parentSecondaryTree = this.parentLayer.getSecondaryIndexTree?.(indexSchema.name);
|
|
59
90
|
// Create MemoryIndex with inherited BTree
|
|
60
|
-
const memoryIndex = new MemoryIndex(indexSchema, schema.columns, pkFunctions.compare, pkFunctions.encode, parentSecondaryTree || undefined // Use parent's secondary index tree as base
|
|
91
|
+
const memoryIndex = new MemoryIndex(indexSchema, schema.columns, this.collationResolver, pkFunctions.compare, pkFunctions.encode, schema.name, parentSecondaryTree || undefined // Use parent's secondary index tree as base
|
|
61
92
|
);
|
|
62
93
|
this.secondaryIndexes.set(indexSchema.name, memoryIndex);
|
|
63
94
|
}
|
|
64
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Adopts a schema change that was applied to the table while THIS layer's transaction
|
|
98
|
+
* is still open, so the rest of that transaction reads and enforces the new structures.
|
|
99
|
+
* Three kinds of change reach here:
|
|
100
|
+
*
|
|
101
|
+
* - **Additive** (`create index` / `create unique index` / `add constraint … unique`):
|
|
102
|
+
* a name absent from {@link secondaryIndexes} is built and added. Without it, a layer
|
|
103
|
+
* created before the DDL keeps its creation-time schema: it has neither the new
|
|
104
|
+
* `IndexSchema` (so an index scan raises "Secondary index not found") nor the derived
|
|
105
|
+
* `uniqueConstraints` entry (so `checkUniqueConstraints` silently skips it and a
|
|
106
|
+
* colliding insert is accepted).
|
|
107
|
+
* - **Re-keying** (`alter column … set collate`): an index whose `IndexSchema` object
|
|
108
|
+
* is no longer the one this layer holds is REPLACED. `BaseLayer.rebuildAllSecondaryIndexes`
|
|
109
|
+
* hands every index a fresh BTree under the new collation, so a layer that kept its old
|
|
110
|
+
* `MemoryIndex` would go on comparing under the old collation over an orphaned tree —
|
|
111
|
+
* and, once it becomes the committed head at commit, would shadow the base's rebuilt
|
|
112
|
+
* structures entirely.
|
|
113
|
+
* - **Removal** (`drop index` / `drop constraint`): an index whose name the new schema no
|
|
114
|
+
* longer declares is DROPPED from {@link secondaryIndexes}. Without it the layer keeps the
|
|
115
|
+
* derived `uniqueConstraints` entry in its frozen schema and goes on enforcing a constraint
|
|
116
|
+
* that no longer exists, and an index scan can still reach the orphaned tree via
|
|
117
|
+
* {@link getSecondaryIndexTree}. An empty/undefined `newSchema.indexes` drops all of them.
|
|
118
|
+
* Like the additive side, a removal is NOT undone by `rollback to savepoint`: every layer in
|
|
119
|
+
* the chain adopts it, so the restored snapshot has the index dropped too (DDL is not
|
|
120
|
+
* transactional here — see `feat-ddl-transaction-capability`).
|
|
121
|
+
*
|
|
122
|
+
* An index is considered unchanged only when the NEW schema's `IndexSchema` is the very
|
|
123
|
+
* object the old schema carried. Every DDL path that re-keys rebuilds those objects, and
|
|
124
|
+
* every additive path preserves them, so identity is the exact discriminator.
|
|
125
|
+
*
|
|
126
|
+
* The caller MUST apply this to a whole parent chain oldest-first: each layer builds its
|
|
127
|
+
* `MemoryIndex` over its parent's tree for that index, so the parent's must already be the
|
|
128
|
+
* new one. Only the layer's OWN writes are re-indexed — everything below is inherited
|
|
129
|
+
* copy-on-write, exactly as {@link initializeSecondaryIndexes} does at construction.
|
|
130
|
+
*
|
|
131
|
+
* Never applied to a column-set or primary-key change: either would invalidate
|
|
132
|
+
* {@link pkFunctions} and the primary tree. A PK-column collation change goes to
|
|
133
|
+
* {@link rekeyPrimaryKey} instead, and `ensureSchemaChangeSafety` raises BUSY when any
|
|
134
|
+
* connection other than the DDL issuer holds a pending layer.
|
|
135
|
+
*/
|
|
136
|
+
adoptSchema(newSchema) {
|
|
137
|
+
const oldSchema = this.tableSchemaAtCreation;
|
|
138
|
+
this.tableSchemaAtCreation = newSchema;
|
|
139
|
+
// Additive + re-key: add an index the layer lacks, replace one the new schema rebuilt.
|
|
140
|
+
for (const indexSchema of newSchema.indexes ?? []) {
|
|
141
|
+
const held = this.secondaryIndexes.get(indexSchema.name);
|
|
142
|
+
const previous = oldSchema.indexes?.find(ix => ix.name === indexSchema.name);
|
|
143
|
+
if (held && previous === indexSchema)
|
|
144
|
+
continue;
|
|
145
|
+
const parentSecondaryTree = this.parentLayer.getSecondaryIndexTree?.(indexSchema.name);
|
|
146
|
+
const memoryIndex = new MemoryIndex(indexSchema, newSchema.columns, this.collationResolver, this.pkFunctions.compare, this.pkFunctions.encode, newSchema.name, parentSecondaryTree || undefined);
|
|
147
|
+
this.reindexOwnWrites(memoryIndex);
|
|
148
|
+
this.secondaryIndexes.set(indexSchema.name, memoryIndex);
|
|
149
|
+
}
|
|
150
|
+
// Removal (`drop index` / `drop constraint`): drop every held index the new schema no
|
|
151
|
+
// longer declares (empty/undefined `newSchema.indexes` drops all). Enforcement stops the
|
|
152
|
+
// moment the frozen schema loses the derived `uniqueConstraints` entry; dropping the
|
|
153
|
+
// orphaned `MemoryIndex` additionally keeps an index scan from reaching it.
|
|
154
|
+
const declared = new Set((newSchema.indexes ?? []).map(ix => ix.name));
|
|
155
|
+
for (const name of [...this.secondaryIndexes.keys()]) {
|
|
156
|
+
if (!declared.has(name))
|
|
157
|
+
this.secondaryIndexes.delete(name);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Adopts a schema change that re-keys the PRIMARY KEY — `alter column … set collate` on a
|
|
162
|
+
* PK column — applied while THIS layer's transaction is still open. Rebuilds
|
|
163
|
+
* {@link pkFunctions}, the primary tree, and every secondary index (each of which derives
|
|
164
|
+
* its `primaryKeyComparator` / `encode` from the PK definition), so nothing this layer owns
|
|
165
|
+
* survives the ALTER still keyed under the old collation.
|
|
166
|
+
*
|
|
167
|
+
* Like {@link adoptSchema}, the caller MUST apply this to a whole parent chain oldest-first
|
|
168
|
+
* (base layer already re-keyed): the new tree inherits copy-on-write from the parent's new
|
|
169
|
+
* one, so the parent's must already exist.
|
|
170
|
+
*
|
|
171
|
+
* ### Why {@link ownWrites} is rewritten to its net effect
|
|
172
|
+
*
|
|
173
|
+
* `ownWrites` is an ordered log that may touch one key repeatedly, and under the new
|
|
174
|
+
* comparator two keys that were distinct in that log can collapse into one. Replaying it
|
|
175
|
+
* verbatim would let a later write land on an earlier write's row, or a deletion remove a
|
|
176
|
+
* row a subsequent upsert had already placed. So the log is REWRITTEN here, in place, to
|
|
177
|
+
* one entry per key: the layer's effective row (read out of the pre-rekey tree), or a
|
|
178
|
+
* deletion — deletions first, and a deletion whose key an upsert now occupies is dropped
|
|
179
|
+
* entirely. The rewritten log is what every later reader of it replays: this method's own
|
|
180
|
+
* index rebuild, a `create index` later in the same transaction ({@link adoptSchema} →
|
|
181
|
+
* {@link reindexOwnWrites}), and `MemoryTableManager.commitTransaction`'s rebase.
|
|
182
|
+
*
|
|
183
|
+
* Soundness rests on a precondition `MemoryTableManager.validateRekeyedPrimaryKey` enforces
|
|
184
|
+
* before any of this runs: NO layer in the chain — base included — holds two rows that
|
|
185
|
+
* collide under the new comparator. Given that, every key here resolves to at most one row
|
|
186
|
+
* in the parent, so a deletion removes exactly the row this layer removed and an upsert
|
|
187
|
+
* lands at exactly one key.
|
|
188
|
+
*
|
|
189
|
+
* NOTE: the deletion replay assumes a key this layer deleted was a key the PARENT held.
|
|
190
|
+
* That holds because every DML operation gets its own layer (`MemoryTableConnection`'s
|
|
191
|
+
* statement savepoints), so no layer both creates and destroys a key. If a single layer
|
|
192
|
+
* ever does, `rekeyed.find(key)` can land on a *colliding* parent row and delete it: at
|
|
193
|
+
* that point the deletion needs to verify, under the OLD comparator, that the row it found
|
|
194
|
+
* is the row it removed.
|
|
195
|
+
*/
|
|
196
|
+
rekeyPrimaryKey(newSchema) {
|
|
197
|
+
const preRekeyTree = this.primaryModifications;
|
|
198
|
+
const preRekeyEncode = this.pkFunctions.encode;
|
|
199
|
+
this.tableSchemaAtCreation = newSchema;
|
|
200
|
+
this.pkFunctions = createPrimaryKeyFunctions(newSchema, this.collationResolver);
|
|
201
|
+
const { extractFromRow, compare } = this.pkFunctions;
|
|
202
|
+
const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
|
|
203
|
+
const rekeyed = new BTree((value) => extractFromRow(value), compare, { base: parentPrimaryTree || undefined });
|
|
204
|
+
// Net per-key effect of this layer's own writes, read out of the pre-rekey tree
|
|
205
|
+
// (`get` traverses the inheritance chain, so it yields the layer's EFFECTIVE row).
|
|
206
|
+
const deletions = [];
|
|
207
|
+
const upserts = [];
|
|
208
|
+
const seen = new Set();
|
|
209
|
+
for (const write of this.ownWrites) {
|
|
210
|
+
const encoded = preRekeyEncode(write.primaryKey);
|
|
211
|
+
if (seen.has(encoded))
|
|
212
|
+
continue;
|
|
213
|
+
seen.add(encoded);
|
|
214
|
+
const effectiveRow = preRekeyTree.get(write.primaryKey);
|
|
215
|
+
if (effectiveRow === undefined)
|
|
216
|
+
deletions.push(write.primaryKey);
|
|
217
|
+
else
|
|
218
|
+
upserts.push(effectiveRow);
|
|
219
|
+
}
|
|
220
|
+
for (const primaryKey of deletions) {
|
|
221
|
+
const path = rekeyed.find(primaryKey);
|
|
222
|
+
if (path.on)
|
|
223
|
+
rekeyed.deleteAt(path);
|
|
224
|
+
}
|
|
225
|
+
for (const row of upserts) {
|
|
226
|
+
rekeyed.upsert(row);
|
|
227
|
+
}
|
|
228
|
+
this.primaryModifications = rekeyed;
|
|
229
|
+
// A deleted key an upsert has since re-occupied (`update t set v='A' where v='a'` under
|
|
230
|
+
// NOCASE) is no longer a deletion of anything: keeping it would make the log claim both
|
|
231
|
+
// a deletion and an upsert of the same key.
|
|
232
|
+
const survivingDeletions = deletions.filter(primaryKey => rekeyed.get(primaryKey) === undefined);
|
|
233
|
+
this.ownWrites.length = 0;
|
|
234
|
+
for (const primaryKey of survivingDeletions) {
|
|
235
|
+
this.ownWrites.push({ type: 'delete', primaryKey });
|
|
236
|
+
}
|
|
237
|
+
for (const row of upserts) {
|
|
238
|
+
this.ownWrites.push({ type: 'upsert', primaryKey: extractFromRow(row), newRow: row });
|
|
239
|
+
}
|
|
240
|
+
// Every secondary index's key encoding and PK bookkeeping derive from `pkFunctions`,
|
|
241
|
+
// and each inherits the parent's freshly-rebuilt tree — so all of them are rebuilt,
|
|
242
|
+
// including ones the altered column does not appear in.
|
|
243
|
+
this.secondaryIndexes = new Map();
|
|
244
|
+
this.initializeSecondaryIndexes();
|
|
245
|
+
for (const index of this.secondaryIndexes.values()) {
|
|
246
|
+
this.reindexOwnWrites(index);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Adopts an `alter column … set data type` / `set not null` backfill conversion applied while
|
|
251
|
+
* THIS layer's transaction is still open: swaps in the new schema and rewrites the CONVERTED value
|
|
252
|
+
* into every own-written row at `colIndex`, so the rest of the transaction — and, at commit, the
|
|
253
|
+
* committed head — read the new value instead of the raw one the transaction wrote. This is what
|
|
254
|
+
* fills the transaction's OWN pending NULL rows for SET NOT NULL backfill, which live in this
|
|
255
|
+
* layer, not the base.
|
|
256
|
+
*
|
|
257
|
+
* NON-primary-key column, or a key column whose bytes are unchanged. `MemoryTableManager.alterColumn`
|
|
258
|
+
* rejects a physical retype of a key column before any mutation, and SET NOT NULL leaves the key
|
|
259
|
+
* bytes intact, so the primary key encoding is unchanged: {@link pkFunctions} and the primary tree
|
|
260
|
+
* keep their keys, and only the value at `colIndex` moves. (Contrast {@link rekeyPrimaryKey}, which
|
|
261
|
+
* must rebuild the tree because the keys themselves change.)
|
|
262
|
+
*
|
|
263
|
+
* Like {@link adoptSchema} / {@link rekeyPrimaryKey}, the caller MUST apply this oldest-first
|
|
264
|
+
* (base already converted): the layer's copy-on-write base inherits the parent's already-converted
|
|
265
|
+
* rows, so only this layer's OWN writes are rewritten here.
|
|
266
|
+
*
|
|
267
|
+
* `ownWrites` is collapsed to its net per-key effect (as {@link rekeyPrimaryKey} does) so an
|
|
268
|
+
* intermediate value a later write overwrote never reaches `convert`, and the rewritten log —
|
|
269
|
+
* carrying converted values — is what the rebase (`MemoryTableManager.rebaseLayerOntoHead`) and
|
|
270
|
+
* any later `create index` ({@link reindexOwnWrites}) replay.
|
|
271
|
+
*
|
|
272
|
+
* NULL own-values pass through untouched UNLESS `convertNulls` is set (the SET NOT NULL backfill
|
|
273
|
+
* maps null → DEFAULT). A value that fails to convert is left as-is (not an error): the manager
|
|
274
|
+
* validated every value in the effective VIEW before calling, so an unconvertible own value here is
|
|
275
|
+
* one a higher layer has shadowed — it is never read through this layer, and re-converting it would
|
|
276
|
+
* double-fault a value the transaction cannot see. It matches the base rewrite's same-reasoned skip.
|
|
277
|
+
*/
|
|
278
|
+
convertColumn(colIndex, convert, newSchema, convertNulls = false) {
|
|
279
|
+
const preTree = this.primaryModifications;
|
|
280
|
+
this.tableSchemaAtCreation = newSchema;
|
|
281
|
+
// The parent's primary tree has been REPLACED by the conversion (base rebuilt from fresh
|
|
282
|
+
// rows, or a parent layer already converted oldest-first), so this layer's own tree — which
|
|
283
|
+
// derived from the OLD one — must be rebuilt over the parent's NEW tree, exactly as
|
|
284
|
+
// rekeyPrimaryKey does. The PK is unchanged (a key-column retype is rejected upstream), so
|
|
285
|
+
// pkFunctions and the keys stay; only the value at colIndex moves.
|
|
286
|
+
const { extractFromRow, compare } = this.pkFunctions;
|
|
287
|
+
const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
|
|
288
|
+
const rebuilt = new BTree((value) => extractFromRow(value), compare, { base: parentPrimaryTree || undefined });
|
|
289
|
+
// Net per-key effect of this layer's own writes, read out of the pre-conversion tree. The PK
|
|
290
|
+
// is unchanged, so a key is either finally-deleted or finally-upserted, never both — no key
|
|
291
|
+
// can collapse onto another (unlike rekeyPrimaryKey).
|
|
292
|
+
const seen = new Set();
|
|
293
|
+
const survivingDeletions = [];
|
|
294
|
+
const upserts = [];
|
|
295
|
+
for (const write of this.ownWrites) {
|
|
296
|
+
const encoded = this.pkFunctions.encode(write.primaryKey);
|
|
297
|
+
if (seen.has(encoded))
|
|
298
|
+
continue;
|
|
299
|
+
seen.add(encoded);
|
|
300
|
+
// `get` traverses the inheritance chain, so this is the layer's EFFECTIVE row:
|
|
301
|
+
// undefined when the layer deleted the key, the layer's own row otherwise.
|
|
302
|
+
const effectiveRow = preTree.get(write.primaryKey);
|
|
303
|
+
if (effectiveRow === undefined) {
|
|
304
|
+
survivingDeletions.push(write.primaryKey);
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
const oldVal = effectiveRow[colIndex];
|
|
308
|
+
let newRow = effectiveRow;
|
|
309
|
+
if (oldVal !== null || convertNulls) {
|
|
310
|
+
try {
|
|
311
|
+
const newVal = convert(oldVal);
|
|
312
|
+
newRow = effectiveRow.map((v, i) => i === colIndex ? newVal : v);
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// Shadowed unconvertible own value — leave as-is (see method doc).
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
upserts.push(newRow);
|
|
319
|
+
}
|
|
320
|
+
for (const primaryKey of survivingDeletions) {
|
|
321
|
+
const path = rebuilt.find(primaryKey);
|
|
322
|
+
if (path.on)
|
|
323
|
+
rebuilt.deleteAt(path);
|
|
324
|
+
}
|
|
325
|
+
for (const row of upserts) {
|
|
326
|
+
rebuilt.upsert(row);
|
|
327
|
+
}
|
|
328
|
+
this.primaryModifications = rebuilt;
|
|
329
|
+
this.ownWrites.length = 0;
|
|
330
|
+
for (const primaryKey of survivingDeletions) {
|
|
331
|
+
this.ownWrites.push({ type: 'delete', primaryKey });
|
|
332
|
+
}
|
|
333
|
+
for (const row of upserts) {
|
|
334
|
+
this.ownWrites.push({ type: 'upsert', primaryKey: extractFromRow(row), newRow: row });
|
|
335
|
+
}
|
|
336
|
+
// Any secondary index on the column holds keys extracted from the OLD value. Rebuild every
|
|
337
|
+
// index over the parent's freshly-converted trees (matching the base's unconditional rebuild),
|
|
338
|
+
// then re-file this layer's own converted writes.
|
|
339
|
+
this.secondaryIndexes = new Map();
|
|
340
|
+
this.initializeSecondaryIndexes();
|
|
341
|
+
for (const index of this.secondaryIndexes.values()) {
|
|
342
|
+
this.reindexOwnWrites(index);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Brings a newly-inherited `MemoryIndex` (built over the parent's tree, which
|
|
347
|
+
* already covers the parent chain's effective rows) up to date with this layer's own
|
|
348
|
+
* writes: for each primary key this layer touched, drop the parent's entry and add
|
|
349
|
+
* this layer's effective row, if any. Both operations copy-on-write into this
|
|
350
|
+
* layer's tree, leaving the parent's entries untouched.
|
|
351
|
+
*
|
|
352
|
+
* Driven by {@link ownWrites} (deduplicated by primary key — the log is an ordered
|
|
353
|
+
* list that may touch one key repeatedly) rather than a full scan, so the cost is
|
|
354
|
+
* proportional to the transaction's writes, not the table's size.
|
|
355
|
+
*
|
|
356
|
+
* The parent's entry is dropped under the PARENT row's own primary key, not under the
|
|
357
|
+
* key the write names. After {@link rekeyPrimaryKey} the two can differ — a write of
|
|
358
|
+
* `'A'` resolves, under NOCASE, to a parent row keyed `'a'` — and filing the removal
|
|
359
|
+
* under the write's key would leave the parent's entry in place, so an index scan would
|
|
360
|
+
* return the row twice.
|
|
361
|
+
*/
|
|
362
|
+
reindexOwnWrites(index) {
|
|
363
|
+
const parentPrimaryTree = this.parentLayer.getModificationTree('primary');
|
|
364
|
+
const seen = new Set();
|
|
365
|
+
for (const write of this.ownWrites) {
|
|
366
|
+
const encoded = this.pkFunctions.encode(write.primaryKey);
|
|
367
|
+
if (seen.has(encoded))
|
|
368
|
+
continue;
|
|
369
|
+
seen.add(encoded);
|
|
370
|
+
const parentRow = parentPrimaryTree?.get(write.primaryKey);
|
|
371
|
+
if (parentRow !== undefined && index.rowMatchesPredicate(parentRow)) {
|
|
372
|
+
index.removeEntry(index.keyFromRow(parentRow), this.pkFunctions.extractFromRow(parentRow));
|
|
373
|
+
}
|
|
374
|
+
// `get` traverses the inheritance chain, so this is the layer's EFFECTIVE row:
|
|
375
|
+
// undefined when the layer deleted the key, the layer's own row otherwise.
|
|
376
|
+
const ownRow = this.primaryModifications.get(write.primaryKey);
|
|
377
|
+
if (ownRow !== undefined && index.rowMatchesPredicate(ownRow)) {
|
|
378
|
+
index.addEntry(index.keyFromRow(ownRow), this.pkFunctions.extractFromRow(ownRow));
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
65
382
|
getLayerId() {
|
|
66
383
|
return this.layerId;
|
|
67
384
|
}
|
|
@@ -97,16 +414,20 @@ export class TransactionLayer {
|
|
|
97
414
|
getPendingChanges() {
|
|
98
415
|
return this.pendingChanges ?? [];
|
|
99
416
|
}
|
|
417
|
+
/** This layer's own structural writes, oldest-first — the rebase replay source. */
|
|
418
|
+
getOwnWrites() {
|
|
419
|
+
return this.ownWrites;
|
|
420
|
+
}
|
|
100
421
|
getPkExtractorsAndComparators(schema) {
|
|
101
422
|
if (schema !== this.tableSchemaAtCreation) {
|
|
102
423
|
warnLog("TransactionLayer.getPkExtractorsAndComparators called with a schema different from its creation schema. Using creation schema.");
|
|
103
424
|
}
|
|
104
425
|
// Use the centralized primary key functions instead of duplicating the logic
|
|
105
426
|
// This ensures consistent handling of empty primary key definitions
|
|
106
|
-
const pkFunctions = createPrimaryKeyFunctions(this.tableSchemaAtCreation);
|
|
107
427
|
return {
|
|
108
|
-
primaryKeyExtractorFromRow: pkFunctions.extractFromRow,
|
|
109
|
-
primaryKeyComparator: pkFunctions.compare
|
|
428
|
+
primaryKeyExtractorFromRow: this.pkFunctions.extractFromRow,
|
|
429
|
+
primaryKeyComparator: this.pkFunctions.compare,
|
|
430
|
+
primaryKeyEncoder: this.pkFunctions.encode
|
|
110
431
|
};
|
|
111
432
|
}
|
|
112
433
|
getModificationTree(indexName) {
|
|
@@ -126,6 +447,8 @@ export class TransactionLayer {
|
|
|
126
447
|
throw new QuereusError("Cannot modify a committed layer");
|
|
127
448
|
this._hasModifications = true;
|
|
128
449
|
this.primaryModifications.upsert(newRowData);
|
|
450
|
+
// Always-on replay log (independent of change tracking).
|
|
451
|
+
this.ownWrites.push({ type: 'upsert', primaryKey, newRow: newRowData });
|
|
129
452
|
// Track change for event emission
|
|
130
453
|
if (this.pendingChanges) {
|
|
131
454
|
this.pendingChanges.push({
|
|
@@ -193,6 +516,8 @@ export class TransactionLayer {
|
|
|
193
516
|
}
|
|
194
517
|
// If key doesn't exist, there's nothing to delete - no deletion marker needed
|
|
195
518
|
// Inheritree's copy-on-write semantics handle this properly
|
|
519
|
+
// Always-on replay log (independent of change tracking).
|
|
520
|
+
this.ownWrites.push({ type: 'delete', primaryKey });
|
|
196
521
|
// Track change for event emission
|
|
197
522
|
if (this.pendingChanges) {
|
|
198
523
|
this.pendingChanges.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/transaction.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../../../src/vtab/memory/layer/transaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Database } from '../../core/database.js';
|
|
2
2
|
import { type TableSchema, type IndexSchema } from '../../schema/table.js';
|
|
3
3
|
import { MemoryTable } from './table.js';
|
|
4
|
-
import type { VirtualTableModule, SchemaChangeInfo } from '../module.js';
|
|
4
|
+
import type { VirtualTableModule, SchemaChangeInfo, EffectiveRowSource } from '../module.js';
|
|
5
5
|
import { MemoryTableManager } from './layer/manager.js';
|
|
6
6
|
import type { BackingHost } from '../backing-host.js';
|
|
7
7
|
import type { MemoryTableConfig } from './types.js';
|
|
@@ -106,7 +106,14 @@ export declare class MemoryTableModule implements VirtualTableModule<MemoryTable
|
|
|
106
106
|
*/
|
|
107
107
|
private findEqualityMatches;
|
|
108
108
|
/**
|
|
109
|
-
* Find range match for a column
|
|
109
|
+
* Find range match for a column.
|
|
110
|
+
*
|
|
111
|
+
* Claims at most the FIRST lower ('>'/'>=') and the FIRST upper ('<'/'<=') bound,
|
|
112
|
+
* matching what `rule-select-access-path` actually turns into seek bounds (it picks
|
|
113
|
+
* per column by position). Claiming a redundant same-side bound as handled would
|
|
114
|
+
* drop it from the residual filter without ever applying it — `where v > 10 and
|
|
115
|
+
* v > 30` would wrongly return the `v > 10` rows. Redundant bounds stay unhandled
|
|
116
|
+
* and survive as a residual `Filter`.
|
|
110
117
|
*/
|
|
111
118
|
private findRangeMatch;
|
|
112
119
|
/**
|
|
@@ -171,11 +178,11 @@ export declare class MemoryTableModule implements VirtualTableModule<MemoryTable
|
|
|
171
178
|
/**
|
|
172
179
|
* Alters an existing memory table's structure (ADD/DROP/RENAME COLUMN).
|
|
173
180
|
*/
|
|
174
|
-
alterTable(db: Database, schemaName: string, tableName: string, change: SchemaChangeInfo): Promise<TableSchema>;
|
|
181
|
+
alterTable(db: Database, schemaName: string, tableName: string, change: SchemaChangeInfo, rows?: EffectiveRowSource): Promise<TableSchema>;
|
|
175
182
|
/**
|
|
176
183
|
* Creates an index on a memory table
|
|
177
184
|
*/
|
|
178
|
-
createIndex(db: Database, schemaName: string, tableName: string, indexSchema: IndexSchema): Promise<void>;
|
|
185
|
+
createIndex(db: Database, schemaName: string, tableName: string, indexSchema: IndexSchema, rows?: EffectiveRowSource): Promise<void>;
|
|
179
186
|
/**
|
|
180
187
|
* Drops an index from a memory table
|
|
181
188
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/module.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,6 +154,10 @@ export class MemoryTableModule {
|
|
|
154
154
|
persistent: false,
|
|
155
155
|
secondaryIndexes: true,
|
|
156
156
|
rangeScans: true,
|
|
157
|
+
// Schema changes here escape the transaction (they survive rollback), but
|
|
158
|
+
// buffered DML still rolls back normally — the SchemaManager catalog is not
|
|
159
|
+
// transaction-scoped. See docs/memory-table.md § "DDL and transactions".
|
|
160
|
+
ddlTransactionality: 'non-transactional',
|
|
157
161
|
};
|
|
158
162
|
}
|
|
159
163
|
/**
|
|
@@ -405,7 +409,15 @@ export class MemoryTableModule {
|
|
|
405
409
|
.setExplanation(`Index ${isMultiSeek ? `multi-seek(${inCardinality})` : 'seek'} on ${index.name}`)
|
|
406
410
|
.build();
|
|
407
411
|
}
|
|
408
|
-
// Prefix-equality + trailing-range on composite indexes
|
|
412
|
+
// Prefix-equality + trailing-range on composite indexes.
|
|
413
|
+
//
|
|
414
|
+
// NOTE: `findEqualityMatches` counts a multi-value `IN` as a prefix match, but
|
|
415
|
+
// `rule-select-access-path` can only seek a *single-valued* prefix key, so for
|
|
416
|
+
// e.g. `a in (1, 2) and b > 15` it declines to a sequential scan and reattaches
|
|
417
|
+
// both predicates as a residual. Correct, but the cost advertised below is a
|
|
418
|
+
// range scan. If multi-value-IN prefixes with trailing ranges ever show up as
|
|
419
|
+
// slow plans, teach the rule a cross-product prefix-range seek (or stop claiming
|
|
420
|
+
// the trailing range here so the estimate matches the plan).
|
|
409
421
|
if (equalityMatches.matchCount > 0 && equalityMatches.matchCount < indexCols.length) {
|
|
410
422
|
const trailingCol = indexCols[equalityMatches.matchCount];
|
|
411
423
|
const trailingRange = this.findRangeMatch(trailingCol, request.filters);
|
|
@@ -494,7 +506,14 @@ export class MemoryTableModule {
|
|
|
494
506
|
return { matchCount, handledFilters, inCardinality };
|
|
495
507
|
}
|
|
496
508
|
/**
|
|
497
|
-
* Find range match for a column
|
|
509
|
+
* Find range match for a column.
|
|
510
|
+
*
|
|
511
|
+
* Claims at most the FIRST lower ('>'/'>=') and the FIRST upper ('<'/'<=') bound,
|
|
512
|
+
* matching what `rule-select-access-path` actually turns into seek bounds (it picks
|
|
513
|
+
* per column by position). Claiming a redundant same-side bound as handled would
|
|
514
|
+
* drop it from the residual filter without ever applying it — `where v > 10 and
|
|
515
|
+
* v > 30` would wrongly return the `v > 10` rows. Redundant bounds stay unhandled
|
|
516
|
+
* and survive as a residual `Filter`.
|
|
498
517
|
*/
|
|
499
518
|
findRangeMatch(indexCol, filters) {
|
|
500
519
|
const handledFilters = new Array(filters.length).fill(false);
|
|
@@ -502,15 +521,15 @@ export class MemoryTableModule {
|
|
|
502
521
|
let hasUpper = false;
|
|
503
522
|
for (let i = 0; i < filters.length; i++) {
|
|
504
523
|
const filter = filters[i];
|
|
505
|
-
if (filter.columnIndex
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
524
|
+
if (filter.columnIndex !== indexCol.index || !filter.usable)
|
|
525
|
+
continue;
|
|
526
|
+
if (!hasLower && (filter.op === '>' || filter.op === '>=')) {
|
|
527
|
+
handledFilters[i] = true;
|
|
528
|
+
hasLower = true;
|
|
529
|
+
}
|
|
530
|
+
else if (!hasUpper && (filter.op === '<' || filter.op === '<=')) {
|
|
531
|
+
handledFilters[i] = true;
|
|
532
|
+
hasUpper = true;
|
|
514
533
|
}
|
|
515
534
|
}
|
|
516
535
|
return { hasRange: hasLower || hasUpper, handledFilters };
|
|
@@ -755,7 +774,7 @@ export class MemoryTableModule {
|
|
|
755
774
|
/**
|
|
756
775
|
* Alters an existing memory table's structure (ADD/DROP/RENAME COLUMN).
|
|
757
776
|
*/
|
|
758
|
-
async alterTable(db, schemaName, tableName, change) {
|
|
777
|
+
async alterTable(db, schemaName, tableName, change, rows) {
|
|
759
778
|
const tableKey = `${schemaName}.${tableName}`.toLowerCase();
|
|
760
779
|
const manager = this.tables.get(tableKey);
|
|
761
780
|
if (!manager) {
|
|
@@ -777,7 +796,7 @@ export class MemoryTableModule {
|
|
|
777
796
|
case 'alterPrimaryKey':
|
|
778
797
|
throw new QuereusError('MemoryTable does not support in-place primary key alteration', StatusCode.UNSUPPORTED);
|
|
779
798
|
case 'addConstraint':
|
|
780
|
-
await manager.addConstraint(change.constraint);
|
|
799
|
+
await manager.addConstraint(change.constraint, rows);
|
|
781
800
|
break;
|
|
782
801
|
case 'dropConstraint':
|
|
783
802
|
await manager.dropConstraint(change.constraintName);
|
|
@@ -792,7 +811,7 @@ export class MemoryTableModule {
|
|
|
792
811
|
setDataType: change.setDataType,
|
|
793
812
|
setDefault: change.setDefault,
|
|
794
813
|
setCollation: change.setCollation,
|
|
795
|
-
});
|
|
814
|
+
}, rows);
|
|
796
815
|
break;
|
|
797
816
|
}
|
|
798
817
|
return manager.tableSchema;
|
|
@@ -800,14 +819,14 @@ export class MemoryTableModule {
|
|
|
800
819
|
/**
|
|
801
820
|
* Creates an index on a memory table
|
|
802
821
|
*/
|
|
803
|
-
async createIndex(db, schemaName, tableName, indexSchema) {
|
|
822
|
+
async createIndex(db, schemaName, tableName, indexSchema, rows) {
|
|
804
823
|
const tableKey = `${schemaName}.${tableName}`.toLowerCase();
|
|
805
824
|
const manager = this.tables.get(tableKey);
|
|
806
825
|
if (!manager) {
|
|
807
826
|
throw new QuereusError(`Memory table '${tableName}' not found in schema '${schemaName}'. Cannot create index.`, StatusCode.ERROR);
|
|
808
827
|
}
|
|
809
828
|
// Delegate to the manager to create the index
|
|
810
|
-
await manager.createIndex(indexSchema);
|
|
829
|
+
await manager.createIndex(indexSchema, undefined, rows);
|
|
811
830
|
logger.operation('Create Index', indexSchema.name, {
|
|
812
831
|
table: tableName,
|
|
813
832
|
schema: schemaName,
|