@quereus/quereus 4.3.1 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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 +3 -3
- package/dist/src/core/database-external-changes.d.ts.map +1 -1
- package/dist/src/core/database-external-changes.js +13 -10
- package/dist/src/core/database-external-changes.js.map +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 +422 -0
- package/dist/src/core/database-materialized-views-apply.d.ts.map +1 -0
- package/dist/src/core/database-materialized-views-apply.js +929 -0
- package/dist/src/core/database-materialized-views-apply.js.map +1 -0
- package/dist/src/core/database-materialized-views-plan-builders.d.ts +267 -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 +1423 -0
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -0
- package/dist/src/core/database-materialized-views-plans.d.ts +641 -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 +108 -860
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +212 -2165
- 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 +270 -50
- 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/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +127 -21
- package/dist/src/func/builtins/aggregate.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/func/registration.d.ts +6 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +16 -0
- package/dist/src/func/registration.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/equi-correlation.d.ts +26 -0
- package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -0
- package/dist/src/planner/analysis/equi-correlation.js +62 -0
- package/dist/src/planner/analysis/equi-correlation.js.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +54 -18
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +86 -42
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +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/scalar-subqueries.d.ts +28 -0
- package/dist/src/planner/analysis/scalar-subqueries.d.ts.map +1 -0
- package/dist/src/planner/analysis/scalar-subqueries.js +60 -0
- package/dist/src/planner/analysis/scalar-subqueries.js.map +1 -0
- package/dist/src/planner/analysis/update-lineage.d.ts +1 -1
- package/dist/src/planner/analysis/update-lineage.js +1 -1
- package/dist/src/planner/analysis/update-lineage.js.map +1 -1
- package/dist/src/planner/analysis/view-complement.d.ts +2 -2
- package/dist/src/planner/building/delete.js +2 -2
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts +2 -2
- package/dist/src/planner/building/dml-target.js +2 -2
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +53 -2
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/schema-resolution.d.ts +3 -0
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/schema-resolution.js +4 -5
- package/dist/src/planner/building/schema-resolution.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +18 -4
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.js +2 -2
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +7 -7
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +5 -8
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +34 -2
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +185 -42
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/cache/reference-graph.d.ts +14 -5
- package/dist/src/planner/cache/reference-graph.d.ts.map +1 -1
- package/dist/src/planner/cache/reference-graph.js +31 -39
- package/dist/src/planner/cache/reference-graph.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +30 -5
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +26 -0
- 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 +19 -2
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +43 -3
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +16 -1
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +16 -3
- 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 +30 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +38 -5
- 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 +1014 -895
- 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-cte-optimization.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js +8 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts +7 -0
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.js +14 -1
- package/dist/src/planner/rules/cache/rule-in-subquery-cache.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.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +55 -56
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js +6 -0
- package/dist/src/planner/rules/cache/rule-mutating-subquery-cache.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +25 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +176 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -0
- 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/cache/rule-scalar-subquery-cache.d.ts +29 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.d.ts.map +1 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js +66 -0
- package/dist/src/planner/rules/cache/rule-scalar-subquery-cache.js.map +1 -0
- 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-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +1 -54
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-inner-join-existence-recovery.js +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +1 -1
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js +5 -6
- package/dist/src/planner/rules/parallel/rule-async-gather-zip-by-key.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +1 -1
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +2 -2
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +4 -3
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +19 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +48 -0
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +12 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +22 -20
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/shared/index-style-context.d.ts +39 -0
- package/dist/src/planner/rules/shared/index-style-context.d.ts.map +1 -0
- package/dist/src/planner/rules/shared/index-style-context.js +26 -0
- package/dist/src/planner/rules/shared/index-style-context.js.map +1 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +1 -1
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +1 -1
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts +191 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js +623 -0
- package/dist/src/planner/rules/subquery/rule-scalar-agg-decorrelation.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts +10 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +242 -51
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.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/cache/shared-cache.d.ts +7 -0
- package/dist/src/runtime/cache/shared-cache.d.ts.map +1 -1
- package/dist/src/runtime/cache/shared-cache.js +34 -1
- package/dist/src/runtime/cache/shared-cache.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 +2 -3
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +23 -28
- 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 +7 -3
- package/dist/src/runtime/emit/cache.d.ts.map +1 -1
- package/dist/src/runtime/emit/cache.js +25 -7
- 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 +45 -21
- 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 +138 -74
- 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 +128 -16
- 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 +61 -2
- 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 +32 -4
- package/dist/src/runtime/parallel-driver.d.ts.map +1 -1
- package/dist/src/runtime/parallel-driver.js +88 -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 +102 -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/function.d.ts +79 -0
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-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 +59 -24
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-plan.js +13 -21
- package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +169 -7
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +334 -9
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +11 -4
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +35 -16
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +30 -4
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +63 -15
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +9 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +35 -14
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key-encode.js +12 -6
- package/dist/src/vtab/memory/utils/primary-key-encode.js.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.d.ts +6 -1
- package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/primary-key.js +12 -8
- package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
- package/dist/src/vtab/module.d.ts +38 -14
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +41 -2
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js +19 -0
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +5 -4
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts +0 -18
- package/dist/src/planner/rules/cache/rule-materialization-advisory.d.ts.map +0 -1
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js +0 -65
- package/dist/src/planner/rules/cache/rule-materialization-advisory.js.map +0 -1
|
@@ -31,6 +31,7 @@ import { registerType as registerTypeInRegistry } from '../types/registry.js';
|
|
|
31
31
|
import { getParameterTypes } from './param.js';
|
|
32
32
|
import { rowToObject } from './utils.js';
|
|
33
33
|
import { wrapAsyncIterator } from '../util/async-iterator.js';
|
|
34
|
+
import { Latches } from '../util/latches.js';
|
|
34
35
|
import { DatabaseEventEmitter, } from './database-events.js';
|
|
35
36
|
import { TransactionManager } from './database-transaction.js';
|
|
36
37
|
import { ingestExternalRowChangeBatch } from './database-external-changes.js';
|
|
@@ -88,13 +89,28 @@ export class Database {
|
|
|
88
89
|
/** Materialized-view schema-change staleness tracking */
|
|
89
90
|
materializedViewManager;
|
|
90
91
|
/** Per-database collation registry — comparator + optional key normalizer +
|
|
91
|
-
* optional REPLICABLE
|
|
92
|
-
* participation; comparator-only collations may still be used in ORDER BY
|
|
93
|
-
* cannot back a compound index. `replicable` (stamped `true` on the built-ins,
|
|
92
|
+
* optional REPLICABLE and ORDER-PRESERVING assertions. The normalizer is required
|
|
93
|
+
* for index participation; comparator-only collations may still be used in ORDER BY
|
|
94
|
+
* but cannot back a compound index. `replicable` (stamped `true` on the built-ins,
|
|
94
95
|
* opt-in for a custom collation) is consulted only by the materialized-view
|
|
95
96
|
* replicable-collation gate when the backing host demands it
|
|
96
|
-
* (see {@link _isCollationReplicable}).
|
|
97
|
+
* (see {@link _isCollationReplicable}). `orderPreserving` (same shape) is consulted
|
|
98
|
+
* by persistent stores before seeking a byte range or advertising byte order as
|
|
99
|
+
* collation order (see {@link _isCollationOrderPreserving}). */
|
|
97
100
|
collations = new Map();
|
|
101
|
+
/** Lazily-bound {@link getCollationResolver} closure — created once so callers can
|
|
102
|
+
* compare resolver identity, while still reading the live `collations` map. */
|
|
103
|
+
collationResolver;
|
|
104
|
+
/** Lazily-bound {@link getKeyNormalizerResolver} closure — same identity/liveness
|
|
105
|
+
* contract as {@link collationResolver}. */
|
|
106
|
+
keyNormalizerResolver;
|
|
107
|
+
/**
|
|
108
|
+
* Per-database latch registry — serializes commit / collapse / consolidate /
|
|
109
|
+
* destroy / schema-change work by string key *within this database*. Scoped to
|
|
110
|
+
* the `Database` instance (not process-global) so two databases never contend
|
|
111
|
+
* on the same key. Memory-table managers reach it via `this.db.latches`.
|
|
112
|
+
*/
|
|
113
|
+
latches = new Latches();
|
|
98
114
|
constructor() {
|
|
99
115
|
this.schemaManager = new SchemaManager(this);
|
|
100
116
|
this.declaredSchemaManager = new DeclaredSchemaManager();
|
|
@@ -211,6 +227,18 @@ export class Database {
|
|
|
211
227
|
log('Default column nullability changed to: %s', value);
|
|
212
228
|
}
|
|
213
229
|
});
|
|
230
|
+
this.options.registerOption('ddl_transaction_policy', {
|
|
231
|
+
type: 'string',
|
|
232
|
+
defaultValue: 'permissive',
|
|
233
|
+
description: 'Whether module-dispatching DDL (CREATE/DROP TABLE/INDEX, ALTER TABLE) is allowed inside an explicit transaction: "permissive" (default; schema changes may escape the transaction, as today) or "strict" (refuse such DDL inside a transaction unless the module declares ddlTransactionality=transactional).',
|
|
234
|
+
onChange: (event) => {
|
|
235
|
+
const value = event.newValue;
|
|
236
|
+
if (value !== 'permissive' && value !== 'strict') {
|
|
237
|
+
throw new QuereusError(`Invalid ddl_transaction_policy value: ${value}. Must be "permissive" or "strict"`, StatusCode.ERROR);
|
|
238
|
+
}
|
|
239
|
+
log('DDL transaction policy changed to: %s', value);
|
|
240
|
+
}
|
|
241
|
+
});
|
|
214
242
|
this.options.registerOption('default_collation', {
|
|
215
243
|
type: 'string',
|
|
216
244
|
defaultValue: 'BINARY',
|
|
@@ -301,14 +329,21 @@ export class Database {
|
|
|
301
329
|
registerDefaultCollations() {
|
|
302
330
|
// Register the built-in collations into per-instance registry, paired
|
|
303
331
|
// with their key normalizers so they can back compound indexes. Stamped
|
|
304
|
-
// `replicable: true` — the built-ins are pure JS string operations (
|
|
305
|
-
// locale-independent `toLowerCase()`, ASCII-space trim), so they are
|
|
332
|
+
// `replicable: true` — the built-ins are pure JS string operations (a code-point
|
|
333
|
+
// scan, locale-independent `toLowerCase()`, ASCII-space trim), so they are
|
|
306
334
|
// bit-identical across peers' JS engines, exactly parallel to why built-in
|
|
307
335
|
// functions auto-qualify (see registerBuiltinFunctions). This is the single
|
|
308
336
|
// seam that *knows* a collation is a builtin.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
337
|
+
//
|
|
338
|
+
// Also stamped `orderPreserving: true`: each built-in comparator orders its
|
|
339
|
+
// operands' NORMALIZED forms by Unicode CODE POINT (BINARY's normalizer is the
|
|
340
|
+
// identity, NOCASE's is `toLowerCase()`, RTRIM's an ASCII-space right-trim), and
|
|
341
|
+
// code-point order IS the order a memcmp of those forms' UTF-8 bytes produces —
|
|
342
|
+
// see {@link import('../util/comparison.js').compareCodePoints} and
|
|
343
|
+
// {@link _isCollationOrderPreserving}.
|
|
344
|
+
this.collations.set('BINARY', { comparator: BINARY_COLLATION, normalizer: BUILTIN_NORMALIZERS.BINARY, replicable: true, orderPreserving: true });
|
|
345
|
+
this.collations.set('NOCASE', { comparator: NOCASE_COLLATION, normalizer: BUILTIN_NORMALIZERS.NOCASE, replicable: true, orderPreserving: true });
|
|
346
|
+
this.collations.set('RTRIM', { comparator: RTRIM_COLLATION, normalizer: BUILTIN_NORMALIZERS.RTRIM, replicable: true, orderPreserving: true });
|
|
312
347
|
log("Default collations registered (BINARY, NOCASE, RTRIM)");
|
|
313
348
|
}
|
|
314
349
|
/**
|
|
@@ -361,7 +396,9 @@ export class Database {
|
|
|
361
396
|
throwIfAborted(options?.signal);
|
|
362
397
|
const stmt = this.prepare(sql, params);
|
|
363
398
|
try {
|
|
364
|
-
|
|
399
|
+
// Params were already bound (and their types inferred) by prepare();
|
|
400
|
+
// don't re-pass them or stmt.get() would rebind + re-validate every value.
|
|
401
|
+
return await stmt.get(undefined, options);
|
|
365
402
|
}
|
|
366
403
|
finally {
|
|
367
404
|
await stmt.finalize();
|
|
@@ -1076,11 +1113,12 @@ export class Database {
|
|
|
1076
1113
|
this.optimizer.updateTuning(tuning);
|
|
1077
1114
|
}
|
|
1078
1115
|
/**
|
|
1079
|
-
* Registers a user-defined collation sequence.
|
|
1116
|
+
* Registers a user-defined collation sequence. `NOCASE` and `RTRIM` may be replaced;
|
|
1117
|
+
* `BINARY` may not (see {@link getCollationResolver}) and throws `MisuseError`.
|
|
1080
1118
|
* @param name The name of the collation sequence (case-insensitive).
|
|
1081
1119
|
* @param func The comparison function (a, b) => number (-1, 0, 1).
|
|
1082
1120
|
* @param optionsOrNormalizer Either a bare key normalizer (the legacy positional
|
|
1083
|
-
* form) or an options object `{ normalizer?, replicable? }`:
|
|
1121
|
+
* form) or an options object `{ normalizer?, replicable?, orderPreserving? }`:
|
|
1084
1122
|
* - `normalizer` — a function whose output equality partitions strings into the
|
|
1085
1123
|
* same equivalence classes as `func` (modulo total ordering). Required to make
|
|
1086
1124
|
* this collation usable as the key for a compound index; ORDER BY / standalone
|
|
@@ -1090,6 +1128,16 @@ export class Database {
|
|
|
1090
1128
|
* the materialized-view replicable-collation gate when a backing host declares
|
|
1091
1129
|
* `requiresReplicableDerivations`. Defaults to `false` — the conservative
|
|
1092
1130
|
* default for a custom collation (built-ins auto-qualify).
|
|
1131
|
+
* - `orderPreserving` — assert the normalizer preserves ORDER, not merely
|
|
1132
|
+
* equality: for all strings `x`, `y`,
|
|
1133
|
+
* `sign(func(x, y)) === sign(memcmp(utf8(normalizer(x)), utf8(normalizer(y))))`.
|
|
1134
|
+
* This is strictly stronger than the equality promise `normalizer` alone makes.
|
|
1135
|
+
* Persistent stores physically order rows by the normalized key bytes, so they
|
|
1136
|
+
* may only seek a byte range — or advertise byte order as collation order — for
|
|
1137
|
+
* a collation carrying this assertion; without it they fall back to a full scan
|
|
1138
|
+
* plus a comparator-accurate residual filter (correct, just slower). Defaults to
|
|
1139
|
+
* `false` — correctness over speed for a custom collation (built-ins auto-qualify).
|
|
1140
|
+
* See {@link _isCollationOrderPreserving}.
|
|
1093
1141
|
* @example
|
|
1094
1142
|
* // Example: Create a custom collation for phone numbers
|
|
1095
1143
|
* db.registerCollation('PHONENUMBER', (a, b) => {
|
|
@@ -1102,10 +1150,31 @@ export class Database {
|
|
|
1102
1150
|
* // A locale-independent custom collation a replicating backing can host:
|
|
1103
1151
|
* db.registerCollation('CODEPOINT', cmp, { replicable: true });
|
|
1104
1152
|
*
|
|
1153
|
+
* // A normalizer whose byte order matches its comparator, so store range seeks stay:
|
|
1154
|
+
* db.registerCollation('NOSPACE', cmp, { normalizer: s => s.replace(/ /g, ''), orderPreserving: true });
|
|
1155
|
+
*
|
|
1105
1156
|
* // Then use it in SQL:
|
|
1106
1157
|
* // SELECT * FROM contacts ORDER BY phone COLLATE PHONENUMBER;
|
|
1107
1158
|
* // CREATE INDEX phone_idx ON contacts(phone COLLATE PHONENUMBER);
|
|
1108
1159
|
*/
|
|
1160
|
+
// NOTE: registration is not retroactive. Comparators and key normalizers are
|
|
1161
|
+
// resolved once, at comparator-construction time (index build, plan emission), so a
|
|
1162
|
+
// collation registered — or re-registered with a different comparator/normalizer —
|
|
1163
|
+
// after a structure was built does not rebuild it. A statement emitted *after* the
|
|
1164
|
+
// re-registration does see the new one. Register collations before creating tables
|
|
1165
|
+
// and indexes that name them. If retroactive re-registration ever needs to be
|
|
1166
|
+
// supported, invalidate dependent indexes and cached plans here: the collation
|
|
1167
|
+
// dependency `EmissionContext` records only drives an existence check before
|
|
1168
|
+
// execution (`validateCapturedSchemaObjects`), which warns — it does not invalidate.
|
|
1169
|
+
//
|
|
1170
|
+
// NOTE: `orderPreserving` is stated against UTF-8 memcmp of the normalized forms, and the
|
|
1171
|
+
// built-ins hold it for every WELL-FORMED string. It is unachievable for unpaired
|
|
1172
|
+
// surrogates, which have no UTF-8 encoding at all (`TextEncoder` folds each to U+FFFD);
|
|
1173
|
+
// the persistent store therefore REFUSES to key them (`quereus-store`'s `encodeText`
|
|
1174
|
+
// raises), so no value a store-backed table can hold falls outside the assertion. Memory
|
|
1175
|
+
// tables still accept them, which is why comparators must stay total there. A custom
|
|
1176
|
+
// collation that compares with JS `<`/`>` orders by UTF-16 code unit and must NOT claim
|
|
1177
|
+
// the assertion; use {@link import('../util/comparison.js').compareCodePoints}.
|
|
1109
1178
|
registerCollation(name, func, optionsOrNormalizer) {
|
|
1110
1179
|
this.checkOpen();
|
|
1111
1180
|
if (typeof name !== 'string' || !name) {
|
|
@@ -1115,16 +1184,18 @@ export class Database {
|
|
|
1115
1184
|
throw new MisuseError('registerCollation: func must be a function');
|
|
1116
1185
|
}
|
|
1117
1186
|
// A function-typed third arg is the legacy normalizer-only path (existing call
|
|
1118
|
-
// sites unchanged, `replicable`
|
|
1119
|
-
// any other non-undefined third arg is a misused legacy normalizer.
|
|
1187
|
+
// sites unchanged, `replicable` and `orderPreserving` default to false); an object
|
|
1188
|
+
// reads its fields; any other non-undefined third arg is a misused legacy normalizer.
|
|
1120
1189
|
let normalizer;
|
|
1121
1190
|
let replicable = false;
|
|
1191
|
+
let orderPreserving = false;
|
|
1122
1192
|
if (typeof optionsOrNormalizer === 'function') {
|
|
1123
1193
|
normalizer = optionsOrNormalizer;
|
|
1124
1194
|
}
|
|
1125
1195
|
else if (typeof optionsOrNormalizer === 'object' && optionsOrNormalizer !== null) {
|
|
1126
1196
|
normalizer = optionsOrNormalizer.normalizer;
|
|
1127
1197
|
replicable = optionsOrNormalizer.replicable === true;
|
|
1198
|
+
orderPreserving = optionsOrNormalizer.orderPreserving === true;
|
|
1128
1199
|
}
|
|
1129
1200
|
else if (optionsOrNormalizer !== undefined) {
|
|
1130
1201
|
throw new MisuseError('registerCollation: normalizer must be a function when supplied');
|
|
@@ -1132,7 +1203,12 @@ export class Database {
|
|
|
1132
1203
|
if (normalizer !== undefined && typeof normalizer !== 'function') {
|
|
1133
1204
|
throw new MisuseError('registerCollation: normalizer must be a function when supplied');
|
|
1134
1205
|
}
|
|
1135
|
-
const upperName = name
|
|
1206
|
+
const upperName = normalizeCollationName(name);
|
|
1207
|
+
if (upperName === 'BINARY') {
|
|
1208
|
+
// Resolvers fast-path BINARY to the built-in comparator, so an override could
|
|
1209
|
+
// never take effect uniformly — reject rather than silently half-apply it.
|
|
1210
|
+
throw new MisuseError('registerCollation: BINARY cannot be overridden');
|
|
1211
|
+
}
|
|
1136
1212
|
if (this.collations.has(upperName)) {
|
|
1137
1213
|
log('Overwriting existing collation: %s', upperName);
|
|
1138
1214
|
}
|
|
@@ -1141,8 +1217,22 @@ export class Database {
|
|
|
1141
1217
|
entry.normalizer = normalizer;
|
|
1142
1218
|
if (replicable)
|
|
1143
1219
|
entry.replicable = true;
|
|
1220
|
+
if (orderPreserving)
|
|
1221
|
+
entry.orderPreserving = true;
|
|
1144
1222
|
this.collations.set(upperName, entry);
|
|
1145
|
-
log('Registered collation: %s%s%s', upperName, normalizer !== undefined ? ' (with normalizer)' : '', replicable ? ' (replicable)' : '');
|
|
1223
|
+
log('Registered collation: %s%s%s%s', upperName, normalizer !== undefined ? ' (with normalizer)' : '', replicable ? ' (replicable)' : '', orderPreserving ? ' (order-preserving)' : '');
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* True iff `name` names a collation this connection can resolve — a built-in
|
|
1227
|
+
* (BINARY/NOCASE/RTRIM) or one registered via {@link registerCollation}. The
|
|
1228
|
+
* DDL-time counterpart of {@link getCollationResolver} that returns a boolean
|
|
1229
|
+
* instead of throwing; used to gate an explicit column COLLATE against the
|
|
1230
|
+
* connection's registry (see `validateCollationForType`). Names are normalized
|
|
1231
|
+
* (trim + uppercase) here and in {@link _getCollation}, so whitespace / case
|
|
1232
|
+
* variants resolve identically.
|
|
1233
|
+
*/
|
|
1234
|
+
isCollationRegistered(name) {
|
|
1235
|
+
return normalizeCollationName(name) === 'BINARY' || this._getCollation(name) !== undefined;
|
|
1146
1236
|
}
|
|
1147
1237
|
/**
|
|
1148
1238
|
* Registers a custom logical type.
|
|
@@ -1205,23 +1295,92 @@ export class Database {
|
|
|
1205
1295
|
getInstructionTracer() {
|
|
1206
1296
|
return this.instructionTracer;
|
|
1207
1297
|
}
|
|
1298
|
+
/**
|
|
1299
|
+
* The canonical way to turn a collation name into a comparison function for this
|
|
1300
|
+
* database. Every comparator-construction site should route through this rather
|
|
1301
|
+
* than the deprecated process-global registry in `util/comparison.ts`, so a
|
|
1302
|
+
* collation registered with {@link registerCollation} is actually honored.
|
|
1303
|
+
*
|
|
1304
|
+
* The returned resolver:
|
|
1305
|
+
* - has stable identity across calls (bound once) and reads the live per-database
|
|
1306
|
+
* registry, so a collation registered *after* the resolver was handed out is
|
|
1307
|
+
* visible to later calls;
|
|
1308
|
+
* - resolves names case-insensitively (and tolerates surrounding whitespace);
|
|
1309
|
+
* - **throws** `QuereusError` (`no such collation sequence: X`) on an unknown name.
|
|
1310
|
+
* An unresolvable collation is never downgraded to BINARY: byte-order results
|
|
1311
|
+
* would be silently wrong for ORDER BY, UNIQUE, and index seeks alike;
|
|
1312
|
+
* - fast-paths the exact name `BINARY`. `BINARY` cannot be overridden — this is
|
|
1313
|
+
* the fast path's correctness precondition, enforced by {@link registerCollation}
|
|
1314
|
+
* rejecting it. Any other built-in — including `NOCASE` and `RTRIM` — can be
|
|
1315
|
+
* overridden per database.
|
|
1316
|
+
*
|
|
1317
|
+
* It performs no `checkOpen()` check: it runs on hot comparator-construction paths,
|
|
1318
|
+
* and reading the registry of a closed database is harmless.
|
|
1319
|
+
*/
|
|
1320
|
+
getCollationResolver() {
|
|
1321
|
+
if (this.collationResolver === undefined) {
|
|
1322
|
+
this.collationResolver = (collationName) => {
|
|
1323
|
+
if (collationName === 'BINARY')
|
|
1324
|
+
return BINARY_COLLATION;
|
|
1325
|
+
const func = this._getCollation(collationName);
|
|
1326
|
+
if (!func) {
|
|
1327
|
+
throw new QuereusError(`no such collation sequence: ${collationName}`, StatusCode.ERROR);
|
|
1328
|
+
}
|
|
1329
|
+
return func;
|
|
1330
|
+
};
|
|
1331
|
+
}
|
|
1332
|
+
return this.collationResolver;
|
|
1333
|
+
}
|
|
1334
|
+
/**
|
|
1335
|
+
* The canonical way to turn a collation name into a **key normalizer** for this
|
|
1336
|
+
* database — the hash-keyed counterpart of {@link getCollationResolver}. Every
|
|
1337
|
+
* operator that buckets rows by a text key (GROUP BY, window PARTITION BY, bloom /
|
|
1338
|
+
* hash join keys, AS OF partitioning) must resolve through this, so that grouping
|
|
1339
|
+
* and comparison agree on which rows are equal.
|
|
1340
|
+
*
|
|
1341
|
+
* Same contract as {@link getCollationResolver}: stable identity, reads the live
|
|
1342
|
+
* registry, no `checkOpen()`, and **no silent fallback**.
|
|
1343
|
+
*
|
|
1344
|
+
* - `undefined` or the exact name `BINARY` → the identity normalizer. `BINARY`
|
|
1345
|
+
* cannot be overridden ({@link registerCollation} rejects it), which is this fast
|
|
1346
|
+
* path's correctness precondition.
|
|
1347
|
+
* - A registered collation carrying a normalizer → that normalizer.
|
|
1348
|
+
* - A registered collation with **no** normalizer → throws. A comparator-only
|
|
1349
|
+
* collation can order rows but cannot bucket them; guessing a normalizer would
|
|
1350
|
+
* split or merge groups the comparator disagrees with.
|
|
1351
|
+
* - An unregistered name → throws `no such collation sequence: X`.
|
|
1352
|
+
*/
|
|
1353
|
+
getKeyNormalizerResolver() {
|
|
1354
|
+
if (this.keyNormalizerResolver === undefined) {
|
|
1355
|
+
this.keyNormalizerResolver = (collationName) => {
|
|
1356
|
+
if (!collationName || collationName === 'BINARY')
|
|
1357
|
+
return BUILTIN_NORMALIZERS.BINARY;
|
|
1358
|
+
const normalizer = this._getCollationNormalizer(collationName);
|
|
1359
|
+
if (normalizer)
|
|
1360
|
+
return normalizer;
|
|
1361
|
+
if (!this._getCollation(collationName)) {
|
|
1362
|
+
throw new QuereusError(`no such collation sequence: ${collationName}`, StatusCode.ERROR);
|
|
1363
|
+
}
|
|
1364
|
+
throw new QuereusError(`collation ${collationName} has no key normalizer; grouping and hash-join keys require one — pass { normalizer } to registerCollation`, StatusCode.ERROR);
|
|
1365
|
+
};
|
|
1366
|
+
}
|
|
1367
|
+
return this.keyNormalizerResolver;
|
|
1368
|
+
}
|
|
1208
1369
|
/** @internal Gets a registered collation function */
|
|
1209
1370
|
_getCollation(name) {
|
|
1210
|
-
return this.collations.get(name
|
|
1371
|
+
return this.collations.get(normalizeCollationName(name))?.comparator;
|
|
1211
1372
|
}
|
|
1212
|
-
/** @internal Gets the registered key normalizer for a collation
|
|
1213
|
-
*
|
|
1214
|
-
*
|
|
1215
|
-
*
|
|
1373
|
+
/** @internal Gets the registered key normalizer for a collation. Returns `undefined`
|
|
1374
|
+
* both for an unregistered name and for a comparator-only collation — the two are
|
|
1375
|
+
* distinguished, and turned into errors, by {@link getKeyNormalizerResolver}.
|
|
1376
|
+
*
|
|
1377
|
+
* There is deliberately no built-in fallback: an embedder that re-registers `NOCASE`
|
|
1378
|
+
* with a custom comparator and no normalizer must get a loud error, not the built-in
|
|
1379
|
+
* lowercase normalizer, which would partition strings differently from their
|
|
1380
|
+
* comparator. The built-ins are seeded *with* their normalizers in
|
|
1381
|
+
* `registerDefaultCollations()`, so a fresh database loses nothing. */
|
|
1216
1382
|
_getCollationNormalizer(name) {
|
|
1217
|
-
|
|
1218
|
-
const entry = this.collations.get(upper);
|
|
1219
|
-
if (entry?.normalizer !== undefined)
|
|
1220
|
-
return entry.normalizer;
|
|
1221
|
-
// Built-in fallback: even an entry that lost its normalizer (shouldn't
|
|
1222
|
-
// happen for built-ins, but defends against external mutation) still
|
|
1223
|
-
// resolves to the canonical built-in normalizer.
|
|
1224
|
-
return BUILTIN_NORMALIZERS[upper];
|
|
1383
|
+
return this.collations.get(normalizeCollationName(name))?.normalizer;
|
|
1225
1384
|
}
|
|
1226
1385
|
/** @internal True iff the named collation is asserted REPLICABLE — bit-identical
|
|
1227
1386
|
* across peers/platforms/app-versions. Built-ins are stamped `replicable` at
|
|
@@ -1231,7 +1390,28 @@ export class Database {
|
|
|
1231
1390
|
* replicable-collation gate when the backing host declares
|
|
1232
1391
|
* `requiresReplicableDerivations`. */
|
|
1233
1392
|
_isCollationReplicable(name) {
|
|
1234
|
-
return this.collations.get(name
|
|
1393
|
+
return this.collations.get(normalizeCollationName(name))?.replicable === true;
|
|
1394
|
+
}
|
|
1395
|
+
/** @internal True iff the named collation is asserted ORDER-PRESERVING: for all strings
|
|
1396
|
+
* `x`, `y`, `sign(comparator(x, y))` equals
|
|
1397
|
+
* `sign(memcmp(utf8(normalizer(x)), utf8(normalizer(y))))`. Strictly stronger than the
|
|
1398
|
+
* equality-partition promise a bare normalizer makes — a normalizer may agree with the
|
|
1399
|
+
* comparator on equality while disagreeing on order.
|
|
1400
|
+
*
|
|
1401
|
+
* Built-ins are stamped `orderPreserving` at registration; a custom collation opts in
|
|
1402
|
+
* with `orderPreserving: true`. An unregistered name, or a comparator-only collation
|
|
1403
|
+
* (no normalizer, hence no key bytes at all), returns `false` defensively.
|
|
1404
|
+
*
|
|
1405
|
+
* Consumed by persistent stores, which physically order rows by normalized key bytes:
|
|
1406
|
+
* a byte-range seek, or an advertisement that byte order *is* collation order, is sound
|
|
1407
|
+
* only under this assertion. Without it the store full-scans and lets its
|
|
1408
|
+
* comparator-accurate residual filter decide — slower, never wrong. */
|
|
1409
|
+
_isCollationOrderPreserving(name) {
|
|
1410
|
+
const entry = this.collations.get(normalizeCollationName(name));
|
|
1411
|
+
// The assertion is *about* the normalizer, so it is vacuous without one; a
|
|
1412
|
+
// comparator-only collation cannot key a persisted structure anyway (the store
|
|
1413
|
+
// rejects it at DDL time), and answering `true` here would be a trap.
|
|
1414
|
+
return entry?.orderPreserving === true && entry.normalizer !== undefined;
|
|
1235
1415
|
}
|
|
1236
1416
|
_queueDeferredConstraintRow(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor) {
|
|
1237
1417
|
this.deferredConstraints.enqueue(baseTable, constraintName, row, descriptor, evaluator, connectionId, contextRow, contextDescriptor);
|
|
@@ -1661,6 +1841,18 @@ export class Database {
|
|
|
1661
1841
|
}
|
|
1662
1842
|
}
|
|
1663
1843
|
}
|
|
1844
|
+
/**
|
|
1845
|
+
* @internal Force-removes one connection by id.
|
|
1846
|
+
* Unlike unregisterConnection, this bypasses the implicit transaction deferral —
|
|
1847
|
+
* the caller has established that this specific connection is definitively stale.
|
|
1848
|
+
*/
|
|
1849
|
+
removeConnection(connectionId) {
|
|
1850
|
+
const connection = this.activeConnections.get(connectionId);
|
|
1851
|
+
if (connection) {
|
|
1852
|
+
this.activeConnections.delete(connectionId);
|
|
1853
|
+
log(`Removed stale connection ${connectionId} for table ${connection.tableName}`);
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1664
1856
|
/**
|
|
1665
1857
|
* @internal Gets all active connections for a specific table.
|
|
1666
1858
|
* @param tableName The name of the table
|
|
@@ -1735,6 +1927,31 @@ export class Database {
|
|
|
1735
1927
|
_isFkRestrictSuppressed() {
|
|
1736
1928
|
return this._fkRestrictSuppressed;
|
|
1737
1929
|
}
|
|
1930
|
+
/** @internal FK cascade re-entry flag — see {@link _setFkCascadeReentry}. */
|
|
1931
|
+
_fkCascadeReentry = false;
|
|
1932
|
+
/** @internal Marks that the DML currently re-entering the executor is one of
|
|
1933
|
+
* Quereus's own FK cascade child writes (cascade DELETE / UPDATE, SET NULL,
|
|
1934
|
+
* SET DEFAULT — physical or lens), not a direct user DML on the child table.
|
|
1935
|
+
* Set only for the duration of each cascade child write by
|
|
1936
|
+
* `withFkCascadeReentry` in `runtime/foreign-key-actions.ts`, so a host vtab
|
|
1937
|
+
* module can distinguish a cascade re-entry from a user write on the same
|
|
1938
|
+
* child and suppress redundant child-side FK re-validation only for the
|
|
1939
|
+
* former. Independent of {@link _setFkRestrictSuppressed} (a cascade path may
|
|
1940
|
+
* legitimately have both semantics in play). Returns the prior value so the
|
|
1941
|
+
* caller restores it in a `finally` — nesting-safe: an inner cascade restores
|
|
1942
|
+
* to the outer's `true`, the outermost to `false`, and a thrown cascade cannot
|
|
1943
|
+
* latch the flag on. Nothing inside Quereus reads it; it exposes the signal the
|
|
1944
|
+
* host consumes. */
|
|
1945
|
+
_setFkCascadeReentry(value) {
|
|
1946
|
+
const prior = this._fkCascadeReentry;
|
|
1947
|
+
this._fkCascadeReentry = value;
|
|
1948
|
+
return prior;
|
|
1949
|
+
}
|
|
1950
|
+
/** @internal Whether the current DML re-entry is a Quereus FK cascade child
|
|
1951
|
+
* write — see {@link _setFkCascadeReentry}. */
|
|
1952
|
+
_isFkCascadeReentry() {
|
|
1953
|
+
return this._fkCascadeReentry;
|
|
1954
|
+
}
|
|
1738
1955
|
/**
|
|
1739
1956
|
* Subscribe to changes described by a {@link ChangeScope}.
|
|
1740
1957
|
*
|
|
@@ -1823,7 +2040,7 @@ export class Database {
|
|
|
1823
2040
|
* are NOT unwound by Quereus). Serialized via the exec mutex — do NOT call
|
|
1824
2041
|
* from within statement execution or vtab callbacks (deadlock); the
|
|
1825
2042
|
* two-arg `_maintainRowTimeCoveringStructures` is the seam for that
|
|
1826
|
-
* context. See `docs/
|
|
2043
|
+
* context. See `docs/mv-ingestion.md` § External row-change
|
|
1827
2044
|
* ingestion for the full contract.
|
|
1828
2045
|
*
|
|
1829
2046
|
* Returns the collected commit-time global-assertion violations. With the
|
|
@@ -1877,7 +2094,7 @@ export class Database {
|
|
|
1877
2094
|
* statement execution or a vtab callback (deadlock; same constraint as
|
|
1878
2095
|
* `refresh materialized view` itself). Returns the refreshed MV identifiers
|
|
1879
2096
|
* (for coarse watch notification); `[]` (no mutex, no transaction) when there
|
|
1880
|
-
* are no maintained tables. See `docs/
|
|
2097
|
+
* are no maintained tables. See `docs/mv-ingestion.md` § Converging all
|
|
1881
2098
|
* materialized views.
|
|
1882
2099
|
*/
|
|
1883
2100
|
async refreshAllMaterializedViews() {
|
|
@@ -1934,30 +2151,33 @@ export class Database {
|
|
|
1934
2151
|
* OUTSIDE a statement uses the batch-amortized {@link ingestExternalRowChanges}
|
|
1935
2152
|
* seam instead).
|
|
1936
2153
|
*
|
|
1937
|
-
* `deferred` is the optional per-statement deferred-rebuild set
|
|
1938
|
-
* plan is marked dirty in it
|
|
1939
|
-
*
|
|
1940
|
-
*
|
|
1941
|
-
*
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
*
|
|
1950
|
-
*
|
|
1951
|
-
*
|
|
1952
|
-
|
|
1953
|
-
|
|
2154
|
+
* `deferred` is the optional per-statement deferred-rebuild set (a `'full-rebuild'`
|
|
2155
|
+
* plan is marked dirty in it, no per-row apply) and `residualBatch` the optional
|
|
2156
|
+
* per-statement residual key batch (the residual arms accumulate their deduped
|
|
2157
|
+
* affected binding keys into it, no per-row recompute); both drain once at the
|
|
2158
|
+
* end-of-statement {@link _flushDeferredMaintenance}. The DML generator owns them;
|
|
2159
|
+
* cold callers omit them (and only ever name inverse-projection MVs — the one
|
|
2160
|
+
* per-row-immediate arm — so the inline per-change fallback is at worst a safe,
|
|
2161
|
+
* unamortized apply). */
|
|
2162
|
+
async _maintainRowTimeCoveringStructures(sourceBase, change, cache, deferred, residualBatch) {
|
|
2163
|
+
await this.materializedViewManager.maintainRowTime(sourceBase, change, cache, deferred, residualBatch);
|
|
2164
|
+
}
|
|
2165
|
+
/** @internal Drain the per-statement deferred maintenance at the end-of-statement
|
|
2166
|
+
* boundary: recompute every accumulated residual key once per distinct key, rebuild
|
|
2167
|
+
* every dirtied full-rebuild covering MV exactly once, and cascade each delta onward
|
|
2168
|
+
* (MV-over-MV). The DML generator calls this after the row loop and before releasing
|
|
2169
|
+
* the statement-atomicity savepoint, so a failed recompute/rebuild rolls the whole
|
|
2170
|
+
* statement back. `cache` is the same per-statement {@link BackingConnectionCache}
|
|
2171
|
+
* the row loop used. See `database-materialized-views.ts` § flushDeferredMaintenance. */
|
|
2172
|
+
async _flushDeferredMaintenance(deferred, residualBatch, cache) {
|
|
2173
|
+
await this.materializedViewManager.flushDeferredMaintenance(deferred, residualBatch, cache);
|
|
1954
2174
|
}
|
|
1955
2175
|
/** @internal Resolve the linked, `row-time`, enforcement-ready covering MV for a
|
|
1956
2176
|
* UNIQUE constraint on `schema.table`, or `undefined`. Synchronous (a map lookup
|
|
1957
2177
|
* plus name/staleness checks) with an O(1) negative fast path, so the UNIQUE-check
|
|
1958
2178
|
* path can consult it without async overhead. When it returns an MV, conflict
|
|
1959
2179
|
* resolution routes through the covering MV's backing table (in preference to the
|
|
1960
|
-
* auto-index) — see `docs/
|
|
2180
|
+
* auto-index) — see `docs/mv-constraints.md` § Covering structures. */
|
|
1961
2181
|
_findRowTimeCoveringStructure(schemaName, tableName, uc) {
|
|
1962
2182
|
return this.materializedViewManager.findRowTimeCoveringStructure(schemaName, tableName, uc);
|
|
1963
2183
|
}
|