@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
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { canonicalJsonString } from './json-canonical.js';
|
|
1
2
|
/** Identity normalizer for BINARY collation (no-op). */
|
|
2
3
|
const IDENTITY_NORMALIZER = (s) => s;
|
|
3
4
|
/** Strip trailing ASCII space (0x20) only, matching `RTRIM_COLLATION`'s
|
|
@@ -10,26 +11,54 @@ const RTRIM_NORMALIZER = (s) => {
|
|
|
10
11
|
return end === s.length ? s : s.slice(0, end);
|
|
11
12
|
};
|
|
12
13
|
const NOCASE_NORMALIZER = (s) => s.toLowerCase();
|
|
13
|
-
/** Map a collation name to a string normalizer for key serialization. */
|
|
14
|
-
export function resolveKeyNormalizer(collationName) {
|
|
15
|
-
if (!collationName || collationName === 'BINARY')
|
|
16
|
-
return IDENTITY_NORMALIZER;
|
|
17
|
-
switch (collationName.toUpperCase()) {
|
|
18
|
-
case 'NOCASE': return NOCASE_NORMALIZER;
|
|
19
|
-
case 'RTRIM': return RTRIM_NORMALIZER;
|
|
20
|
-
default: return IDENTITY_NORMALIZER;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
14
|
/** Built-in normalizers, exported so the `Database` collation registry can seed
|
|
24
|
-
* them alongside the comparators
|
|
15
|
+
* them alongside the comparators, and so a caller with no `Database` in scope (the
|
|
16
|
+
* store's default key-normalizer resolver) can build a built-ins-only resolver over
|
|
17
|
+
* the same three functions rather than a divergent local copy. Keys match the SQL
|
|
18
|
+
* canonical names.
|
|
19
|
+
*
|
|
20
|
+
* Any caller that DOES hold a `Database` must resolve through
|
|
21
|
+
* `db.getKeyNormalizerResolver()` (or `EmissionContext.resolveKeyNormalizer()` from an
|
|
22
|
+
* emitter) — indexing this map directly cannot see a collation registered with
|
|
23
|
+
* `db.registerCollation`, so it buckets rows the database's own comparator considers
|
|
24
|
+
* equal into different groups. */
|
|
25
25
|
export const BUILTIN_NORMALIZERS = {
|
|
26
26
|
BINARY: IDENTITY_NORMALIZER,
|
|
27
27
|
NOCASE: NOCASE_NORMALIZER,
|
|
28
28
|
RTRIM: RTRIM_NORMALIZER,
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Normalize a numeric SQL value (number | bigint | boolean) to a decimal string
|
|
32
|
+
* so that values equal under {@link import('./comparison.js').compareSqlValues}
|
|
33
|
+
* (numeric storage class: `5n` == `5`, `true` == `1`) serialize identically.
|
|
34
|
+
*
|
|
35
|
+
* Integer-valued numbers route through `BigInt(n)` so `5`, `5.0`, and `5n` all
|
|
36
|
+
* yield `"5"` — and `BigInt` captures a float's exact mathematical value, so an
|
|
37
|
+
* imprecise integer float (e.g. `1e30`) matches whatever the mixed number/bigint
|
|
38
|
+
* comparator sees. Non-integer numbers keep their `String(n)` form.
|
|
39
|
+
*
|
|
40
|
+
* NOTE: NaN/±Infinity fall to `String(n)` ("NaN"/"Infinity"), so two NaN key
|
|
41
|
+
* alike but NaN never keys equal to a finite value — the numeric comparator
|
|
42
|
+
* treats NaN as equal to everything, a degenerate edge not worth splitting keys
|
|
43
|
+
* over. If NaN-valued numeric keys ever matter, revisit here.
|
|
44
|
+
*/
|
|
45
|
+
function canonicalNumeric(val) {
|
|
46
|
+
if (typeof val === 'boolean')
|
|
47
|
+
return val ? '1' : '0';
|
|
48
|
+
if (typeof val === 'bigint')
|
|
49
|
+
return val.toString();
|
|
50
|
+
if (Number.isInteger(val))
|
|
51
|
+
return BigInt(val).toString();
|
|
52
|
+
return String(val);
|
|
53
|
+
}
|
|
30
54
|
/**
|
|
31
55
|
* Core serialization of a single SQL value with type tag and optional collation normalizer.
|
|
32
56
|
* Appends to the key accumulator. Returns false if the value is NULL (caller decides semantics).
|
|
57
|
+
*
|
|
58
|
+
* The tag/normalization rules mirror `compareSqlValues`: numeric-class values
|
|
59
|
+
* (number/bigint/boolean) share the `n:` tag via {@link canonicalNumeric} so
|
|
60
|
+
* equal-but-differently-typed numerics key alike, and OBJECT-class values route
|
|
61
|
+
* through {@link canonicalJsonString} so reorder-equal JSON objects key alike.
|
|
33
62
|
*/
|
|
34
63
|
function appendValue(val, normalizer) {
|
|
35
64
|
if (val === null || val === undefined)
|
|
@@ -37,17 +66,14 @@ function appendValue(val, normalizer) {
|
|
|
37
66
|
if (typeof val === 'string') {
|
|
38
67
|
return 's:' + normalizer(val);
|
|
39
68
|
}
|
|
40
|
-
else if (typeof val === 'number') {
|
|
41
|
-
return 'n:' + val;
|
|
42
|
-
}
|
|
43
|
-
else if (typeof val === 'bigint') {
|
|
44
|
-
return 'b:' + val;
|
|
69
|
+
else if (typeof val === 'number' || typeof val === 'bigint' || typeof val === 'boolean') {
|
|
70
|
+
return 'n:' + canonicalNumeric(val);
|
|
45
71
|
}
|
|
46
72
|
else if (val instanceof Uint8Array) {
|
|
47
73
|
return 'x:' + Array.from(val).join(',');
|
|
48
74
|
}
|
|
49
75
|
else {
|
|
50
|
-
return 'o:' +
|
|
76
|
+
return 'o:' + canonicalJsonString(val);
|
|
51
77
|
}
|
|
52
78
|
}
|
|
53
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-serializer.js","sourceRoot":"","sources":["../../../src/util/key-serializer.ts"],"names":[],"mappings":"AASA,wDAAwD;AACxD,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;AAE7C;;mFAEmF;AACnF,MAAM,gBAAgB,GAAG,CAAC,CAAS,EAAU,EAAE;IAC9C,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,GAAG,EAAE,CAAC;IACxD,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjE
|
|
1
|
+
{"version":3,"file":"key-serializer.js","sourceRoot":"","sources":["../../../src/util/key-serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reversible, type-faithful codec for a tuple of `SqlValue`s, used to key the
|
|
3
|
+
* transaction change log by its primary-key (or captured-column) tuple.
|
|
4
|
+
*
|
|
5
|
+
* WHY NOT canonical JSON: the change log formerly keyed via
|
|
6
|
+
* `canonicalJsonString` (`JSON.stringify` under the hood), which throws
|
|
7
|
+
* "Do not know how to serialize a BigInt" the moment a PK value is a JS bigint
|
|
8
|
+
* (any integer beyond `Number.MAX_SAFE_INTEGER`). It is also not reversible for
|
|
9
|
+
* bigint/blob (a decoded number loses the low bits; a blob decodes as an object).
|
|
10
|
+
*
|
|
11
|
+
* WHY NOT `key-serializer.ts` (`serializeKey`): that encoder *unifies* numerics
|
|
12
|
+
* (`5`, `5.0`, `5n` all collapse to one key), is one-way (no decoder), and
|
|
13
|
+
* returns null on any NULL element. The change log needs a decoder
|
|
14
|
+
* (`decodeKeyTuple` feeds `getChangedKeyTuples`) and must stay type-distinct so
|
|
15
|
+
* its keys agree with `delta-executor`'s `tupleKey` (which keys bigint and
|
|
16
|
+
* number separately) when watch literals are intersected against changes.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: this codec intentionally keeps `5n` (bigint) and `5` (number) as
|
|
19
|
+
* DISTINCT keys — matching `delta-executor` `tupleKey`, and unlike
|
|
20
|
+
* `compareSqlValues` (which treats `5n == 5`). If a single logical row's PK were
|
|
21
|
+
* ever presented as differently-typed numerics across two ops in one
|
|
22
|
+
* transaction, its INSERT/DELETE would not coalesce. Not reachable today (a
|
|
23
|
+
* table's PK storage type is stable per row); if it ever becomes reachable,
|
|
24
|
+
* unify numerics in BOTH this codec and `delta-executor` `tupleKey` together.
|
|
25
|
+
*
|
|
26
|
+
* Encoding: a JSON array of type-tagged element strings (first char = tag), then
|
|
27
|
+
* `JSON.stringify`d. The tag makes the encoding collision-free across types and
|
|
28
|
+
* the whole string reversible. Scalar-tuple keys stay stable across a decode/
|
|
29
|
+
* encode round-trip; JSON-object components keep the canonical (recursively
|
|
30
|
+
* key-sorted) form so reorder-equal objects still coalesce to one entry.
|
|
31
|
+
*/
|
|
32
|
+
import type { SqlValue } from '../common/types.js';
|
|
33
|
+
/** Encode a tuple of `SqlValue`s to a stable, reversible string key. */
|
|
34
|
+
export declare function encodeKeyTuple(values: readonly SqlValue[]): string;
|
|
35
|
+
/** Decode a key produced by {@link encodeKeyTuple} back to its tuple. */
|
|
36
|
+
export declare function decodeKeyTuple(key: string): SqlValue[];
|
|
37
|
+
//# sourceMappingURL=key-tuple-codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-tuple-codec.d.ts","sourceRoot":"","sources":["../../../src/util/key-tuple-codec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuDnD,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAIlE;AAED,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAGtD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { canonicalJsonString } from './json-canonical.js';
|
|
2
|
+
import { QuereusError } from '../common/errors.js';
|
|
3
|
+
import { StatusCode } from '../common/types.js';
|
|
4
|
+
function toHex(bytes) {
|
|
5
|
+
let s = '';
|
|
6
|
+
for (let i = 0; i < bytes.length; i++)
|
|
7
|
+
s += bytes[i].toString(16).padStart(2, '0');
|
|
8
|
+
return s;
|
|
9
|
+
}
|
|
10
|
+
function fromHex(hex) {
|
|
11
|
+
const out = new Uint8Array(hex.length >> 1);
|
|
12
|
+
for (let i = 0; i < out.length; i++)
|
|
13
|
+
out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
14
|
+
return out;
|
|
15
|
+
}
|
|
16
|
+
/** Encode a single element to a tag-prefixed string. */
|
|
17
|
+
function encodeElement(value) {
|
|
18
|
+
if (value === null || value === undefined)
|
|
19
|
+
return '0';
|
|
20
|
+
switch (typeof value) {
|
|
21
|
+
case 'string': return 's' + value;
|
|
22
|
+
// NOTE: JSON.stringify(NaN|±Infinity) → "null" and -0 → "0", so those
|
|
23
|
+
// degenerate number PKs decode lossily (NaN→null, -0→0). Matches the prior
|
|
24
|
+
// canonical-JSON keying (no regression); a NaN/±Inf PK is nonsensical and
|
|
25
|
+
// unreachable via real DML. Fix here + in decodeElement together if it ever matters.
|
|
26
|
+
case 'number': return 'n' + JSON.stringify(value); // round-trips via JSON.parse
|
|
27
|
+
case 'bigint': return 'i' + value.toString(); // decode: BigInt(rest)
|
|
28
|
+
case 'boolean': return value ? 'b1' : 'b0';
|
|
29
|
+
default:
|
|
30
|
+
if (value instanceof Uint8Array)
|
|
31
|
+
return 'x' + toHex(value);
|
|
32
|
+
// JSON object/array — keep canonical (recursively key-sorted) form so
|
|
33
|
+
// reorder-equal objects coalesce.
|
|
34
|
+
return 'j' + canonicalJsonString(value);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Decode a single tag-prefixed element string back to its `SqlValue`. */
|
|
38
|
+
function decodeElement(part) {
|
|
39
|
+
const tag = part[0];
|
|
40
|
+
const rest = part.slice(1);
|
|
41
|
+
switch (tag) {
|
|
42
|
+
case '0': return null;
|
|
43
|
+
case 's': return rest;
|
|
44
|
+
case 'n': return JSON.parse(rest);
|
|
45
|
+
case 'i': return BigInt(rest);
|
|
46
|
+
case 'b': return rest === '1';
|
|
47
|
+
case 'x': return fromHex(rest);
|
|
48
|
+
case 'j': return JSON.parse(rest);
|
|
49
|
+
default:
|
|
50
|
+
throw new QuereusError(`key-tuple-codec: unknown element tag '${tag}'`, StatusCode.INTERNAL);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Encode a tuple of `SqlValue`s to a stable, reversible string key. */
|
|
54
|
+
export function encodeKeyTuple(values) {
|
|
55
|
+
const parts = new Array(values.length);
|
|
56
|
+
for (let i = 0; i < values.length; i++)
|
|
57
|
+
parts[i] = encodeElement(values[i]);
|
|
58
|
+
return JSON.stringify(parts);
|
|
59
|
+
}
|
|
60
|
+
/** Decode a key produced by {@link encodeKeyTuple} back to its tuple. */
|
|
61
|
+
export function decodeKeyTuple(key) {
|
|
62
|
+
const parts = JSON.parse(key);
|
|
63
|
+
return parts.map(decodeElement);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=key-tuple-codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-tuple-codec.js","sourceRoot":"","sources":["../../../src/util/key-tuple-codec.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,SAAS,KAAK,CAAC,KAAiB;IAC/B,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnF,OAAO,CAAC,CAAC;AACV,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC3B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,wDAAwD;AACxD,SAAS,aAAa,CAAC,KAAe;IACrC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACtD,QAAQ,OAAO,KAAK,EAAE,CAAC;QACtB,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC;QAClC,sEAAsE;QACtE,2EAA2E;QAC3E,0EAA0E;QAC1E,qFAAqF;QACrF,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAQ,6BAA6B;QACvF,KAAK,QAAQ,CAAC,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAa,uBAAuB;QACjF,KAAK,SAAS,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C;YACC,IAAI,KAAK,YAAY,UAAU;gBAAE,OAAO,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,sEAAsE;YACtE,kCAAkC;YAClC,OAAO,GAAG,GAAG,mBAAmB,CAAC,KAAkB,CAAC,CAAC;IACvD,CAAC;AACF,CAAC;AAED,0EAA0E;AAC1E,SAAS,aAAa,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3B,QAAQ,GAAG,EAAE,CAAC;QACb,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC;QACtB,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC;QACtB,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;QAC5C,KAAK,GAAG,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC;QAC9B,KAAK,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC;QAC9C;YACC,MAAM,IAAI,YAAY,CAAC,yCAAyC,GAAG,GAAG,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/F,CAAC;AACF,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,cAAc,CAAC,MAA2B;IACzD,MAAM,KAAK,GAAa,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC;IAC1C,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lightweight
|
|
2
|
+
* Lightweight mutex lock queue for serializing concurrent access by string key.
|
|
3
|
+
*
|
|
4
|
+
* Each `Latches` instance owns its own queue map, so two independent owners (e.g.
|
|
5
|
+
* two `Database` instances) never share a latch even when they pass the same key.
|
|
6
|
+
* The engine holds one instance per `Database` (`db.latches`); callers namespace
|
|
7
|
+
* their key with `schema.table` to keep intra-database collisions to genuinely
|
|
8
|
+
* same-named tables.
|
|
9
|
+
*
|
|
10
|
+
* A process-global default instance backs the {@link Latches.acquire} *static*
|
|
11
|
+
* method, preserving the original shared-queue entry point for standalone
|
|
12
|
+
* callers (e.g. external store modules) that hold no `Database`.
|
|
3
13
|
*/
|
|
4
14
|
export declare class Latches {
|
|
5
|
-
private
|
|
15
|
+
private readonly lockQueues;
|
|
6
16
|
/**
|
|
7
17
|
* Acquires a lock for the given key. Waits if another operation holds the lock.
|
|
8
18
|
* Returns a release function that must be called to release the lock.
|
|
9
19
|
*
|
|
10
20
|
* @param key A unique string identifier for the resource to lock.
|
|
11
21
|
* Should use `ClassName.methodName:${id}` format to avoid conflicts.
|
|
22
|
+
* @param timeoutMs Optional deadlock guard. When set and the predecessor does not
|
|
23
|
+
* release within this many milliseconds, the wait is abandoned: a warning
|
|
24
|
+
* is logged naming the contended key, this waiter's queue slot is released
|
|
25
|
+
* so the queue behind it does not wedge, and the returned promise rejects
|
|
26
|
+
* with a `QuereusError` (StatusCode.BUSY). Omit (the default) for the
|
|
27
|
+
* original never-reject behavior.
|
|
12
28
|
* @returns A function that must be called to release the lock
|
|
13
29
|
*/
|
|
14
|
-
|
|
30
|
+
acquire(key: string, timeoutMs?: number): Promise<() => void>;
|
|
31
|
+
/** Process-global default instance backing the static {@link Latches.acquire}. */
|
|
32
|
+
private static readonly global;
|
|
33
|
+
/**
|
|
34
|
+
* Backward-compatible static entry point delegating to a single process-global
|
|
35
|
+
* instance. Same shared-queue semantics this class had before it became
|
|
36
|
+
* instance-based — kept for standalone callers (external store modules) that
|
|
37
|
+
* hold no `Database`. Engine call sites should prefer the owned per-database
|
|
38
|
+
* instance (`db.latches`) so two databases never contend on the same key.
|
|
39
|
+
*/
|
|
40
|
+
static acquire(key: string, timeoutMs?: number): Promise<() => void>;
|
|
15
41
|
}
|
|
16
42
|
//# sourceMappingURL=latches.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latches.d.ts","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"latches.d.ts","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,qBAAa,OAAO;IAGnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAE/D;;;;;;;;;;;;;OAaG;IACG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAsDnE,kFAAkF;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAE/C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;CAGpE"}
|
package/dist/src/util/latches.js
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
|
+
import { createLogger } from '../common/logger.js';
|
|
2
|
+
import { QuereusError } from '../common/errors.js';
|
|
3
|
+
import { StatusCode } from '../common/types.js';
|
|
4
|
+
const log = createLogger('util:latches');
|
|
5
|
+
const warnLog = log.extend('warn');
|
|
1
6
|
/**
|
|
2
|
-
* Lightweight
|
|
7
|
+
* Lightweight mutex lock queue for serializing concurrent access by string key.
|
|
8
|
+
*
|
|
9
|
+
* Each `Latches` instance owns its own queue map, so two independent owners (e.g.
|
|
10
|
+
* two `Database` instances) never share a latch even when they pass the same key.
|
|
11
|
+
* The engine holds one instance per `Database` (`db.latches`); callers namespace
|
|
12
|
+
* their key with `schema.table` to keep intra-database collisions to genuinely
|
|
13
|
+
* same-named tables.
|
|
14
|
+
*
|
|
15
|
+
* A process-global default instance backs the {@link Latches.acquire} *static*
|
|
16
|
+
* method, preserving the original shared-queue entry point for standalone
|
|
17
|
+
* callers (e.g. external store modules) that hold no `Database`.
|
|
3
18
|
*/
|
|
4
19
|
export class Latches {
|
|
5
|
-
// Stores the promise representing the completion of the last queued operation
|
|
6
|
-
|
|
20
|
+
// Stores the promise representing the completion of the last queued operation
|
|
21
|
+
// for a key. Instance-scoped: one map per Latches instance.
|
|
22
|
+
lockQueues = new Map();
|
|
7
23
|
/**
|
|
8
24
|
* Acquires a lock for the given key. Waits if another operation holds the lock.
|
|
9
25
|
* Returns a release function that must be called to release the lock.
|
|
10
26
|
*
|
|
11
27
|
* @param key A unique string identifier for the resource to lock.
|
|
12
28
|
* Should use `ClassName.methodName:${id}` format to avoid conflicts.
|
|
29
|
+
* @param timeoutMs Optional deadlock guard. When set and the predecessor does not
|
|
30
|
+
* release within this many milliseconds, the wait is abandoned: a warning
|
|
31
|
+
* is logged naming the contended key, this waiter's queue slot is released
|
|
32
|
+
* so the queue behind it does not wedge, and the returned promise rejects
|
|
33
|
+
* with a `QuereusError` (StatusCode.BUSY). Omit (the default) for the
|
|
34
|
+
* original never-reject behavior.
|
|
13
35
|
* @returns A function that must be called to release the lock
|
|
14
36
|
*/
|
|
15
|
-
|
|
37
|
+
async acquire(key, timeoutMs) {
|
|
16
38
|
// Get the promise the current operation needs to wait for (if any)
|
|
17
39
|
const currentTail = this.lockQueues.get(key) ?? Promise.resolve();
|
|
18
40
|
let resolveNewTail;
|
|
@@ -22,8 +44,6 @@ export class Latches {
|
|
|
22
44
|
});
|
|
23
45
|
// Immediately set the new promise as the tail for this key
|
|
24
46
|
this.lockQueues.set(key, newTail);
|
|
25
|
-
// Wait for the previous operation (if any) to complete
|
|
26
|
-
await currentTail;
|
|
27
47
|
// Return the function to release *this* lock
|
|
28
48
|
const release = () => {
|
|
29
49
|
// Signal that this operation is complete
|
|
@@ -35,7 +55,41 @@ export class Latches {
|
|
|
35
55
|
this.lockQueues.delete(key);
|
|
36
56
|
}
|
|
37
57
|
};
|
|
58
|
+
if (timeoutMs === undefined) {
|
|
59
|
+
// Wait for the previous operation (if any) to complete
|
|
60
|
+
await currentTail;
|
|
61
|
+
return release;
|
|
62
|
+
}
|
|
63
|
+
// Opt-in deadlock guard: bound the wait for the predecessor.
|
|
64
|
+
let timer;
|
|
65
|
+
const timeout = new Promise((_resolve, reject) => {
|
|
66
|
+
timer = setTimeout(() => {
|
|
67
|
+
warnLog('latch acquire timed out after %dms for key %s (possible deadlock); releasing waiter slot', timeoutMs, key);
|
|
68
|
+
// Release our own slot so the queue behind us is not wedged by the abandoned wait.
|
|
69
|
+
release();
|
|
70
|
+
reject(new QuereusError(`Latch acquire timed out after ${timeoutMs}ms for '${key}' (possible deadlock)`, StatusCode.BUSY));
|
|
71
|
+
}, timeoutMs);
|
|
72
|
+
});
|
|
73
|
+
try {
|
|
74
|
+
await Promise.race([currentTail, timeout]);
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
if (timer !== undefined)
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
}
|
|
38
80
|
return release;
|
|
39
81
|
}
|
|
82
|
+
/** Process-global default instance backing the static {@link Latches.acquire}. */
|
|
83
|
+
static global = new Latches();
|
|
84
|
+
/**
|
|
85
|
+
* Backward-compatible static entry point delegating to a single process-global
|
|
86
|
+
* instance. Same shared-queue semantics this class had before it became
|
|
87
|
+
* instance-based — kept for standalone callers (external store modules) that
|
|
88
|
+
* hold no `Database`. Engine call sites should prefer the owned per-database
|
|
89
|
+
* instance (`db.latches`) so two databases never contend on the same key.
|
|
90
|
+
*/
|
|
91
|
+
static acquire(key, timeoutMs) {
|
|
92
|
+
return this.global.acquire(key, timeoutMs);
|
|
93
|
+
}
|
|
40
94
|
}
|
|
41
95
|
//# sourceMappingURL=latches.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"latches.js","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"latches.js","sourceRoot":"","sources":["../../../src/util/latches.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,GAAG,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC;AACzC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAEnC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,OAAO;IACnB,8EAA8E;IAC9E,4DAA4D;IAC3C,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE/D;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,SAAkB;QAC5C,mEAAmE;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QAElE,IAAI,cAA2B,CAAC;QAChC,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YAC3C,cAAc,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,2DAA2D;QAC3D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAElC,6CAA6C;QAC7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,yCAAyC;YACzC,cAAc,EAAE,CAAC;YAEjB,wDAAwD;YACxD,8EAA8E;YAC9E,2EAA2E;YAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC,CAAC;QAEF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7B,uDAAuD;YACvD,MAAM,WAAW,CAAC;YAClB,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,6DAA6D;QAC7D,IAAI,KAAgD,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;YACvD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvB,OAAO,CAAC,0FAA0F,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;gBACpH,mFAAmF;gBACnF,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,YAAY,CACtB,iCAAiC,SAAS,WAAW,GAAG,uBAAuB,EAC/E,UAAU,CAAC,IAAI,CACf,CAAC,CAAC;YACJ,CAAC,EAAE,SAAS,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC;YACJ,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACV,IAAI,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,kFAAkF;IAC1E,MAAM,CAAU,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;IAE/C;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,SAAkB;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC5C,CAAC"}
|
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
|
|
2
|
+
* A compiled pattern matcher: given some text, returns whether it matches the
|
|
3
|
+
* pattern the matcher was compiled from. Compilation (pattern → RegExp) happens
|
|
4
|
+
* once; the returned closure is cheap to call per row.
|
|
5
|
+
*/
|
|
6
|
+
export type PatternMatcher = (text: string) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Compile (memoized) a LIKE pattern into a reusable matcher. Prefer this over
|
|
9
|
+
* {@link simpleLike} when matching many texts against a pattern that is known
|
|
10
|
+
* once (e.g. a literal-constant pattern captured at emit time): compile once,
|
|
11
|
+
* call the returned matcher per row.
|
|
12
|
+
*/
|
|
13
|
+
export declare const compileLikeMatcher: (pattern: string) => PatternMatcher;
|
|
14
|
+
/**
|
|
15
|
+
* Compile (memoized) a GLOB pattern into a reusable matcher. See
|
|
16
|
+
* {@link compileLikeMatcher}.
|
|
17
|
+
*/
|
|
18
|
+
export declare const compileGlobMatcher: (pattern: string) => PatternMatcher;
|
|
19
|
+
/**
|
|
20
|
+
* Simple LIKE pattern matching. Compilation is memoized, so repeated calls with
|
|
21
|
+
* the same pattern reuse a single compiled matcher.
|
|
6
22
|
*
|
|
7
23
|
* @param pattern The LIKE pattern
|
|
8
24
|
* @param text The text to match against
|
|
@@ -10,10 +26,8 @@
|
|
|
10
26
|
*/
|
|
11
27
|
export declare function simpleLike(pattern: string, text: string): boolean;
|
|
12
28
|
/**
|
|
13
|
-
* Simple GLOB pattern matching
|
|
14
|
-
*
|
|
15
|
-
* - * matches any sequence of characters (including empty sequence)
|
|
16
|
-
* - ? matches any single character
|
|
29
|
+
* Simple GLOB pattern matching. Compilation is memoized, so repeated calls with
|
|
30
|
+
* the same pattern reuse a single compiled matcher.
|
|
17
31
|
*
|
|
18
32
|
* @param pattern The GLOB pattern
|
|
19
33
|
* @param text The text to match against
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAKA
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;AA2HvD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,YArGkD,MAAM,KAAK,cAqG/B,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YA3GkD,MAAM,KAAK,cA2G/B,CAAC;AAE9D;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE"}
|
|
@@ -1,17 +1,57 @@
|
|
|
1
1
|
import { createLogger } from '../common/logger.js';
|
|
2
2
|
const log = createLogger('util:patterns');
|
|
3
3
|
const errorLog = log.extend('error');
|
|
4
|
+
/** Matcher used when a pattern fails to compile — matches nothing (as before). */
|
|
5
|
+
const NEVER_MATCH = () => false;
|
|
4
6
|
/**
|
|
5
|
-
*
|
|
7
|
+
* Small bounded (LRU) cap for each compiled-pattern cache. A workload with many
|
|
8
|
+
* distinct patterns evicts the least-recently-used entry rather than growing
|
|
9
|
+
* the cache unboundedly.
|
|
10
|
+
*
|
|
11
|
+
* NOTE: 256 is an untuned guess. If a real workload thrashes distinct patterns
|
|
12
|
+
* (cache-miss rate stays high), raise the cap or make it configurable.
|
|
13
|
+
*/
|
|
14
|
+
const PATTERN_CACHE_CAP = 256;
|
|
15
|
+
/**
|
|
16
|
+
* Wrap a `compile` function with a bounded LRU cache so the same pattern string
|
|
17
|
+
* is compiled at most once (until evicted). A `Map` preserves insertion order,
|
|
18
|
+
* which gives a cheap LRU: on a hit re-insert the key to mark it most-recently
|
|
19
|
+
* used; on overflow evict the oldest (first) key.
|
|
20
|
+
*
|
|
21
|
+
* NOTE: the cache key is the pattern string alone. LIKE and GLOB each get their
|
|
22
|
+
* own cache (via separate `memoizeCompile` calls) so identical strings in the
|
|
23
|
+
* two different pattern languages never collide. If LIKE `ESCAPE` or
|
|
24
|
+
* case-insensitive matching is ever added, the escape char / case-fold flag
|
|
25
|
+
* MUST become part of the key (or key each variant into its own cache), else
|
|
26
|
+
* compiled matchers will collide across those variants.
|
|
27
|
+
*/
|
|
28
|
+
function memoizeCompile(compile) {
|
|
29
|
+
const cache = new Map();
|
|
30
|
+
return (pattern) => {
|
|
31
|
+
const cached = cache.get(pattern);
|
|
32
|
+
if (cached !== undefined) {
|
|
33
|
+
// Mark most-recently-used.
|
|
34
|
+
cache.delete(pattern);
|
|
35
|
+
cache.set(pattern, cached);
|
|
36
|
+
return cached;
|
|
37
|
+
}
|
|
38
|
+
const matcher = compile(pattern);
|
|
39
|
+
cache.set(pattern, matcher);
|
|
40
|
+
if (cache.size > PATTERN_CACHE_CAP) {
|
|
41
|
+
const oldest = cache.keys().next().value;
|
|
42
|
+
if (oldest !== undefined)
|
|
43
|
+
cache.delete(oldest);
|
|
44
|
+
}
|
|
45
|
+
return matcher;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Compile a SQL LIKE pattern into a matcher.
|
|
6
50
|
* Supports SQL LIKE patterns:
|
|
7
51
|
* - % matches any sequence of characters (including empty sequence)
|
|
8
52
|
* - _ matches any single character
|
|
9
|
-
*
|
|
10
|
-
* @param pattern The LIKE pattern
|
|
11
|
-
* @param text The text to match against
|
|
12
|
-
* @returns true if the text matches the pattern, false otherwise
|
|
13
53
|
*/
|
|
14
|
-
|
|
54
|
+
function compileLike(pattern) {
|
|
15
55
|
// Escape regex special characters except % and _
|
|
16
56
|
const escapedPattern = pattern.replace(/[.*+^${}()|[\]\\]/g, '\\$&');
|
|
17
57
|
// Convert SQL LIKE wildcards to regex equivalents
|
|
@@ -19,24 +59,20 @@ export function simpleLike(pattern, text) {
|
|
|
19
59
|
try {
|
|
20
60
|
// 'u' flag: match by Unicode code point so `_` matches one code point (incl. non-BMP)
|
|
21
61
|
const regex = new RegExp(`^${regexPattern}$`, 'u');
|
|
22
|
-
return regex.test(text);
|
|
62
|
+
return (text) => regex.test(text);
|
|
23
63
|
}
|
|
24
64
|
catch (e) {
|
|
25
65
|
errorLog('Invalid LIKE pattern converted to regex: ^%s$, %O', regexPattern, e);
|
|
26
|
-
return
|
|
66
|
+
return NEVER_MATCH;
|
|
27
67
|
}
|
|
28
68
|
}
|
|
29
69
|
/**
|
|
30
|
-
*
|
|
70
|
+
* Compile a SQL GLOB pattern into a matcher.
|
|
31
71
|
* Supports SQL GLOB patterns:
|
|
32
72
|
* - * matches any sequence of characters (including empty sequence)
|
|
33
73
|
* - ? matches any single character
|
|
34
|
-
*
|
|
35
|
-
* @param pattern The GLOB pattern
|
|
36
|
-
* @param text The text to match against
|
|
37
|
-
* @returns true if the text matches the pattern, false otherwise
|
|
38
74
|
*/
|
|
39
|
-
|
|
75
|
+
function compileGlob(pattern) {
|
|
40
76
|
const chars = [...pattern]; // iterate by Unicode code point so non-BMP chars survive intact
|
|
41
77
|
const regexMeta = '\\^$.|?*+()[]{}';
|
|
42
78
|
let regex = '';
|
|
@@ -92,11 +128,46 @@ export function simpleGlob(pattern, text) {
|
|
|
92
128
|
}
|
|
93
129
|
try {
|
|
94
130
|
// 'u' flag: code-point ranges like `[😀-😎]` and `?`/`.` matching by code point.
|
|
95
|
-
|
|
131
|
+
const compiled = new RegExp(`^${regex}$`, 'u');
|
|
132
|
+
return (text) => compiled.test(text);
|
|
96
133
|
}
|
|
97
134
|
catch (e) {
|
|
98
135
|
errorLog('Invalid GLOB pattern compiled to regex: ^%s$, %O', regex, e);
|
|
99
|
-
return
|
|
136
|
+
return NEVER_MATCH;
|
|
100
137
|
}
|
|
101
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Compile (memoized) a LIKE pattern into a reusable matcher. Prefer this over
|
|
141
|
+
* {@link simpleLike} when matching many texts against a pattern that is known
|
|
142
|
+
* once (e.g. a literal-constant pattern captured at emit time): compile once,
|
|
143
|
+
* call the returned matcher per row.
|
|
144
|
+
*/
|
|
145
|
+
export const compileLikeMatcher = memoizeCompile(compileLike);
|
|
146
|
+
/**
|
|
147
|
+
* Compile (memoized) a GLOB pattern into a reusable matcher. See
|
|
148
|
+
* {@link compileLikeMatcher}.
|
|
149
|
+
*/
|
|
150
|
+
export const compileGlobMatcher = memoizeCompile(compileGlob);
|
|
151
|
+
/**
|
|
152
|
+
* Simple LIKE pattern matching. Compilation is memoized, so repeated calls with
|
|
153
|
+
* the same pattern reuse a single compiled matcher.
|
|
154
|
+
*
|
|
155
|
+
* @param pattern The LIKE pattern
|
|
156
|
+
* @param text The text to match against
|
|
157
|
+
* @returns true if the text matches the pattern, false otherwise
|
|
158
|
+
*/
|
|
159
|
+
export function simpleLike(pattern, text) {
|
|
160
|
+
return compileLikeMatcher(pattern)(text);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Simple GLOB pattern matching. Compilation is memoized, so repeated calls with
|
|
164
|
+
* the same pattern reuse a single compiled matcher.
|
|
165
|
+
*
|
|
166
|
+
* @param pattern The GLOB pattern
|
|
167
|
+
* @param text The text to match against
|
|
168
|
+
* @returns true if the text matches the pattern, false otherwise
|
|
169
|
+
*/
|
|
170
|
+
export function simpleGlob(pattern, text) {
|
|
171
|
+
return compileGlobMatcher(pattern)(text);
|
|
172
|
+
}
|
|
102
173
|
//# sourceMappingURL=patterns.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/util/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AASrC,kFAAkF;AAClF,MAAM,WAAW,GAAmB,GAAG,EAAE,CAAC,KAAK,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B;;;;;;;;;;;;GAYG;AACH,SAAS,cAAc,CAAC,OAA4C;IACnE,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAChD,OAAO,CAAC,OAAe,EAAkB,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,2BAA2B;YAC3B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3B,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACzC,IAAI,MAAM,KAAK,SAAS;gBAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,OAAe;IACnC,iDAAiD;IACjD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IACrE,kDAAkD;IAClD,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAE3E,IAAI,CAAC;QACJ,sFAAsF;QACtF,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,IAAY,EAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,QAAQ,CAAC,mDAAmD,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAO,WAAW,CAAC;IACpB,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,gEAAgE;IAC5F,MAAM,SAAS,GAAG,iBAAiB,CAAC;IACpC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,IAAI,IAAI,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAAC,KAAK,IAAI,GAAG,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACf,mFAAmF;YACnF,uEAAuE;YACvE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,GAAG,GAAG,GAAG,CAAC;YACd,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,GAAG,IAAI,GAAG,CAAC;gBAAC,CAAC,EAAE,CAAC;YAAC,CAAC;YAC9D,IAAI,KAAK,GAAG,IAAI,CAAC;YACjB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBACnD,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,GAAG;oBAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC;;oBAC3C,GAAG,IAAI,EAAE,CAAC;gBACf,KAAK,GAAG,KAAK,CAAC;gBACd,CAAC,EAAE,CAAC;YACL,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBAAC,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;gBAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,SAAS;YAAC,CAAC;YACxD,0DAA0D;QAC3D,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;;YACxC,KAAK,IAAI,CAAC,CAAC;QAChB,CAAC,EAAE,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACJ,iFAAiF;QACjF,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAY,EAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,QAAQ,CAAC,kDAAkD,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,WAAW,CAAC;IACpB,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAY;IACvD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAY;IACvD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recover the (schema, table) pair from a flat lowercased base key
|
|
3
|
+
* `` `${schema}.${table}` ``. Splits on the FIRST dot only, so a quoted
|
|
4
|
+
* table name that legally contains a dot (e.g. `"a.b"` → key `main.a.b`)
|
|
5
|
+
* survives intact. NOTE: a dotted *schema* name is still ambiguous; dotted
|
|
6
|
+
* schema names are effectively unreachable in practice and intentionally
|
|
7
|
+
* unsupported — see bug-core-fq-name-split-mis-routes-dotted-table-names.
|
|
8
|
+
*/
|
|
9
|
+
export declare function splitBaseKey(base: string): [schema: string, table: string];
|
|
10
|
+
//# sourceMappingURL=qualified-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-name.d.ts","sourceRoot":"","sources":["../../../src/util/qualified-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAI1E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recover the (schema, table) pair from a flat lowercased base key
|
|
3
|
+
* `` `${schema}.${table}` ``. Splits on the FIRST dot only, so a quoted
|
|
4
|
+
* table name that legally contains a dot (e.g. `"a.b"` → key `main.a.b`)
|
|
5
|
+
* survives intact. NOTE: a dotted *schema* name is still ambiguous; dotted
|
|
6
|
+
* schema names are effectively unreachable in practice and intentionally
|
|
7
|
+
* unsupported — see bug-core-fq-name-split-mis-routes-dotted-table-names.
|
|
8
|
+
*/
|
|
9
|
+
export function splitBaseKey(base) {
|
|
10
|
+
const dot = base.indexOf('.');
|
|
11
|
+
if (dot < 0)
|
|
12
|
+
return ['', base]; // defensive: no schema segment
|
|
13
|
+
return [base.slice(0, dot), base.slice(dot + 1)];
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=qualified-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qualified-name.js","sourceRoot":"","sources":["../../../src/util/qualified-name.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;IAC/D,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC"}
|