@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,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialized-view maintenance — plan-tree analysis helpers.
|
|
3
|
+
*
|
|
4
|
+
* The stateless utilities the maintenance plan builders lean on: recursive plan-tree
|
|
5
|
+
* walks (find/count node types, collect table refs + attribute provenance), the
|
|
6
|
+
* collation/determinism/replicability gates, the create-time rejection diagnostics, and
|
|
7
|
+
* the single-source scalar-expression evaluator. Split out of
|
|
8
|
+
* `database-materialized-views.ts` so the manager class and its plan builders read on
|
|
9
|
+
* their own; every function here is a pure move (no `MaterializedViewManager` state).
|
|
10
|
+
*/
|
|
11
|
+
import { QuereusError } from '../common/errors.js';
|
|
12
|
+
import { StatusCode } from '../common/types.js';
|
|
13
|
+
import { isRelationalNode, isScalarNode } from '../planner/nodes/plan-node.js';
|
|
14
|
+
import { ColumnReferenceNode, TableReferenceNode } from '../planner/nodes/reference.js';
|
|
15
|
+
import { FilterNode } from '../planner/nodes/filter.js';
|
|
16
|
+
import { AggregateNode } from '../planner/nodes/aggregate-node.js';
|
|
17
|
+
import { TableFunctionCallNode } from '../planner/nodes/table-function-call.js';
|
|
18
|
+
import { PlanNodeType } from '../planner/nodes/plan-node-type.js';
|
|
19
|
+
import { checkDeterministic } from '../planner/validation/determinism-validator.js';
|
|
20
|
+
import { emitPlanNode } from '../runtime/emitters.js';
|
|
21
|
+
import { EmissionContext } from '../runtime/emission-context.js';
|
|
22
|
+
import { Scheduler } from '../runtime/scheduler.js';
|
|
23
|
+
import { RowContextMap } from '../runtime/context-helpers.js';
|
|
24
|
+
import { normalizeCollationName } from '../util/comparison.js';
|
|
25
|
+
import { uniqueEnforcementCollations } from '../schema/unique-enforcement.js';
|
|
26
|
+
/** True for the default (binary) collation: an absent name or a case-insensitive
|
|
27
|
+
* `BINARY`. Non-binary collations gate off the prefix-scan fast path (see
|
|
28
|
+
* {@link MaterializedViewManager.tryBuildCoveringPrefix}). */
|
|
29
|
+
export function isBinaryCollation(collation) {
|
|
30
|
+
return collation === undefined || collation.toUpperCase() === 'BINARY';
|
|
31
|
+
}
|
|
32
|
+
/** Canonical upper-case collation name (absent ⇒ `BINARY`). Used to compare a backing-PK
|
|
33
|
+
* column's collation against its source PK column's at plan-build (see
|
|
34
|
+
* {@link MaterializedViewManager.buildLateralTvfPrefixDeletePlan}). */
|
|
35
|
+
export function normalizeCollation(collation) {
|
|
36
|
+
return (collation ?? 'BINARY').toUpperCase();
|
|
37
|
+
}
|
|
38
|
+
export function mvKey(schemaName, name) {
|
|
39
|
+
return `${schemaName}.${name}`.toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
/** Every source base (lowercased `schema.table`) a plan must be indexed under in
|
|
42
|
+
* `rowTimeBySource`. Single-source arms read one base; the 1:1-join arm also reads
|
|
43
|
+
* the lookup base, so a write to `P` fires maintenance too; the full-rebuild floor reads
|
|
44
|
+
* every source its body touches (set-op legs, all join sources). */
|
|
45
|
+
export function planSourceBases(plan) {
|
|
46
|
+
if (plan.kind === 'full-rebuild') {
|
|
47
|
+
return plan.sourceBases;
|
|
48
|
+
}
|
|
49
|
+
if (plan.kind === 'join-residual' && plan.lookupBase !== plan.sourceBase) {
|
|
50
|
+
return [plan.sourceBase, plan.lookupBase];
|
|
51
|
+
}
|
|
52
|
+
return [plan.sourceBase];
|
|
53
|
+
}
|
|
54
|
+
/** Walk the whole plan; return the string form of the first non-deterministic scalar
|
|
55
|
+
* expression (a `random()`/`now()`/volatile UDF, anywhere in the body), or `undefined`
|
|
56
|
+
* when the body is fully deterministic. The full-rebuild floor's whole-body determinism
|
|
57
|
+
* gate uses this — a non-deterministic body can never be kept equal to its plain view.
|
|
58
|
+
* `physical.deterministic` is computed lazily and propagates from leaves, so checking each
|
|
59
|
+
* scalar node is sound on either the pre-physical or optimized plan. */
|
|
60
|
+
export function findNonDeterministic(node) {
|
|
61
|
+
if (isScalarNode(node)) {
|
|
62
|
+
const det = checkDeterministic(node);
|
|
63
|
+
if (!det.valid)
|
|
64
|
+
return det.expression ?? node.toString();
|
|
65
|
+
}
|
|
66
|
+
for (const child of node.getChildren()) {
|
|
67
|
+
const found = findNonDeterministic(child);
|
|
68
|
+
if (found)
|
|
69
|
+
return found;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
/** Walk the whole plan; return the NAME of the first function whose schema is not declared
|
|
74
|
+
* REPLICABLE (bit-identical across peers/platforms/app-versions — built-ins auto-qualify),
|
|
75
|
+
* or `undefined` when every function in the body qualifies. Mirrors {@link findNonDeterministic}'s
|
|
76
|
+
* `getChildren()` recursion so nested calls (a UDF inside a builtin inside a UDF) and the
|
|
77
|
+
* WHERE / GROUP BY / aggregate-arg / TVF-arg positions are all reached. The structural
|
|
78
|
+
* `'functionSchema' in node` test covers all four function-bearing node kinds uniformly —
|
|
79
|
+
* scalar (`function.ts`), aggregate (`aggregate-function.ts`), TVF call
|
|
80
|
+
* (`table-function-call.ts`), and TVF reference (`reference.ts`) — without per-type imports.
|
|
81
|
+
* Window functions live in a separate builtin-only registry with no UDF registration path and
|
|
82
|
+
* carry no scalar/aggregate/TVF `functionSchema` on these nodes, so they are inherently
|
|
83
|
+
* replicable and are never flagged. Consumed only when the backing host declares
|
|
84
|
+
* `requiresReplicableDerivations` (see {@link MaterializedViewManager.buildMaintenancePlan}). */
|
|
85
|
+
export function findNonReplicableFunction(node) {
|
|
86
|
+
if ('functionSchema' in node) {
|
|
87
|
+
const schema = node.functionSchema;
|
|
88
|
+
if (schema.replicable !== true)
|
|
89
|
+
return schema.name;
|
|
90
|
+
}
|
|
91
|
+
for (const child of node.getChildren()) {
|
|
92
|
+
const found = findNonReplicableFunction(child);
|
|
93
|
+
if (found)
|
|
94
|
+
return found;
|
|
95
|
+
}
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
/** The built-in collation names. These are pure JS string operations (`<`/`>`,
|
|
99
|
+
* locale-independent `toLowerCase()`, ASCII-space trim), so they are bit-identical
|
|
100
|
+
* across peers' JS engines and auto-qualify as REPLICABLE — exactly parallel to why
|
|
101
|
+
* built-in functions do. A custom collation must opt in with `replicable: true` at
|
|
102
|
+
* registration. Short-circuiting on name (regardless of `collationSource`) keeps the
|
|
103
|
+
* walk free of rank reasoning: a `default` BINARY and an `explicit` NOCASE both pass;
|
|
104
|
+
* only a custom name is ever subjected to `_isCollationReplicable`. */
|
|
105
|
+
const BUILTIN_COLLATION_NAMES = new Set(['BINARY', 'NOCASE', 'RTRIM']);
|
|
106
|
+
/** True when `collation` is a non-builtin name the database does not assert REPLICABLE.
|
|
107
|
+
* `undefined`/builtin/replicable ⇒ not offending. */
|
|
108
|
+
function collationIsOffending(collation, db) {
|
|
109
|
+
if (collation === undefined)
|
|
110
|
+
return false;
|
|
111
|
+
const norm = normalizeCollationName(collation);
|
|
112
|
+
if (BUILTIN_COLLATION_NAMES.has(norm))
|
|
113
|
+
return false;
|
|
114
|
+
return !db._isCollationReplicable(norm);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* The collation analogue of {@link findNonReplicableFunction}: return the NAME of the
|
|
118
|
+
* first collation that governs derived bytes and is neither built-in nor declared
|
|
119
|
+
* REPLICABLE, or `undefined` when every collation qualifies. Two sources, soundness-first
|
|
120
|
+
* (any non-builtin non-replicable collation anywhere rejects — see the soundness note in
|
|
121
|
+
* `replicable-collation-class`):
|
|
122
|
+
*
|
|
123
|
+
* 1. **Body scalars** — every fold/order/key site (explicit `COLLATE`, a declared/default
|
|
124
|
+
* column collation, a comparison's effective collation, ORDER BY / GROUP BY / DISTINCT
|
|
125
|
+
* keys) resolves through some scalar node whose `getType().collationName` carries the
|
|
126
|
+
* name. One `getChildren()` walk reading that field uniformly reaches them all, including
|
|
127
|
+
* nested COLLATE, subquery/CTE/set-op legs, and MV-over-MV bodies (whose source columns
|
|
128
|
+
* carry the producing backing's published collation).
|
|
129
|
+
* 2. **Backing key** — a custom collation can govern the backing key MERGE without appearing
|
|
130
|
+
* on any body scalar type (a maintained table declared with an explicit
|
|
131
|
+
* `UNIQUE (… COLLATE custom)` or PK collation the SELECT body never names). The body walk
|
|
132
|
+
* alone would miss it, so the maintained table's own PK column collations + declared
|
|
133
|
+
* secondary UNIQUE per-column enforcement collations (resolving an index-derived override
|
|
134
|
+
* via {@link uniqueEnforcementCollations}) are checked directly — the robust closure.
|
|
135
|
+
*
|
|
136
|
+
* Consumed only when the backing host declares `requiresReplicableDerivations`.
|
|
137
|
+
*/
|
|
138
|
+
export function findNonReplicableCollation(node, mv, db) {
|
|
139
|
+
const bodyOffender = findNonReplicableBodyCollation(node, db);
|
|
140
|
+
if (bodyOffender !== undefined)
|
|
141
|
+
return bodyOffender;
|
|
142
|
+
return findNonReplicableKeyCollation(mv, db);
|
|
143
|
+
}
|
|
144
|
+
/** Source 1: walk the plan; first scalar node whose resolved `collationName` is a
|
|
145
|
+
* non-builtin non-replicable collation. Mirrors {@link findNonReplicableFunction}'s
|
|
146
|
+
* recursion so every body position is reached. */
|
|
147
|
+
function findNonReplicableBodyCollation(node, db) {
|
|
148
|
+
if (isScalarNode(node)) {
|
|
149
|
+
const collation = node.getType().collationName;
|
|
150
|
+
if (collationIsOffending(collation, db))
|
|
151
|
+
return normalizeCollationName(collation);
|
|
152
|
+
}
|
|
153
|
+
for (const child of node.getChildren()) {
|
|
154
|
+
const found = findNonReplicableBodyCollation(child, db);
|
|
155
|
+
if (found !== undefined)
|
|
156
|
+
return found;
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
/** Source 2: the maintained table's backing-key collations — PK column collations and
|
|
161
|
+
* declared secondary UNIQUE per-column enforcement collations. First non-builtin
|
|
162
|
+
* non-replicable name returns. */
|
|
163
|
+
function findNonReplicableKeyCollation(mv, db) {
|
|
164
|
+
for (const pk of mv.primaryKeyDefinition) {
|
|
165
|
+
if (collationIsOffending(pk.collation, db))
|
|
166
|
+
return normalizeCollationName(pk.collation);
|
|
167
|
+
}
|
|
168
|
+
for (const uc of mv.uniqueConstraints ?? []) {
|
|
169
|
+
for (const collation of uniqueEnforcementCollations(mv, uc)) {
|
|
170
|
+
if (collationIsOffending(collation, db))
|
|
171
|
+
return normalizeCollationName(collation);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
/** Canonical, order-stable, bigint-safe string for a key tuple — used to dedup the
|
|
177
|
+
* distinct affected backing keys of a single change in the residual-recompute arm. */
|
|
178
|
+
export function canonKeyValues(values) {
|
|
179
|
+
return JSON.stringify(values, (_k, v) => (typeof v === 'bigint' ? `${v}n` : v));
|
|
180
|
+
}
|
|
181
|
+
/** Aggregate node types (logical + physical) — the analyzed plan may carry any. */
|
|
182
|
+
const AGGREGATE_NODE_TYPES = new Set([
|
|
183
|
+
PlanNodeType.Aggregate,
|
|
184
|
+
PlanNodeType.StreamAggregate,
|
|
185
|
+
PlanNodeType.HashAggregate,
|
|
186
|
+
]);
|
|
187
|
+
/** Find the first aggregate node anywhere in the plan. */
|
|
188
|
+
export function findAggregate(node) {
|
|
189
|
+
if (AGGREGATE_NODE_TYPES.has(node.nodeType))
|
|
190
|
+
return node;
|
|
191
|
+
for (const child of node.getChildren()) {
|
|
192
|
+
const found = findAggregate(child);
|
|
193
|
+
if (found)
|
|
194
|
+
return found;
|
|
195
|
+
}
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Join-bearing PlanNodeTypes (logical + physical). `optimizeForAnalysis` stops
|
|
200
|
+
* before physical join selection, so the analyzed plan carries the logical
|
|
201
|
+
* {@link PlanNodeType.Join}; the physical variants are included so the
|
|
202
|
+
* eligibility gate stays correct if analysis ever surfaces them.
|
|
203
|
+
*/
|
|
204
|
+
const JOIN_NODE_TYPES = new Set([
|
|
205
|
+
PlanNodeType.Join,
|
|
206
|
+
PlanNodeType.NestedLoopJoin,
|
|
207
|
+
PlanNodeType.HashJoin,
|
|
208
|
+
PlanNodeType.MergeJoin,
|
|
209
|
+
PlanNodeType.FanOutLookupJoin,
|
|
210
|
+
PlanNodeType.AsofScan,
|
|
211
|
+
]);
|
|
212
|
+
/** True if any node in the plan has the given type (recursive `getChildren` walk). */
|
|
213
|
+
export function containsNodeType(node, type) {
|
|
214
|
+
if (node.nodeType === type)
|
|
215
|
+
return true;
|
|
216
|
+
for (const child of node.getChildren()) {
|
|
217
|
+
if (containsNodeType(child, type))
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
/** True if the plan carries any join node (logical or physical). Used by the
|
|
223
|
+
* row-time gate, which is single-source — any join is ineligible. */
|
|
224
|
+
export function containsAnyJoin(node) {
|
|
225
|
+
for (const t of JOIN_NODE_TYPES) {
|
|
226
|
+
if (containsNodeType(node, t))
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
/** Count nodes of the given type (recursive `getChildren` walk). Used by the
|
|
232
|
+
* lateral-TVF gate to reject nested/multiple TVFs. */
|
|
233
|
+
export function countNodeType(node, type) {
|
|
234
|
+
let n = node.nodeType === type ? 1 : 0;
|
|
235
|
+
for (const child of node.getChildren())
|
|
236
|
+
n += countNodeType(child, type);
|
|
237
|
+
return n;
|
|
238
|
+
}
|
|
239
|
+
/** Count join nodes (logical + physical) in the plan — used to reject a chained
|
|
240
|
+
* lateral join (the admitted lateral-TVF shape carries exactly one). */
|
|
241
|
+
export function countJoins(node) {
|
|
242
|
+
let n = 0;
|
|
243
|
+
for (const t of JOIN_NODE_TYPES)
|
|
244
|
+
n += countNodeType(node, t);
|
|
245
|
+
return n;
|
|
246
|
+
}
|
|
247
|
+
/** Find the first {@link TableFunctionCallNode} anywhere in the plan, or `undefined`. */
|
|
248
|
+
export function findTableFunctionCall(node) {
|
|
249
|
+
if (node instanceof TableFunctionCallNode)
|
|
250
|
+
return node;
|
|
251
|
+
for (const child of node.getChildren()) {
|
|
252
|
+
const found = findTableFunctionCall(child);
|
|
253
|
+
if (found)
|
|
254
|
+
return found;
|
|
255
|
+
}
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
/** Collect `relationKey → TableReferenceNode` over a plan. */
|
|
259
|
+
export function collectTableRefs(node, out = new Map()) {
|
|
260
|
+
if (node instanceof TableReferenceNode) {
|
|
261
|
+
const base = `${node.tableSchema.schemaName}.${node.tableSchema.name}`.toLowerCase();
|
|
262
|
+
out.set(`${base}#${node.id ?? 'unknown'}`, node);
|
|
263
|
+
}
|
|
264
|
+
for (const child of node.getChildren())
|
|
265
|
+
collectTableRefs(child, out);
|
|
266
|
+
return out;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Merge attribute provenance (output attr id → producing scalar expr) from every
|
|
270
|
+
* node that exposes it. Physical aggregates expose `getProducingExprs()`; the
|
|
271
|
+
* logical {@link AggregateNode} present in the pre-physical analyzed plan does
|
|
272
|
+
* not, so its group-by → output-attr mapping is reconstructed directly here.
|
|
273
|
+
*/
|
|
274
|
+
export function collectProducingExprs(node, out = new Map()) {
|
|
275
|
+
const fn = node.getProducingExprs;
|
|
276
|
+
if (typeof fn === 'function') {
|
|
277
|
+
for (const [attrId, expr] of fn.call(node)) {
|
|
278
|
+
if (!out.has(attrId))
|
|
279
|
+
out.set(attrId, expr);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
else if (node instanceof AggregateNode) {
|
|
283
|
+
const attrs = node.getAttributes();
|
|
284
|
+
node.groupBy.forEach((expr, i) => {
|
|
285
|
+
const attr = attrs[i];
|
|
286
|
+
if (attr && !out.has(attr.id))
|
|
287
|
+
out.set(attr.id, expr);
|
|
288
|
+
});
|
|
289
|
+
node.aggregates.forEach((agg, i) => {
|
|
290
|
+
const attr = attrs[node.groupBy.length + i];
|
|
291
|
+
if (attr && !out.has(attr.id))
|
|
292
|
+
out.set(attr.id, agg.expression);
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
for (const child of node.getChildren())
|
|
296
|
+
collectProducingExprs(child, out);
|
|
297
|
+
return out;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Transitive provenance: chase an output-attr → producing `ColumnReference` chain (a
|
|
301
|
+
* Project-over-Aggregate or a passthrough-through-Join adds a hop the single-hop
|
|
302
|
+
* {@link resolveSourceCol} cannot follow) until landing on a base-source column, or
|
|
303
|
+
* `undefined` (e.g. a TVF-output column with no base-source identity). Shared by the
|
|
304
|
+
* aggregate-residual and lateral-TVF arms.
|
|
305
|
+
*/
|
|
306
|
+
export function resolveTransitiveSourceCol(attrId, sourceAttrToCol, producingByAttrId) {
|
|
307
|
+
const seen = new Set();
|
|
308
|
+
let cur = attrId;
|
|
309
|
+
while (cur !== undefined && !seen.has(cur)) {
|
|
310
|
+
seen.add(cur);
|
|
311
|
+
const direct = sourceAttrToCol.get(cur);
|
|
312
|
+
if (direct !== undefined)
|
|
313
|
+
return direct;
|
|
314
|
+
const expr = producingByAttrId.get(cur);
|
|
315
|
+
if (expr instanceof ColumnReferenceNode) {
|
|
316
|
+
cur = expr.attributeId;
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
return undefined;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* True iff the analyzed join body's WHERE references the lookup table `P` (or any base other
|
|
325
|
+
* than the driving `T`) — the classification the join-residual arm uses to decide whether the
|
|
326
|
+
* lookup side must be delete-capable (see {@link MaterializedViewManager.buildJoinResidualPlan}).
|
|
327
|
+
* The body WHERE — possibly split by predicate-pushdown — surfaces as one or more
|
|
328
|
+
* {@link FilterNode}s above/around the join; the join's own `ON` condition lives inside the
|
|
329
|
+
* JoinNode (not a Filter) and so is excluded. Each column a filter predicate references is
|
|
330
|
+
* resolved against `T`'s attribute→source-column map (transitively); a reference that does NOT
|
|
331
|
+
* resolve to a `T` column is a `P` (the arm requires exactly two base refs, `T` and `P`) — or
|
|
332
|
+
* otherwise non-`T` — reference. Conservative by construction: an unresolved reference counts as
|
|
333
|
+
* lookup-referencing, so the cheaper `T`-only upsert-only path is taken only when **every**
|
|
334
|
+
* filter column provably belongs to `T`.
|
|
335
|
+
*/
|
|
336
|
+
export function bodyWhereReferencesLookup(analyzed, tAttrToCol, producingByAttrId) {
|
|
337
|
+
const filterAttrs = new Set();
|
|
338
|
+
collectFilterPredicateAttrs(analyzed, filterAttrs);
|
|
339
|
+
for (const attrId of filterAttrs) {
|
|
340
|
+
if (resolveTransitiveSourceCol(attrId, tAttrToCol, producingByAttrId) === undefined)
|
|
341
|
+
return true;
|
|
342
|
+
}
|
|
343
|
+
return false;
|
|
344
|
+
}
|
|
345
|
+
/** Collect every attribute id referenced by a ColumnReferenceNode inside any {@link FilterNode}
|
|
346
|
+
* predicate in the plan (the body WHERE; the join `ON` condition is not a Filter). */
|
|
347
|
+
function collectFilterPredicateAttrs(node, out) {
|
|
348
|
+
if (node instanceof FilterNode)
|
|
349
|
+
collectColumnRefAttrs(node.predicate, out);
|
|
350
|
+
for (const child of node.getChildren())
|
|
351
|
+
collectFilterPredicateAttrs(child, out);
|
|
352
|
+
}
|
|
353
|
+
/** Collect every {@link ColumnReferenceNode} attribute id in a scalar subtree. */
|
|
354
|
+
function collectColumnRefAttrs(node, out) {
|
|
355
|
+
if (node instanceof ColumnReferenceNode)
|
|
356
|
+
out.add(node.attributeId);
|
|
357
|
+
for (const child of node.getChildren())
|
|
358
|
+
collectColumnRefAttrs(child, out);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* True iff any {@link FilterNode} predicate in the body (the body WHERE) is non-deterministic.
|
|
362
|
+
* The join-residual arm embeds the body WHERE in every residual (forward, in-scope reverse, and
|
|
363
|
+
* — when delete-capable — membership), so a volatile predicate (`random()`/`now()`/a volatile
|
|
364
|
+
* UDF) would make them irreproducible and diverge from the plain view. The arm therefore declines
|
|
365
|
+
* such a body (returns `null` → the full-rebuild floor, which applies the **pragma-gated**
|
|
366
|
+
* whole-body determinism reject — rejected without `pragma nondeterministic_schema`, accepted as a
|
|
367
|
+
* wholesale rebuild with it), preserving the pre-WHERE-widening behavior rather than building an
|
|
368
|
+
* unsound bounded-delta residual.
|
|
369
|
+
*/
|
|
370
|
+
export function bodyWhereIsNonDeterministic(analyzed) {
|
|
371
|
+
const visit = (node) => {
|
|
372
|
+
if (node instanceof FilterNode && !checkDeterministic(node.predicate).valid)
|
|
373
|
+
return true;
|
|
374
|
+
for (const child of node.getChildren()) {
|
|
375
|
+
if (visit(child))
|
|
376
|
+
return true;
|
|
377
|
+
}
|
|
378
|
+
return false;
|
|
379
|
+
};
|
|
380
|
+
return visit(analyzed);
|
|
381
|
+
}
|
|
382
|
+
/** Read the output attributes of a block's final relational statement. */
|
|
383
|
+
export function relationalAttributes(block) {
|
|
384
|
+
const children = block.getChildren();
|
|
385
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
386
|
+
const child = children[i];
|
|
387
|
+
if (typeof child.getAttributes === 'function')
|
|
388
|
+
return child.getAttributes();
|
|
389
|
+
}
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
/** The root relational node of a block's final relational statement — the node whose
|
|
393
|
+
* attributes {@link relationalAttributes} reads — or `undefined`. Feeds the shared
|
|
394
|
+
* coverage-prover join predicates ({@link proveOneToOneJoin}) for the join-residual arm. */
|
|
395
|
+
export function rootRelationalNode(block) {
|
|
396
|
+
const children = block.getChildren();
|
|
397
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
398
|
+
const child = children[i];
|
|
399
|
+
if (isRelationalNode(child))
|
|
400
|
+
return child;
|
|
401
|
+
}
|
|
402
|
+
return undefined;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* The diagnostic for a create-time **hard** reject — one of the four non-shape rejections
|
|
406
|
+
* the cost-gated-with-floor model keeps (non-determinism, bag/no-key, no relational output,
|
|
407
|
+
* size). Names the MV and steers to a plain `view` (live re-evaluation) or
|
|
408
|
+
* `create table ... as <body>` (a one-off snapshot) — never a refresh policy, never an
|
|
409
|
+
* internal implementation detail. Used by the arm builders (for their arm-specific
|
|
410
|
+
* determinism diagnostic) and by {@link MaterializedViewManager.buildFullRebuildPlan}.
|
|
411
|
+
*/
|
|
412
|
+
export function cannotMaterialize(mvName, detail) {
|
|
413
|
+
return new QuereusError(`materialized view '${mvName}' cannot be materialized: ${detail}. For this body, use a `
|
|
414
|
+
+ `plain 'create view' (live re-evaluation) or 'create table ... as <body>' (a one-off snapshot)`, StatusCode.UNSUPPORTED);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* The diagnostic for the create-time **replicable-determinism** reject — distinct from
|
|
418
|
+
* {@link cannotMaterialize} because the fix here is not "use a plain view": the body is
|
|
419
|
+
* fine, it just calls a function the backing host requires be REPLICABLE. So this names the
|
|
420
|
+
* function and steers to declaring it `replicable: true` at registration (built-ins qualify
|
|
421
|
+
* automatically). Fires only when the resolved backing host declares
|
|
422
|
+
* `requiresReplicableDerivations`. `StatusCode.UNSUPPORTED`.
|
|
423
|
+
*/
|
|
424
|
+
export function nonReplicableDerivationError(mvName, fnName) {
|
|
425
|
+
return new QuereusError(`materialized view '${mvName}' cannot be materialized on this backing host: it calls non-replicable `
|
|
426
|
+
+ `function '${fnName}'. This host requires every function in the body to be bit-identical across `
|
|
427
|
+
+ `peers/platforms; declare the function \`replicable: true\` at registration (built-in functions `
|
|
428
|
+
+ `qualify automatically)`, StatusCode.UNSUPPORTED);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* The diagnostic for the create-time **replicable-collation** reject — the collation
|
|
432
|
+
* analogue of {@link nonReplicableDerivationError}. The body is fine; it just folds or
|
|
433
|
+
* orders (comparison / ORDER BY / GROUP BY / DISTINCT / backing key) under a collation the
|
|
434
|
+
* backing host requires be bit-identical across peers — so this does NOT steer to a plain
|
|
435
|
+
* view. It names the collation and steers to declaring it `replicable: true` at registration
|
|
436
|
+
* (built-in collations qualify automatically). Fires only when the resolved backing host
|
|
437
|
+
* declares `requiresReplicableDerivations`. `StatusCode.UNSUPPORTED`.
|
|
438
|
+
*/
|
|
439
|
+
export function nonReplicableCollationDerivationError(mvName, collationName) {
|
|
440
|
+
return new QuereusError(`materialized view '${mvName}' cannot be materialized on this backing host: it folds or orders under `
|
|
441
|
+
+ `non-replicable collation '${collationName}'. This host requires every collation in the body to be `
|
|
442
|
+
+ `bit-identical across peers/platforms; declare the collation \`replicable: true\` at registration `
|
|
443
|
+
+ `(built-in collations qualify automatically)`, StatusCode.UNSUPPORTED);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* True iff a computed projection expression can be evaluated as a pure function of the
|
|
447
|
+
* changed source row — i.e. it contains no subquery / relational subtree (cross-row) and
|
|
448
|
+
* every column reference resolves to a source column (no correlated / outer reference).
|
|
449
|
+
* This is the "shape" gate distinct from the determinism gate (a determinism failure is
|
|
450
|
+
* caught earlier by `checkDeterministic`); a `false` here is a `null` fall-through to the
|
|
451
|
+
* full-rebuild floor, not a hard reject.
|
|
452
|
+
*/
|
|
453
|
+
export function isSingleRowEvaluable(expr, sourceDescriptor) {
|
|
454
|
+
const visit = (node) => {
|
|
455
|
+
if (node !== expr && isRelationalNode(node))
|
|
456
|
+
return false; // a subquery / relational subtree
|
|
457
|
+
if (node instanceof ColumnReferenceNode && sourceDescriptor[node.attributeId] === undefined) {
|
|
458
|
+
return false; // references a value outside the source row
|
|
459
|
+
}
|
|
460
|
+
for (const child of node.getChildren()) {
|
|
461
|
+
if (!visit(child))
|
|
462
|
+
return false;
|
|
463
|
+
}
|
|
464
|
+
return true;
|
|
465
|
+
};
|
|
466
|
+
return visit(expr);
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Compile a deterministic scalar plan node into a per-source-row evaluator by reusing
|
|
470
|
+
* the runtime: emit the node once, then run it against a row context that maps each
|
|
471
|
+
* source attribute id to its column index in the changed row. Reusing the runtime
|
|
472
|
+
* (rather than a hand-rolled scalar interpreter) guarantees a computed backing value is
|
|
473
|
+
* byte-for-byte what `select <body>` would produce — the materialized-view ≡ view
|
|
474
|
+
* contract. The gated forms (deterministic scalars over a single row, no subqueries —
|
|
475
|
+
* see {@link assertSingleRowEvaluable}) resolve synchronously; a Promise result would
|
|
476
|
+
* signal an unsupported async form and is surfaced loudly rather than silently awaited.
|
|
477
|
+
*/
|
|
478
|
+
export function compileSourceRowEvaluator(db, expr, sourceDescriptor) {
|
|
479
|
+
const instruction = emitPlanNode(expr, new EmissionContext(db));
|
|
480
|
+
const scheduler = new Scheduler(instruction);
|
|
481
|
+
const context = new RowContextMap();
|
|
482
|
+
let currentRow = [];
|
|
483
|
+
// Installed once; the getter reads the closed-over `currentRow`, refreshed per call.
|
|
484
|
+
context.set(sourceDescriptor, () => currentRow);
|
|
485
|
+
const rctx = {
|
|
486
|
+
db,
|
|
487
|
+
stmt: undefined,
|
|
488
|
+
params: {},
|
|
489
|
+
context,
|
|
490
|
+
tableContexts: new Map(),
|
|
491
|
+
enableMetrics: false,
|
|
492
|
+
};
|
|
493
|
+
return (row) => {
|
|
494
|
+
currentRow = row;
|
|
495
|
+
const result = scheduler.run(rctx);
|
|
496
|
+
if (result instanceof Promise) {
|
|
497
|
+
throw new QuereusError('a row-time projection expression evaluated asynchronously (unexpected for a gated single-row scalar)', StatusCode.INTERNAL);
|
|
498
|
+
}
|
|
499
|
+
return result;
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
//# sourceMappingURL=database-materialized-views-analysis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-materialized-views-analysis.js","sourceRoot":"","sources":["../../../src/core/database-materialized-views-analysis.ts"],"names":[],"mappings":"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"}
|