@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,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `idxStr` wire format: one encoder, one decoder.
|
|
3
|
+
*
|
|
4
|
+
* `FilterInfo.idxStr` is the text the planner hands a module's runtime to say which
|
|
5
|
+
* index it chose and how it means to walk it. Its shape is:
|
|
6
|
+
*
|
|
7
|
+
* idx=<indexName>(<nameArg>);plan=<code>[;<key>=<value>]*
|
|
8
|
+
*
|
|
9
|
+
* plus two sentinels — `fullscan` (no index) and `empty` (provably no rows). Every
|
|
10
|
+
* producer and consumer in the engine goes through this module, so the format is
|
|
11
|
+
* defined in exactly one place. The structured, typed form of the same information
|
|
12
|
+
* is `FilterInfo.accessPath` (see `index-descriptor.ts`); prefer that when you need
|
|
13
|
+
* to know *what the index is* rather than what to hand a module runtime.
|
|
14
|
+
*/
|
|
15
|
+
import { quereusError } from '../common/errors.js';
|
|
16
|
+
import { StatusCode } from '../common/types.js';
|
|
17
|
+
const IDX_NAME_ARG_RE = /^(.*?)\((\d+)\)$/;
|
|
18
|
+
/** No parameters — shared to avoid allocating an empty Map per decode. */
|
|
19
|
+
const NO_PARAMS = new Map();
|
|
20
|
+
/** The two sentinel `idxStr` values, which name no index. */
|
|
21
|
+
const FULL_SCAN_SENTINEL = 'fullscan';
|
|
22
|
+
const EMPTY_SENTINEL = 'empty';
|
|
23
|
+
const PLAN_CODE_BY_KIND = new Map([
|
|
24
|
+
['scan', 0],
|
|
25
|
+
['eqSeek', 2],
|
|
26
|
+
['rangeSeek', 3],
|
|
27
|
+
['multiSeek', 5],
|
|
28
|
+
['multiRangeSeek', 6],
|
|
29
|
+
['prefixRangeSeek', 7],
|
|
30
|
+
]);
|
|
31
|
+
const PLAN_KIND_BY_CODE = new Map([...PLAN_CODE_BY_KIND].map(([kind, code]) => [code, kind]));
|
|
32
|
+
/** The {@link IndexPlanKind} for a `plan=` code, or undefined for a code this engine never emits. */
|
|
33
|
+
export function planKindFromCode(code) {
|
|
34
|
+
return PLAN_KIND_BY_CODE.get(code);
|
|
35
|
+
}
|
|
36
|
+
/** The `plan=` code for an {@link IndexPlanKind}. Total — every kind has a code. */
|
|
37
|
+
export function planCodeFromKind(kind) {
|
|
38
|
+
const code = PLAN_CODE_BY_KIND.get(kind);
|
|
39
|
+
if (code === undefined) {
|
|
40
|
+
quereusError(`Unknown index plan kind '${kind}'`, StatusCode.INTERNAL);
|
|
41
|
+
}
|
|
42
|
+
return code;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Distinguish the two sentinel strings from a genuine index string.
|
|
46
|
+
* Returns null for `null`, `''`, and anything that is not a sentinel.
|
|
47
|
+
*/
|
|
48
|
+
export function idxStrSentinel(idxStr) {
|
|
49
|
+
if (idxStr === FULL_SCAN_SENTINEL)
|
|
50
|
+
return 'fullScan';
|
|
51
|
+
if (idxStr === EMPTY_SENTINEL)
|
|
52
|
+
return 'empty';
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
/** Render an {@link IdxStrSpec} to its wire form. */
|
|
56
|
+
export function encodeIdxStr(spec) {
|
|
57
|
+
const parts = [`idx=${spec.indexName}(${spec.nameArg})`, `plan=${spec.plan}`];
|
|
58
|
+
for (const [key, value] of spec.params) {
|
|
59
|
+
if (key === 'idx' || key === 'plan') {
|
|
60
|
+
quereusError(`idxStr parameter '${key}' is reserved and cannot appear in params`, StatusCode.INTERNAL);
|
|
61
|
+
}
|
|
62
|
+
parts.push(`${key}=${value}`);
|
|
63
|
+
}
|
|
64
|
+
return parts.join(';');
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Parse an `idxStr`.
|
|
68
|
+
*
|
|
69
|
+
* Returns null for `null`, `''`, the `fullscan` / `empty` sentinels, and any string
|
|
70
|
+
* without a parseable `idx=<name>(<n>)` term — i.e. exactly the cases where no index
|
|
71
|
+
* is named. Use {@link idxStrSentinel} to tell the two sentinels apart from garbage.
|
|
72
|
+
*
|
|
73
|
+
* A parameter's value may contain `=`, `:` and `,` (e.g. `rangeOps=ge:lt,gt`); only the
|
|
74
|
+
* FIRST `=` in each `;`-separated term separates key from value.
|
|
75
|
+
*/
|
|
76
|
+
export function decodeIdxStr(idxStr) {
|
|
77
|
+
if (!idxStr || idxStrSentinel(idxStr) !== null)
|
|
78
|
+
return null;
|
|
79
|
+
let indexTerm;
|
|
80
|
+
let planTerm;
|
|
81
|
+
const params = new Map();
|
|
82
|
+
for (const part of idxStr.split(';')) {
|
|
83
|
+
const sep = part.indexOf('=');
|
|
84
|
+
if (sep <= 0)
|
|
85
|
+
continue;
|
|
86
|
+
const key = part.slice(0, sep);
|
|
87
|
+
const value = part.slice(sep + 1);
|
|
88
|
+
if (key === 'idx') {
|
|
89
|
+
indexTerm = value;
|
|
90
|
+
}
|
|
91
|
+
else if (key === 'plan') {
|
|
92
|
+
planTerm = value;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
params.set(key, value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (indexTerm === undefined)
|
|
99
|
+
return null;
|
|
100
|
+
const match = IDX_NAME_ARG_RE.exec(indexTerm);
|
|
101
|
+
if (!match)
|
|
102
|
+
return null;
|
|
103
|
+
const plan = planTerm === undefined ? 0 : Number.parseInt(planTerm, 10);
|
|
104
|
+
return {
|
|
105
|
+
indexName: match[1],
|
|
106
|
+
nameArg: Number.parseInt(match[2], 10),
|
|
107
|
+
plan: Number.isNaN(plan) ? 0 : plan,
|
|
108
|
+
params: params.size === 0 ? NO_PARAMS : params,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Rename the index inside an `idxStr`, preserving `plan`, `nameArg`, and every parameter
|
|
113
|
+
* verbatim — including parameters and plan codes this engine does not understand. Strings
|
|
114
|
+
* that name no index (sentinels, null, garbage) are returned unchanged.
|
|
115
|
+
*
|
|
116
|
+
* Implemented as decode → swap name → encode, so it cannot corrupt what it cannot read.
|
|
117
|
+
*/
|
|
118
|
+
export function retargetIdxStr(idxStr, newIndexName) {
|
|
119
|
+
const spec = decodeIdxStr(idxStr);
|
|
120
|
+
if (!spec)
|
|
121
|
+
return idxStr;
|
|
122
|
+
if (spec.indexName === newIndexName)
|
|
123
|
+
return idxStr;
|
|
124
|
+
return encodeIdxStr({ ...spec, indexName: newIndexName });
|
|
125
|
+
}
|
|
126
|
+
/** Build an {@link IdxStrSpec} for a plan the engine itself chose. `nameArg` is always 0. */
|
|
127
|
+
export function makeIdxStrSpec(indexName, plan, params) {
|
|
128
|
+
return { indexName, nameArg: 0, plan: planCodeFromKind(plan), params: params ?? NO_PARAMS };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=idx-str.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idx-str.js","sourceRoot":"","sources":["../../../src/vtab/idx-str.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAkBhD,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,0EAA0E;AAC1E,MAAM,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;AAEzD,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,MAAM,iBAAiB,GAAuC,IAAI,GAAG,CAAwB;IAC5F,CAAC,MAAM,EAAE,CAAC,CAAC;IACX,CAAC,QAAQ,EAAE,CAAC,CAAC;IACb,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,WAAW,EAAE,CAAC,CAAC;IAChB,CAAC,gBAAgB,EAAE,CAAC,CAAC;IACrB,CAAC,iBAAiB,EAAE,CAAC,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAuC,IAAI,GAAG,CACpE,CAAC,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC;AAEF,qGAAqG;AACrG,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC5C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IACnD,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACxB,YAAY,CAAC,4BAA4B,IAAI,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB;IACnD,IAAI,MAAM,KAAK,kBAAkB;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,MAAM,KAAK,cAAc;QAAE,OAAO,OAAO,CAAC;IAC9C,OAAO,IAAI,CAAC;AACb,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC5C,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,GAAG,EAAE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACxC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACrC,YAAY,CAAC,qBAAqB,GAAG,2CAA2C,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxG,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAAqB;IACjD,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE5D,IAAI,SAA6B,CAAC;IAClC,IAAI,QAA4B,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC;YAAE,SAAS;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACnB,SAAS,GAAG,KAAK,CAAC;QACnB,CAAC;aAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YAC3B,QAAQ,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,IAAI,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACxE,OAAO;QACN,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACnC,MAAM,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;KAC9C,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,MAAqB,EAAE,YAAoB;IACzE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IACzB,IAAI,IAAI,CAAC,SAAS,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IACnD,OAAO,YAAY,CAAC,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAC7B,SAAiB,EACjB,IAAmB,EACnB,MAAoC;IAEpC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC;AAC7F,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed identity of the index an access plan iterates.
|
|
3
|
+
*
|
|
4
|
+
* The planner records its chosen index twice: as the free-text `FilterInfo.idxStr`
|
|
5
|
+
* wire format (see `idx-str.ts`) and as the structured {@link AccessPath} on
|
|
6
|
+
* `FilterInfo.accessPath`. Consumers that care about *what the index is* — most
|
|
7
|
+
* importantly anything that must merge or compare rows in the scan's emission
|
|
8
|
+
* order — read the structured form. `idxStr` remains the text projection consumed
|
|
9
|
+
* by module runtimes.
|
|
10
|
+
*/
|
|
11
|
+
import type { TableSchema } from '../schema/table.js';
|
|
12
|
+
import type { BestAccessPlanResult } from './best-access-plan.js';
|
|
13
|
+
/** One key column of an index, expressed table-relative. */
|
|
14
|
+
export interface IndexKeyColumn {
|
|
15
|
+
/** 0-based index into `TableSchema.columns`. */
|
|
16
|
+
readonly columnIndex: number;
|
|
17
|
+
/** true ⇒ this key column is ordered descending within the index. */
|
|
18
|
+
readonly desc: boolean;
|
|
19
|
+
/** Declared collation name for this key column; undefined ⇒ BINARY. */
|
|
20
|
+
readonly collation?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Structured identity of the index an access plan iterates.
|
|
24
|
+
*
|
|
25
|
+
* `name` is the module's own name for the index and is what appears in `idxStr`;
|
|
26
|
+
* it may be a per-plan alias that resolves to nothing in the table schema. `role`
|
|
27
|
+
* is therefore authoritative, not the name: a descriptor with `role: 'primary'`
|
|
28
|
+
* IS the table's primary key however it is named.
|
|
29
|
+
*/
|
|
30
|
+
export interface IndexDescriptor {
|
|
31
|
+
readonly name: string;
|
|
32
|
+
readonly role: 'primary' | 'secondary';
|
|
33
|
+
/** The index's FULL key columns, in index order (not just the seek prefix). */
|
|
34
|
+
readonly keyColumns: readonly IndexKeyColumn[];
|
|
35
|
+
/** true ⇒ a walk of this index yields at most one row per distinct key. */
|
|
36
|
+
readonly unique: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* true ⇒ the SCAN walks this index in REVERSE of its declared `keyColumns`
|
|
39
|
+
* order (an `ORDER BY … DESC` over an ascending index). Absent/false ⇒ forward.
|
|
40
|
+
*
|
|
41
|
+
* This is the one place scan DIRECTION is modelled structurally, so an
|
|
42
|
+
* emission-order consumer (the isolation overlay's merged read) can walk the
|
|
43
|
+
* reversed stream correctly. A module whose `idxStr` already encodes direction
|
|
44
|
+
* (the in-memory vtab's `ordCons=DESC`) need not set it; a module that carries
|
|
45
|
+
* direction only in an opaque per-plan index name (lamina) MUST, or the overlay
|
|
46
|
+
* merges a reversed underlying stream against a forward comparator.
|
|
47
|
+
*/
|
|
48
|
+
readonly reverse?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Which seek/scan strategy the planner chose over an {@link IndexDescriptor}.
|
|
52
|
+
* One-to-one with the `plan=N` codes carried in `idxStr`.
|
|
53
|
+
*
|
|
54
|
+
* Scan DIRECTION is not part of the plan KIND. For the in-memory vtab it rides
|
|
55
|
+
* `idxStr` (the `plan=1` / `plan=4` descending codes and the `ordCons=DESC`
|
|
56
|
+
* parameter its scan-plan builder recognises). A module that carries direction
|
|
57
|
+
* only in an opaque per-plan index name (lamina) instead sets
|
|
58
|
+
* {@link IndexDescriptor.reverse} so an emission-order consumer can still learn
|
|
59
|
+
* the scan is reversed.
|
|
60
|
+
*/
|
|
61
|
+
export type IndexPlanKind = 'scan' | 'eqSeek' | 'rangeSeek' | 'multiSeek' | 'multiRangeSeek' | 'prefixRangeSeek';
|
|
62
|
+
/** Structured description of the access path chosen for one table reference. */
|
|
63
|
+
export type AccessPath = {
|
|
64
|
+
readonly kind: 'fullScan';
|
|
65
|
+
} | {
|
|
66
|
+
readonly kind: 'empty';
|
|
67
|
+
} | {
|
|
68
|
+
readonly kind: 'index';
|
|
69
|
+
readonly index: IndexDescriptor;
|
|
70
|
+
readonly plan: IndexPlanKind;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The plan named an index the engine could not resolve, and the module supplied no
|
|
74
|
+
* `indexDescriptor` for it. Consumers that need the index identity (to merge in scan
|
|
75
|
+
* order, say) MUST fail loudly rather than guess — an unresolved secondary index
|
|
76
|
+
* merged as if it were the primary key silently reorders rows.
|
|
77
|
+
*/
|
|
78
|
+
| {
|
|
79
|
+
readonly kind: 'unresolvedIndex';
|
|
80
|
+
readonly indexName: string;
|
|
81
|
+
readonly plan: IndexPlanKind;
|
|
82
|
+
};
|
|
83
|
+
/** The canonical name the engine uses for a table's primary-key index in `idxStr`. */
|
|
84
|
+
export declare const PRIMARY_INDEX_NAME = "_primary_";
|
|
85
|
+
/** The name physical plan nodes use for the primary-key index (`IndexScanNode.indexName`). */
|
|
86
|
+
export declare const PRIMARY_PHYSICAL_INDEX_NAME = "primary";
|
|
87
|
+
/** True when `name` is one of the two spellings the engine uses for the primary key. */
|
|
88
|
+
export declare function isPrimaryIndexName(name: string): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* The table's primary key as an {@link IndexDescriptor}, named `_primary_`.
|
|
91
|
+
*
|
|
92
|
+
* Returns undefined for a table with no declared primary key: a descriptor with an
|
|
93
|
+
* empty `keyColumns` describes nothing, and every consumer that would read it wants
|
|
94
|
+
* a full scan instead.
|
|
95
|
+
*/
|
|
96
|
+
export declare function primaryKeyDescriptor(tableSchema: TableSchema): IndexDescriptor | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Resolve the structured identity of `indexName` for this plan. Resolution order:
|
|
99
|
+
* 1. `accessPlan.indexDescriptor`, when the module supplied one naming this index.
|
|
100
|
+
* 2. `indexName` is `_primary_` or `primary` ⇒ {@link primaryKeyDescriptor}.
|
|
101
|
+
* 3. Case-insensitive hit in `tableSchema.indexes`.
|
|
102
|
+
* 4. undefined — the caller emits `{ kind: 'unresolvedIndex' }` and logs.
|
|
103
|
+
*
|
|
104
|
+
* `indexName` is taken explicitly rather than read off `accessPlan.indexName`: the
|
|
105
|
+
* ordering-only arm of `rule-select-access-path` walks `accessPlan.orderingIndexName`
|
|
106
|
+
* and the legacy arms hardcode `_primary_`, so the name that lands in `idxStr` is not
|
|
107
|
+
* always `accessPlan.indexName`. The descriptor must describe the index actually walked.
|
|
108
|
+
*
|
|
109
|
+
* There is deliberately no prefix rule: a secondary index genuinely named
|
|
110
|
+
* `_primary_extra` resolves via the schema lookup as `role: 'secondary'`.
|
|
111
|
+
*/
|
|
112
|
+
export declare function resolveIndexDescriptor(tableSchema: TableSchema, accessPlan: BestAccessPlanResult, indexName: string): IndexDescriptor | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* Validate a module-supplied {@link IndexDescriptor} against the plan that carries it
|
|
115
|
+
* and the request it answers. Called from `validateAccessPlan`; separated so the rules
|
|
116
|
+
* stay readable.
|
|
117
|
+
*
|
|
118
|
+
* The descriptor must name the index the plan actually drives. That is `indexName` for
|
|
119
|
+
* a seek plan; an ordering-only plan sets `orderingIndexName` alone, so accept either.
|
|
120
|
+
*/
|
|
121
|
+
export declare function validateIndexDescriptor(descriptor: IndexDescriptor, indexName: string | undefined, orderingIndexName: string | undefined, columnCount: number): void;
|
|
122
|
+
//# sourceMappingURL=index-descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-descriptor.d.ts","sourceRoot":"","sources":["../../../src/vtab/index-descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC9B,gDAAgD;IAChD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC;IACvC,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,CAAC;IAC/C,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GACtB,MAAM,GACN,QAAQ,GACR,WAAW,GACX,WAAW,GACX,gBAAgB,GAChB,iBAAiB,CAAC;AAErB,gFAAgF;AAChF,MAAM,MAAM,UAAU,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE;AAC3F;;;;;GAKG;GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAElG,sFAAsF;AACtF,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAE9C,8FAA8F;AAC9F,eAAO,MAAM,2BAA2B,YAAY,CAAC;AAErD,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,eAAe,GAAG,SAAS,CAa1F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACrC,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,GACf,eAAe,GAAG,SAAS,CAoB7B;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,WAAW,EAAE,MAAM,GACjB,IAAI,CA4BN"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed identity of the index an access plan iterates.
|
|
3
|
+
*
|
|
4
|
+
* The planner records its chosen index twice: as the free-text `FilterInfo.idxStr`
|
|
5
|
+
* wire format (see `idx-str.ts`) and as the structured {@link AccessPath} on
|
|
6
|
+
* `FilterInfo.accessPath`. Consumers that care about *what the index is* — most
|
|
7
|
+
* importantly anything that must merge or compare rows in the scan's emission
|
|
8
|
+
* order — read the structured form. `idxStr` remains the text projection consumed
|
|
9
|
+
* by module runtimes.
|
|
10
|
+
*/
|
|
11
|
+
import { quereusError } from '../common/errors.js';
|
|
12
|
+
import { StatusCode } from '../common/types.js';
|
|
13
|
+
/** The canonical name the engine uses for a table's primary-key index in `idxStr`. */
|
|
14
|
+
export const PRIMARY_INDEX_NAME = '_primary_';
|
|
15
|
+
/** The name physical plan nodes use for the primary-key index (`IndexScanNode.indexName`). */
|
|
16
|
+
export const PRIMARY_PHYSICAL_INDEX_NAME = 'primary';
|
|
17
|
+
/** True when `name` is one of the two spellings the engine uses for the primary key. */
|
|
18
|
+
export function isPrimaryIndexName(name) {
|
|
19
|
+
return name === PRIMARY_INDEX_NAME || name === PRIMARY_PHYSICAL_INDEX_NAME;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The table's primary key as an {@link IndexDescriptor}, named `_primary_`.
|
|
23
|
+
*
|
|
24
|
+
* Returns undefined for a table with no declared primary key: a descriptor with an
|
|
25
|
+
* empty `keyColumns` describes nothing, and every consumer that would read it wants
|
|
26
|
+
* a full scan instead.
|
|
27
|
+
*/
|
|
28
|
+
export function primaryKeyDescriptor(tableSchema) {
|
|
29
|
+
const pkCols = tableSchema.primaryKeyDefinition ?? [];
|
|
30
|
+
if (pkCols.length === 0)
|
|
31
|
+
return undefined;
|
|
32
|
+
return {
|
|
33
|
+
name: PRIMARY_INDEX_NAME,
|
|
34
|
+
role: 'primary',
|
|
35
|
+
keyColumns: pkCols.map(col => ({
|
|
36
|
+
columnIndex: col.index,
|
|
37
|
+
desc: col.desc === true,
|
|
38
|
+
collation: col.collation,
|
|
39
|
+
})),
|
|
40
|
+
unique: true,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve the structured identity of `indexName` for this plan. Resolution order:
|
|
45
|
+
* 1. `accessPlan.indexDescriptor`, when the module supplied one naming this index.
|
|
46
|
+
* 2. `indexName` is `_primary_` or `primary` ⇒ {@link primaryKeyDescriptor}.
|
|
47
|
+
* 3. Case-insensitive hit in `tableSchema.indexes`.
|
|
48
|
+
* 4. undefined — the caller emits `{ kind: 'unresolvedIndex' }` and logs.
|
|
49
|
+
*
|
|
50
|
+
* `indexName` is taken explicitly rather than read off `accessPlan.indexName`: the
|
|
51
|
+
* ordering-only arm of `rule-select-access-path` walks `accessPlan.orderingIndexName`
|
|
52
|
+
* and the legacy arms hardcode `_primary_`, so the name that lands in `idxStr` is not
|
|
53
|
+
* always `accessPlan.indexName`. The descriptor must describe the index actually walked.
|
|
54
|
+
*
|
|
55
|
+
* There is deliberately no prefix rule: a secondary index genuinely named
|
|
56
|
+
* `_primary_extra` resolves via the schema lookup as `role: 'secondary'`.
|
|
57
|
+
*/
|
|
58
|
+
export function resolveIndexDescriptor(tableSchema, accessPlan, indexName) {
|
|
59
|
+
const supplied = accessPlan.indexDescriptor;
|
|
60
|
+
if (supplied && supplied.name === indexName)
|
|
61
|
+
return supplied;
|
|
62
|
+
if (isPrimaryIndexName(indexName))
|
|
63
|
+
return primaryKeyDescriptor(tableSchema);
|
|
64
|
+
const lowered = indexName.toLowerCase();
|
|
65
|
+
const schemaIndex = tableSchema.indexes?.find(idx => idx.name.toLowerCase() === lowered);
|
|
66
|
+
if (!schemaIndex)
|
|
67
|
+
return undefined;
|
|
68
|
+
return {
|
|
69
|
+
name: schemaIndex.name,
|
|
70
|
+
role: 'secondary',
|
|
71
|
+
keyColumns: schemaIndex.columns.map(col => ({
|
|
72
|
+
columnIndex: col.index,
|
|
73
|
+
desc: col.desc === true,
|
|
74
|
+
collation: col.collation,
|
|
75
|
+
})),
|
|
76
|
+
unique: schemaIndex.unique === true,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validate a module-supplied {@link IndexDescriptor} against the plan that carries it
|
|
81
|
+
* and the request it answers. Called from `validateAccessPlan`; separated so the rules
|
|
82
|
+
* stay readable.
|
|
83
|
+
*
|
|
84
|
+
* The descriptor must name the index the plan actually drives. That is `indexName` for
|
|
85
|
+
* a seek plan; an ordering-only plan sets `orderingIndexName` alone, so accept either.
|
|
86
|
+
*/
|
|
87
|
+
export function validateIndexDescriptor(descriptor, indexName, orderingIndexName, columnCount) {
|
|
88
|
+
const expected = indexName ?? orderingIndexName;
|
|
89
|
+
if (expected === undefined) {
|
|
90
|
+
quereusError(`indexDescriptor '${descriptor.name}' supplied but the plan names no index via indexName or orderingIndexName`, StatusCode.FORMAT);
|
|
91
|
+
}
|
|
92
|
+
if (descriptor.name !== expected) {
|
|
93
|
+
quereusError(`indexDescriptor.name '${descriptor.name}' must equal the plan's index name '${expected}'`, StatusCode.FORMAT);
|
|
94
|
+
}
|
|
95
|
+
if (descriptor.keyColumns.length === 0) {
|
|
96
|
+
quereusError(`indexDescriptor '${descriptor.name}' must declare at least one key column`, StatusCode.FORMAT);
|
|
97
|
+
}
|
|
98
|
+
for (const keyColumn of descriptor.keyColumns) {
|
|
99
|
+
if (keyColumn.columnIndex < 0 || keyColumn.columnIndex >= columnCount) {
|
|
100
|
+
quereusError(`Invalid indexDescriptor key column index ${keyColumn.columnIndex}, must be 0-${columnCount - 1}`, StatusCode.FORMAT);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=index-descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-descriptor.js","sourceRoot":"","sources":["../../../src/vtab/index-descriptor.ts"],"names":[],"mappings":"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"}
|
|
@@ -116,7 +116,7 @@ export interface SharedKey {
|
|
|
116
116
|
* column is also a logical column. It is not a generation policy: the engine no
|
|
117
117
|
* longer invents a key. Both kinds source the threaded value from ordinary
|
|
118
118
|
* column-default / supplied-value machinery and propagate it across the fan-out
|
|
119
|
-
* via the equivalence class (`docs/
|
|
119
|
+
* via the equivalence class (`docs/vu-mutation-context.md` § Mutation Context):
|
|
120
120
|
* - `surrogate`: a substrate-managed key distinct from any logical column. The
|
|
121
121
|
* value comes from the **anchor's shared-key column `default`**, evaluated once
|
|
122
122
|
* per produced row at the envelope (evaluate-once-and-thread). A basis author
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BTree } from 'inheritree';
|
|
2
2
|
import { type Row } from '../../common/types.js';
|
|
3
|
+
import type { CollationResolver } from '../../types/logical-type.js';
|
|
3
4
|
import type { BTreeKeyForPrimary, BTreeKeyForIndex, MemoryIndexEntry } from './types.js';
|
|
4
5
|
import type { IndexColumnSchema as IndexColumnSpec } from '../../schema/table.js';
|
|
5
6
|
import type { ColumnSchema } from '../../schema/column.js';
|
|
@@ -27,8 +28,9 @@ export declare class MemoryIndex {
|
|
|
27
28
|
* used to sort each entry's `primaryKeys` on read (see {@link getSortedPrimaryKeys}).
|
|
28
29
|
* It is per-index — identical for every entry — so it lives here, not duplicated
|
|
29
30
|
* per entry. A PK-collation change via `ALTER COLUMN … SET COLLATE` forces a full
|
|
30
|
-
* base rebuild (`rebuildAllSecondaryIndexes` / `rebuildPrimaryTreeStrict`),
|
|
31
|
-
*
|
|
31
|
+
* base rebuild (`rebuildAllSecondaryIndexes` / `rebuildPrimaryTreeStrict`) and, on
|
|
32
|
+
* every layer of an open transaction, `TransactionLayer.rekeyPrimaryKey` — each
|
|
33
|
+
* recreating its entries under the new comparator/encoder, so no stale order or
|
|
32
34
|
* encoding survives an ALTER.
|
|
33
35
|
*/
|
|
34
36
|
private readonly primaryKeyComparator;
|
|
@@ -40,7 +42,13 @@ export declare class MemoryIndex {
|
|
|
40
42
|
* add/remove. See `utils/primary-key-encode.ts`.
|
|
41
43
|
*/
|
|
42
44
|
private readonly encode;
|
|
43
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Resolves this index's declared column collations against the owning database.
|
|
47
|
+
* A layer hands down its own resolver, so a child layer's comparator is built
|
|
48
|
+
* from the same collation function as the parent tree it inherits.
|
|
49
|
+
*/
|
|
50
|
+
private readonly collationResolver;
|
|
51
|
+
constructor(spec: IndexSpec, allTableColumnsSchema: ReadonlyArray<ColumnSchema>, collationResolver: CollationResolver, primaryKeyComparator: (a: BTreeKeyForPrimary, b: BTreeKeyForPrimary) => number, encode: (pk: BTreeKeyForPrimary) => string, tableName: string, baseInheritreeTable?: BTree<BTreeKeyForIndex, MemoryIndexEntry>);
|
|
44
52
|
/** True when the partial-index predicate is satisfied by `row` (or there is no predicate). */
|
|
45
53
|
rowMatchesPredicate(row: Row): boolean;
|
|
46
54
|
private validateColumnIndexes;
|
|
@@ -93,7 +101,7 @@ export declare class MemoryIndex {
|
|
|
93
101
|
getPrimaryKeys(indexKey: BTreeKeyForIndex): BTreeKeyForPrimary[];
|
|
94
102
|
/**
|
|
95
103
|
* True when at least one PK is mapped under `indexKey`. O(1) (Map size), so the
|
|
96
|
-
* build-time UNIQUE check (
|
|
104
|
+
* build-time UNIQUE check (`populateIndexFromRows`) can probe per row without
|
|
97
105
|
* sorting the bucket.
|
|
98
106
|
*/
|
|
99
107
|
hasAnyPrimaryKey(indexKey: BTreeKeyForIndex): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAc,KAAK,GAAG,EAAiB,MAAM,uBAAuB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,iBAAiB,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEhF,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,UAAU,CAAC;CACvB;AAQD,wDAAwD;AACxD,qBAAa,WAAW;IACvB,SAAgB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,SAAgB,WAAW,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;IAC5D,SAAgB,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,gBAAgB,CAAC;IAC3D,SAAgB,WAAW,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC;IAC3E,IAAI,EAAE,KAAK,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACvD;6DACyD;IACzD,SAAgB,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA8B;IACpE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BTree } from 'inheritree';
|
|
2
2
|
import { StatusCode } from '../../common/types.js';
|
|
3
|
-
import { createTypedComparator
|
|
3
|
+
import { createTypedComparator } from '../../util/comparison.js';
|
|
4
4
|
import { quereusError } from '../../common/errors.js';
|
|
5
5
|
import { compilePredicate } from './utils/predicate.js';
|
|
6
6
|
/** Represents a secondary index within a MemoryTable */
|
|
@@ -19,8 +19,9 @@ export class MemoryIndex {
|
|
|
19
19
|
* used to sort each entry's `primaryKeys` on read (see {@link getSortedPrimaryKeys}).
|
|
20
20
|
* It is per-index — identical for every entry — so it lives here, not duplicated
|
|
21
21
|
* per entry. A PK-collation change via `ALTER COLUMN … SET COLLATE` forces a full
|
|
22
|
-
* base rebuild (`rebuildAllSecondaryIndexes` / `rebuildPrimaryTreeStrict`),
|
|
23
|
-
*
|
|
22
|
+
* base rebuild (`rebuildAllSecondaryIndexes` / `rebuildPrimaryTreeStrict`) and, on
|
|
23
|
+
* every layer of an open transaction, `TransactionLayer.rekeyPrimaryKey` — each
|
|
24
|
+
* recreating its entries under the new comparator/encoder, so no stale order or
|
|
24
25
|
* encoding survives an ALTER.
|
|
25
26
|
*/
|
|
26
27
|
primaryKeyComparator;
|
|
@@ -32,17 +33,24 @@ export class MemoryIndex {
|
|
|
32
33
|
* add/remove. See `utils/primary-key-encode.ts`.
|
|
33
34
|
*/
|
|
34
35
|
encode;
|
|
35
|
-
|
|
36
|
+
/**
|
|
37
|
+
* Resolves this index's declared column collations against the owning database.
|
|
38
|
+
* A layer hands down its own resolver, so a child layer's comparator is built
|
|
39
|
+
* from the same collation function as the parent tree it inherits.
|
|
40
|
+
*/
|
|
41
|
+
collationResolver;
|
|
42
|
+
constructor(spec, allTableColumnsSchema, collationResolver, primaryKeyComparator, encode, tableName, baseInheritreeTable) {
|
|
36
43
|
this.name = spec.name;
|
|
37
44
|
this.specColumns = Object.freeze(spec.columns.map(c => ({ ...c })));
|
|
38
45
|
this.allTableColumnsSchema = allTableColumnsSchema;
|
|
46
|
+
this.collationResolver = collationResolver;
|
|
39
47
|
this.primaryKeyComparator = primaryKeyComparator;
|
|
40
48
|
this.encode = encode;
|
|
41
49
|
this.validateColumnIndexes(allTableColumnsSchema);
|
|
42
50
|
const keyFunctions = this.createIndexKeyFunctions();
|
|
43
51
|
this.keyFromRow = keyFunctions.keyFromRow;
|
|
44
52
|
this.compareKeys = keyFunctions.compareKeys;
|
|
45
|
-
this.predicate = spec.predicate ? compilePredicate(spec.predicate, allTableColumnsSchema) : undefined;
|
|
53
|
+
this.predicate = spec.predicate ? compilePredicate(spec.predicate, allTableColumnsSchema, tableName) : undefined;
|
|
46
54
|
this.data = this.createBTree(baseInheritreeTable);
|
|
47
55
|
}
|
|
48
56
|
/** True when the partial-index predicate is satisfied by `row` (or there is no predicate). */
|
|
@@ -71,7 +79,7 @@ export class MemoryIndex {
|
|
|
71
79
|
const columnSchema = this.allTableColumnsSchema[colSchemaIndex];
|
|
72
80
|
const descMultiplier = specCol.desc ? -1 : 1;
|
|
73
81
|
// Create type-aware comparator
|
|
74
|
-
const collationFunc = specCol.collation ?
|
|
82
|
+
const collationFunc = specCol.collation ? this.collationResolver(specCol.collation) : undefined;
|
|
75
83
|
const typedComparator = createTypedComparator(columnSchema.logicalType, collationFunc);
|
|
76
84
|
const keyFromRow = (row) => {
|
|
77
85
|
this.validateRowLength(row, colSchemaIndex);
|
|
@@ -87,7 +95,7 @@ export class MemoryIndex {
|
|
|
87
95
|
// Pre-create type-aware comparators for each column
|
|
88
96
|
const comparators = localSpecColumns.map(sc => {
|
|
89
97
|
const columnSchema = this.allTableColumnsSchema[sc.index];
|
|
90
|
-
const collationFunc = sc.collation ?
|
|
98
|
+
const collationFunc = sc.collation ? this.collationResolver(sc.collation) : undefined;
|
|
91
99
|
return createTypedComparator(columnSchema.logicalType, collationFunc);
|
|
92
100
|
});
|
|
93
101
|
const keyFromRow = (row) => {
|
|
@@ -119,7 +127,7 @@ export class MemoryIndex {
|
|
|
119
127
|
}
|
|
120
128
|
}
|
|
121
129
|
createBTree(baseInheritreeTable) {
|
|
122
|
-
return new BTree((entry) => entry.indexKey, this.compareKeys, baseInheritreeTable);
|
|
130
|
+
return new BTree((entry) => entry.indexKey, this.compareKeys, { base: baseInheritreeTable });
|
|
123
131
|
}
|
|
124
132
|
/**
|
|
125
133
|
* Entries created by THIS index instance — safe to mutate in place. An entry
|
|
@@ -236,7 +244,7 @@ export class MemoryIndex {
|
|
|
236
244
|
}
|
|
237
245
|
/**
|
|
238
246
|
* True when at least one PK is mapped under `indexKey`. O(1) (Map size), so the
|
|
239
|
-
* build-time UNIQUE check (
|
|
247
|
+
* build-time UNIQUE check (`populateIndexFromRows`) can probe per row without
|
|
240
248
|
* sorting the bucket.
|
|
241
249
|
*/
|
|
242
250
|
hasAnyPrimaryKey(indexKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAA2B,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/vtab/memory/index.ts"],"names":[],"mappings":"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"}
|