@quereus/quereus 2.8.0 → 3.0.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 +224 -222
- package/dist/src/core/database-assertions.d.ts +36 -16
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +222 -118
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +96 -13
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +294 -35
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database-watchers.d.ts +58 -0
- package/dist/src/core/database-watchers.d.ts.map +1 -0
- package/dist/src/core/database-watchers.js +206 -0
- package/dist/src/core/database-watchers.js.map +1 -0
- package/dist/src/core/database.d.ts +78 -5
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +120 -20
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/statement.d.ts +9 -0
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +29 -0
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/core/table-handle.d.ts +45 -0
- package/dist/src/core/table-handle.d.ts.map +1 -0
- package/dist/src/core/table-handle.js +54 -0
- package/dist/src/core/table-handle.js.map +1 -0
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +0 -3
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/conversion.d.ts.map +1 -1
- package/dist/src/func/builtins/conversion.js +12 -1
- package/dist/src/func/builtins/conversion.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +22 -8
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/generation.d.ts.map +1 -1
- package/dist/src/func/builtins/generation.js +26 -1
- package/dist/src/func/builtins/generation.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +5 -1
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +16 -2
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts +4 -0
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +270 -11
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/registration.d.ts +19 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +8 -3
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +7 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +3 -2
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +25 -8
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts +71 -0
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -0
- package/dist/src/planner/analysis/assertion-classifier.js +286 -0
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts +34 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js +119 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts +58 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.js +110 -0
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -0
- package/dist/src/planner/analysis/change-scope.d.ts +184 -0
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -0
- package/dist/src/planner/analysis/change-scope.js +825 -0
- package/dist/src/planner/analysis/change-scope.js.map +1 -0
- package/dist/src/planner/analysis/check-extraction.d.ts +29 -0
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -0
- package/dist/src/planner/analysis/check-extraction.js +420 -0
- package/dist/src/planner/analysis/check-extraction.js.map +1 -0
- package/dist/src/planner/analysis/constraint-extractor.d.ts +47 -7
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +169 -92
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts +68 -0
- package/dist/src/planner/analysis/partial-unique-extraction.d.ts.map +1 -0
- package/dist/src/planner/analysis/partial-unique-extraction.js +347 -0
- package/dist/src/planner/analysis/partial-unique-extraction.js.map +1 -0
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts +14 -0
- package/dist/src/planner/analysis/predicate-conjuncts.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-conjuncts.js +31 -0
- package/dist/src/planner/analysis/predicate-conjuncts.js.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts +52 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.js +119 -0
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -0
- package/dist/src/planner/analysis/sat-checker.d.ts +43 -0
- package/dist/src/planner/analysis/sat-checker.d.ts.map +1 -0
- package/dist/src/planner/analysis/sat-checker.js +393 -0
- package/dist/src/planner/analysis/sat-checker.js.map +1 -0
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +3 -2
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/select.js +14 -2
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/table.d.ts.map +1 -1
- package/dist/src/planner/building/table.js +1 -1
- package/dist/src/planner/building/table.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +10 -6
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +13 -2
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js +31 -5
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +46 -16
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts +21 -9
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +47 -31
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +25 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +75 -8
- 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 +8 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts +137 -0
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/asof-scan-node.js +237 -0
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -0
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +19 -9
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +3 -0
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +17 -6
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/empty-relation-node.d.ts +27 -0
- package/dist/src/planner/nodes/empty-relation-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/empty-relation-node.js +61 -0
- package/dist/src/planner/nodes/empty-relation-node.js.map +1 -0
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +67 -5
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/function.d.ts +11 -1
- package/dist/src/planner/nodes/function.d.ts.map +1 -1
- package/dist/src/planner/nodes/function.js +94 -1
- package/dist/src/planner/nodes/function.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +10 -6
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +21 -10
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +42 -1
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +132 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +8 -1
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +22 -9
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts +50 -0
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js +130 -0
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts +3 -0
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +3 -0
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +316 -5
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +49 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +78 -28
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts +27 -2
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +117 -1
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts +9 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +21 -0
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +64 -28
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts +8 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +112 -1
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts +2 -1
- package/dist/src/planner/nodes/set-operation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/set-operation-node.js +24 -0
- package/dist/src/planner/nodes/set-operation-node.js.map +1 -1
- package/dist/src/planner/nodes/single-row.d.ts.map +1 -1
- package/dist/src/planner/nodes/single-row.js +3 -1
- package/dist/src/planner/nodes/single-row.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +28 -1
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +10 -8
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +40 -5
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +113 -18
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/table-function-call.d.ts +4 -1
- package/dist/src/planner/nodes/table-function-call.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-function-call.js +224 -14
- package/dist/src/planner/nodes/table-function-call.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +1 -3
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +3 -9
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +61 -2
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +71 -3
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +38 -1
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js +6 -0
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +278 -0
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts +30 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js +112 -0
- package/dist/src/planner/rules/access/rule-asof-strategy-select.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts +33 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js +162 -0
- package/dist/src/planner/rules/access/rule-monotonic-limit-pushdown.js.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts +29 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +175 -0
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -0
- 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 +53 -17
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +30 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +116 -0
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -0
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts +7 -7
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js +18 -16
- package/dist/src/planner/rules/distinct/rule-distinct-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +61 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js +155 -0
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +56 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-join-elimination.js +326 -0
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +10 -2
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +2 -122
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts +21 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js +405 -0
- package/dist/src/planner/rules/join/rule-lateral-top1-asof.js.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +31 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +113 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +20 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +181 -0
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts +46 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js +156 -0
- package/dist/src/planner/rules/predicate/rule-empty-relation-folding.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts +30 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js +60 -0
- package/dist/src/planner/rules/predicate/rule-filter-contradiction.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +45 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +210 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts +29 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +161 -0
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts +39 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.d.ts.map +1 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js +91 -0
- package/dist/src/planner/rules/sort/rule-orderby-fd-pruning.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts +35 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +74 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +27 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +103 -0
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +1 -25
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +47 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js +341 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -0
- package/dist/src/planner/scopes/global.js +2 -2
- package/dist/src/planner/scopes/global.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +11 -0
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +245 -0
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -0
- package/dist/src/planner/util/fd-utils.js +1416 -0
- package/dist/src/planner/util/fd-utils.js.map +1 -0
- package/dist/src/planner/util/ind-utils.d.ts +79 -0
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -0
- package/dist/src/planner/util/ind-utils.js +146 -0
- package/dist/src/planner/util/ind-utils.js.map +1 -0
- package/dist/src/planner/util/key-utils.d.ts +75 -14
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +234 -57
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/runtime/context-helpers.d.ts +9 -0
- package/dist/src/runtime/context-helpers.d.ts.map +1 -1
- package/dist/src/runtime/context-helpers.js +5 -0
- package/dist/src/runtime/context-helpers.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts +134 -0
- package/dist/src/runtime/delta-executor.d.ts.map +1 -0
- package/dist/src/runtime/delta-executor.js +382 -0
- package/dist/src/runtime/delta-executor.js.map +1 -0
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +52 -16
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/asof-scan.d.ts +10 -0
- package/dist/src/runtime/emit/asof-scan.d.ts.map +1 -0
- package/dist/src/runtime/emit/asof-scan.js +467 -0
- package/dist/src/runtime/emit/asof-scan.js.map +1 -0
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +20 -0
- 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 +3 -2
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +40 -13
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +1 -1
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/empty-relation.d.ts +5 -0
- package/dist/src/runtime/emit/empty-relation.d.ts.map +1 -0
- package/dist/src/runtime/emit/empty-relation.js +11 -0
- package/dist/src/runtime/emit/empty-relation.js.map +1 -0
- package/dist/src/runtime/emit/ordinal-slice.d.ts +13 -0
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -0
- package/dist/src/runtime/emit/ordinal-slice.js +89 -0
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -0
- package/dist/src/runtime/emit/returning.d.ts.map +1 -1
- package/dist/src/runtime/emit/returning.js +9 -4
- package/dist/src/runtime/emit/returning.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts +19 -3
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js +12 -8
- 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 +91 -14
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/window.d.ts.map +1 -1
- package/dist/src/runtime/emit/window.js +732 -37
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts +16 -0
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +86 -5
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/runtime/register.d.ts.map +1 -1
- package/dist/src/runtime/register.js +6 -0
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +8 -0
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/catalog.d.ts +10 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +29 -6
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/change-events.d.ts +5 -1
- package/dist/src/schema/change-events.d.ts.map +1 -1
- package/dist/src/schema/change-events.js.map +1 -1
- package/dist/src/schema/function.d.ts +89 -1
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +31 -0
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +43 -0
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +105 -4
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +303 -102
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +18 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +307 -42
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +21 -2
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +17 -8
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +11 -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/types/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +32 -0
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/ast-literal.d.ts +11 -0
- package/dist/src/util/ast-literal.d.ts.map +1 -0
- package/dist/src/util/ast-literal.js +26 -0
- package/dist/src/util/ast-literal.js.map +1 -0
- package/dist/src/vtab/best-access-plan.d.ts +41 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +29 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/events.d.ts +9 -0
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js +19 -0
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/filter-info.d.ts +14 -0
- package/dist/src/vtab/filter-info.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +24 -5
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +39 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +206 -44
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +2 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.js +32 -1
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -1
- package/dist/src/vtab/module.d.ts +24 -0
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TableSchema } from './table.js';
|
|
2
2
|
import type { FunctionSchema } from './function.js';
|
|
3
|
+
import type { IntegrityAssertionSchema } from './assertion.js';
|
|
3
4
|
interface SchemaObjectAdded<Type extends string, T> {
|
|
4
5
|
type: Type;
|
|
5
6
|
schemaName: string;
|
|
@@ -25,6 +26,9 @@ export type TableModifiedEvent = SchemaObjectModified<'table_modified', TableSch
|
|
|
25
26
|
export type FunctionAddedEvent = SchemaObjectAdded<'function_added', FunctionSchema>;
|
|
26
27
|
export type FunctionRemovedEvent = SchemaObjectRemoved<'function_removed', FunctionSchema>;
|
|
27
28
|
export type FunctionModifiedEvent = SchemaObjectModified<'function_modified', FunctionSchema>;
|
|
29
|
+
export type AssertionAddedEvent = SchemaObjectAdded<'assertion_added', IntegrityAssertionSchema>;
|
|
30
|
+
export type AssertionRemovedEvent = SchemaObjectRemoved<'assertion_removed', IntegrityAssertionSchema>;
|
|
31
|
+
export type AssertionModifiedEvent = SchemaObjectModified<'assertion_modified', IntegrityAssertionSchema>;
|
|
28
32
|
interface SchemaNameEvent<Type extends string> {
|
|
29
33
|
type: Type;
|
|
30
34
|
schemaName: string;
|
|
@@ -34,7 +38,7 @@ export type ModuleAddedEvent = SchemaNameEvent<'module_added'>;
|
|
|
34
38
|
export type ModuleRemovedEvent = SchemaNameEvent<'module_removed'>;
|
|
35
39
|
export type CollationAddedEvent = SchemaNameEvent<'collation_added'>;
|
|
36
40
|
export type CollationRemovedEvent = SchemaNameEvent<'collation_removed'>;
|
|
37
|
-
export type SchemaChangeEvent = TableAddedEvent | TableRemovedEvent | TableModifiedEvent | FunctionAddedEvent | FunctionRemovedEvent | FunctionModifiedEvent | ModuleAddedEvent | ModuleRemovedEvent | CollationAddedEvent | CollationRemovedEvent;
|
|
41
|
+
export type SchemaChangeEvent = TableAddedEvent | TableRemovedEvent | TableModifiedEvent | FunctionAddedEvent | FunctionRemovedEvent | FunctionModifiedEvent | AssertionAddedEvent | AssertionRemovedEvent | AssertionModifiedEvent | ModuleAddedEvent | ModuleRemovedEvent | CollationAddedEvent | CollationRemovedEvent;
|
|
38
42
|
/**
|
|
39
43
|
* Function that handles schema change events.
|
|
40
44
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-events.d.ts","sourceRoot":"","sources":["../../../src/schema/change-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"change-events.d.ts","sourceRoot":"","sources":["../../../src/schema/change-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-events.js","sourceRoot":"","sources":["../../../src/schema/change-events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"change-events.js","sourceRoot":"","sources":["../../../src/schema/change-events.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,MAAM,GAAG,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;AA+EjD;;GAEG;AACH,MAAM,OAAO,oBAAoB;IACxB,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEpD;;;OAGG;IACH,WAAW,CAAC,QAA8B;QACzC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,GAAG,CAAC,mDAAmD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAA8B;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,qDAAqD,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjF,CAAC;IACF,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAwB;QACpC,GAAG,CAAC,gDAAgD,EACnD,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAEpD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;YACnD,CAAC;QACF,CAAC;IACF,CAAC;IAED;;OAEG;IACH,gBAAgB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;CACD"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { MaybePromise, Row, SqlValue, DeepReadonly } from '../common/types.js';
|
|
2
2
|
import { FunctionFlags } from '../common/constants.js';
|
|
3
3
|
import type { Database } from '../core/database.js';
|
|
4
|
-
import type { BaseType, ScalarType, RelationType } from '../common/datatype.js';
|
|
4
|
+
import type { BaseType, ScalarType, RelationType, ColRef } from '../common/datatype.js';
|
|
5
5
|
import type { AggValue } from '../func/registration.js';
|
|
6
6
|
import type { LogicalType } from '../types/logical-type.js';
|
|
7
7
|
import type { ScalarFunctionCallNode } from '../planner/nodes/function.js';
|
|
8
8
|
import type { EmissionContext } from '../runtime/emission-context.js';
|
|
9
9
|
import type { Instruction } from '../runtime/types.js';
|
|
10
|
+
import type { ScalarPlanNode, ConstantBinding, FunctionalDependency, MonotonicOnInfo, PhysicalProperties } from '../planner/nodes/plan-node.js';
|
|
10
11
|
/**
|
|
11
12
|
* Type for a scalar function implementation.
|
|
12
13
|
*/
|
|
@@ -55,6 +56,30 @@ interface BaseFunctionSchema {
|
|
|
55
56
|
* emission context, and a reference to the default emitter.
|
|
56
57
|
*/
|
|
57
58
|
customEmitter?: CustomEmitterHook;
|
|
59
|
+
/**
|
|
60
|
+
* Argument indices on which this function is injective when all other
|
|
61
|
+
* arguments are held constant. Combines with operand-level recursion in
|
|
62
|
+
* `ScalarFunctionCallNode.isInjectiveIn`.
|
|
63
|
+
*/
|
|
64
|
+
injectiveOnArgs?: readonly number[];
|
|
65
|
+
/**
|
|
66
|
+
* Per-argument monotonicity when all other arguments are held constant.
|
|
67
|
+
* Keys are zero-based argument indices.
|
|
68
|
+
*/
|
|
69
|
+
monotoneOnArgs?: {
|
|
70
|
+
readonly [argIndex: number]: 'increasing' | 'decreasing';
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Per-argument range-rewrite kind for monotone-but-lossy functions.
|
|
74
|
+
* The actual boundary computation lives on the argument's logical type
|
|
75
|
+
* (`LogicalType.bucketBounds(kind, value)`), so the function schema only
|
|
76
|
+
* names the bucketing kind here.
|
|
77
|
+
*/
|
|
78
|
+
rangeRewriteOnArg?: {
|
|
79
|
+
readonly [argIndex: number]: {
|
|
80
|
+
readonly kind: string;
|
|
81
|
+
};
|
|
82
|
+
};
|
|
58
83
|
}
|
|
59
84
|
/**
|
|
60
85
|
* Schema for scalar functions that return a single value.
|
|
@@ -79,6 +104,67 @@ export interface ScalarFunctionSchema extends BaseFunctionSchema {
|
|
|
79
104
|
*/
|
|
80
105
|
validateArgTypes?: (argTypes: ReadonlyArray<DeepReadonly<LogicalType>>) => boolean;
|
|
81
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Function form for parameter-dependent advertisements. Receives the call
|
|
109
|
+
* operands so the implementation can read literal values, parameter slots, or
|
|
110
|
+
* operand types. Return `undefined` to decline (no property advertised).
|
|
111
|
+
*/
|
|
112
|
+
export type TVFAdvertiseFn<T> = (operands: ReadonlyArray<ScalarPlanNode>, schema: TableValuedFunctionSchema) => T | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* Column-keyed monotonicity declaration. The TVF schema author talks in column
|
|
115
|
+
* indices; `TableFunctionCallNode` translates these to live attribute IDs when
|
|
116
|
+
* it builds physical properties.
|
|
117
|
+
*/
|
|
118
|
+
export interface MonotonicOnColumnInfo {
|
|
119
|
+
readonly column: number;
|
|
120
|
+
readonly direction: 'asc' | 'desc';
|
|
121
|
+
readonly strict?: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Optional advertisement of a TVF's relational and physical properties.
|
|
125
|
+
* Each field may be a static value or a function of the call's operands.
|
|
126
|
+
* Bad advertisements (invalid indices, wrong shape) are dropped at use time
|
|
127
|
+
* with a single warning rather than throwing.
|
|
128
|
+
*/
|
|
129
|
+
export interface TVFAdvertisement {
|
|
130
|
+
isSet?: boolean | TVFAdvertiseFn<boolean>;
|
|
131
|
+
keys?: ReadonlyArray<ReadonlyArray<ColRef>> | TVFAdvertiseFn<ReadonlyArray<ReadonlyArray<ColRef>>>;
|
|
132
|
+
fds?: ReadonlyArray<FunctionalDependency> | TVFAdvertiseFn<ReadonlyArray<FunctionalDependency>>;
|
|
133
|
+
equivClasses?: ReadonlyArray<ReadonlyArray<number>> | TVFAdvertiseFn<ReadonlyArray<ReadonlyArray<number>>>;
|
|
134
|
+
ordering?: ReadonlyArray<{
|
|
135
|
+
column: number;
|
|
136
|
+
desc: boolean;
|
|
137
|
+
}> | TVFAdvertiseFn<ReadonlyArray<{
|
|
138
|
+
column: number;
|
|
139
|
+
desc: boolean;
|
|
140
|
+
}>>;
|
|
141
|
+
monotonicOn?: ReadonlyArray<MonotonicOnInfo> | TVFAdvertiseFn<ReadonlyArray<MonotonicOnInfo>>;
|
|
142
|
+
/**
|
|
143
|
+
* Column-keyed monotonicOn declarations. Preferred over `monotonicOn` for
|
|
144
|
+
* schema-time annotations because attribute IDs are per-call and only the
|
|
145
|
+
* node knows them.
|
|
146
|
+
*/
|
|
147
|
+
monotonicOnColumns?: ReadonlyArray<MonotonicOnColumnInfo> | TVFAdvertiseFn<ReadonlyArray<MonotonicOnColumnInfo>>;
|
|
148
|
+
constantBindings?: ReadonlyArray<ConstantBinding> | TVFAdvertiseFn<ReadonlyArray<ConstantBinding>>;
|
|
149
|
+
estimatedRows?: number | TVFAdvertiseFn<number>;
|
|
150
|
+
accessCapabilities?: PhysicalProperties['accessCapabilities'];
|
|
151
|
+
deterministic?: boolean;
|
|
152
|
+
readonly?: boolean;
|
|
153
|
+
idempotent?: boolean;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Resolves a possibly-functional advertisement spec to a concrete value.
|
|
157
|
+
* Returns `undefined` when the spec is absent or when the closure throws —
|
|
158
|
+
* a broken closure must never break planning.
|
|
159
|
+
*/
|
|
160
|
+
export declare function resolveAdvertisement<T>(spec: T | TVFAdvertiseFn<T> | undefined, operands: ReadonlyArray<ScalarPlanNode>, schema: TableValuedFunctionSchema): T | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* Returns the literal value of a scalar operand, or `undefined` when the
|
|
163
|
+
* operand is not a literal. Used by advertisement closures that want to read
|
|
164
|
+
* compile-time operand values (e.g. `generate_series(1, 100)` advertising
|
|
165
|
+
* `estimatedRows: 100`).
|
|
166
|
+
*/
|
|
167
|
+
export declare function evaluateLiteralOperand(operand: ScalarPlanNode): SqlValue | undefined;
|
|
82
168
|
/**
|
|
83
169
|
* Schema for table-valued functions that return rows.
|
|
84
170
|
*/
|
|
@@ -88,6 +174,8 @@ export interface TableValuedFunctionSchema extends BaseFunctionSchema {
|
|
|
88
174
|
implementation: TableValuedFunc | IntegratedTableValuedFunc;
|
|
89
175
|
/** Whether this TVF requires database access as first parameter */
|
|
90
176
|
isIntegrated?: boolean;
|
|
177
|
+
/** Optional advertisement of relational / physical properties. */
|
|
178
|
+
relationalAdvertisement?: TVFAdvertisement;
|
|
91
179
|
}
|
|
92
180
|
/**
|
|
93
181
|
* Schema for aggregate functions.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a possibly-functional advertisement spec to a concrete value.
|
|
3
|
+
* Returns `undefined` when the spec is absent or when the closure throws —
|
|
4
|
+
* a broken closure must never break planning.
|
|
5
|
+
*/
|
|
6
|
+
export function resolveAdvertisement(spec, operands, schema) {
|
|
7
|
+
if (spec === undefined)
|
|
8
|
+
return undefined;
|
|
9
|
+
if (typeof spec === 'function') {
|
|
10
|
+
try {
|
|
11
|
+
return spec(operands, schema);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return spec;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns the literal value of a scalar operand, or `undefined` when the
|
|
21
|
+
* operand is not a literal. Used by advertisement closures that want to read
|
|
22
|
+
* compile-time operand values (e.g. `generate_series(1, 100)` advertising
|
|
23
|
+
* `estimatedRows: 100`).
|
|
24
|
+
*/
|
|
25
|
+
export function evaluateLiteralOperand(operand) {
|
|
26
|
+
const candidate = operand;
|
|
27
|
+
if (candidate.expression && candidate.expression.type === 'literal') {
|
|
28
|
+
return candidate.expression.value;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
1
32
|
/**
|
|
2
33
|
* Type guards for function schema types.
|
|
3
34
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"AA6KA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CACnC,IAAuC,EACvC,QAAuC,EACvC,MAAiC;IAEjC,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC;YACJ,OAAQ,IAA0B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,SAAS,CAAC;QAClB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC7D,MAAM,SAAS,GAAG,OAAyF,CAAC;IAC5G,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACrE,OAAO,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC;IACnC,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAgDD;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC5D,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,gBAAgB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,CAAC;AAC9H,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IACjE,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC/D,OAAO,cAAc,IAAI,MAAM,IAAI,kBAAkB,IAAI,MAAM,CAAC;AACjE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC3D,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -30,6 +30,15 @@ export declare class SchemaManager {
|
|
|
30
30
|
private defaultVTabModuleArgs;
|
|
31
31
|
private db;
|
|
32
32
|
private changeNotifier;
|
|
33
|
+
/**
|
|
34
|
+
* Re-entrancy guard: when truthy, optimizer-side assertion hoisting is
|
|
35
|
+
* suppressed. Set by `AssertionEvaluator` while compiling an assertion's
|
|
36
|
+
* own violation query — without this guard, the hoist would make the
|
|
37
|
+
* violation query plan to empty (the optimizer would trust the assertion
|
|
38
|
+
* to prove its own non-violation), defeating commit-time enforcement.
|
|
39
|
+
* See `assertion-hoist-cache.ts` and `core/database-assertions.ts`.
|
|
40
|
+
*/
|
|
41
|
+
private assertionHoistSuppressed;
|
|
33
42
|
/**
|
|
34
43
|
* Creates a new schema manager
|
|
35
44
|
*
|
|
@@ -66,6 +75,16 @@ export declare class SchemaManager {
|
|
|
66
75
|
module: AnyVirtualTableModule;
|
|
67
76
|
auxData?: unknown;
|
|
68
77
|
} | undefined;
|
|
78
|
+
/**
|
|
79
|
+
* Iterates registered virtual table modules in registration order.
|
|
80
|
+
* Each entry yields the registered (lowercased) name, the module, and
|
|
81
|
+
* any auxData supplied at registration time.
|
|
82
|
+
*/
|
|
83
|
+
allModules(): IterableIterator<{
|
|
84
|
+
name: string;
|
|
85
|
+
module: AnyVirtualTableModule;
|
|
86
|
+
auxData?: unknown;
|
|
87
|
+
}>;
|
|
69
88
|
/**
|
|
70
89
|
* Sets the default virtual table module to use when USING is omitted
|
|
71
90
|
*
|
|
@@ -115,10 +134,34 @@ export declare class SchemaManager {
|
|
|
115
134
|
* Returns all assertions across all schemas
|
|
116
135
|
*/
|
|
117
136
|
getAllAssertions(): IntegrityAssertionSchema[];
|
|
137
|
+
/**
|
|
138
|
+
* Adds (or replaces) an assertion in the named schema, firing
|
|
139
|
+
* `assertion_added` or `assertion_modified` events as appropriate.
|
|
140
|
+
* The Schema object itself does not hold a notifier; this wrapper exists
|
|
141
|
+
* so optimizer caches (e.g. assertion-hoist) can invalidate on change.
|
|
142
|
+
*/
|
|
143
|
+
addAssertion(schemaName: string, assertion: IntegrityAssertionSchema): void;
|
|
144
|
+
/**
|
|
145
|
+
* Removes an assertion from the named schema, firing `assertion_removed`
|
|
146
|
+
* on success. Returns true iff the assertion existed and was removed.
|
|
147
|
+
*/
|
|
148
|
+
removeAssertion(schemaName: string, name: string): boolean;
|
|
118
149
|
/**
|
|
119
150
|
* Gets the schema change notifier for listening to schema changes
|
|
120
151
|
*/
|
|
121
152
|
getChangeNotifier(): SchemaChangeNotifier;
|
|
153
|
+
/**
|
|
154
|
+
* True when assertion-hoisting must be suppressed (the caller is currently
|
|
155
|
+
* planning an assertion's own violation query). Read by
|
|
156
|
+
* `getAssertionHoistedConstraints`.
|
|
157
|
+
*/
|
|
158
|
+
isAssertionHoistSuppressed(): boolean;
|
|
159
|
+
/**
|
|
160
|
+
* Run `fn` with assertion-hoisting suppressed. Re-entrant via a depth
|
|
161
|
+
* counter so nested suppressions compose. Always restores the previous
|
|
162
|
+
* state, even when `fn` throws.
|
|
163
|
+
*/
|
|
164
|
+
withSuppressedAssertionHoist<T>(fn: () => T): T;
|
|
122
165
|
/**
|
|
123
166
|
* Adds a new schema (e.g., for ATTACH)
|
|
124
167
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAsI,MAAM,YAAY,CAAC;AAClL,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAI7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAgB1D;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC;IAC5C,oBAAoB,CAAC,EAAE,SAAS,GAAG,CAAC,eAAe,EAAE,CAAC;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,OAAO,CAAgF;IAC/F,OAAO,CAAC,qBAAqB,CAAoB;IACjD,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,cAAc,CAA8B;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/schema/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAsI,MAAM,YAAY,CAAC;AAClL,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAI7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAgB1D;;;GAGG;AACH,MAAM,WAAW,wBAAyB,SAAQ,gBAAgB;IACjE,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC;IAC5C,oBAAoB,CAAC,EAAE,SAAS,GAAG,CAAC,eAAe,EAAE,CAAC;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,OAAO,CAAgF;IAC/F,OAAO,CAAC,qBAAqB,CAAoB;IACjD,OAAO,CAAC,qBAAqB,CAAgC;IAC7D,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,cAAc,CAA8B;IACpD;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB,CAAa;IAE7C;;;;OAIG;gBACS,EAAE,EAAE,QAAQ;IAOxB;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQpC;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;IASpF;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,qBAAqB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS;IAIzF;;;;OAIG;IACF,UAAU,IAAI,gBAAgB,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,qBAAqB,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAMnG;;;;;OAKG;IACH,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW5C;;;;OAIG;IACH,wBAAwB,IAAI,MAAM;IAwBlC;;;OAGG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAI9C;;;OAGG;IACH,oBAAoB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE;IAOxE;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,aAAa,IAAI,MAAM;IAWvB;;OAEG;IACH,gBAAgB,IAAI,wBAAwB,EAAE;IAU9C;;;;;OAKG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,wBAAwB,GAAG,IAAI;IAyB3E;;;OAGG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAiB1D;;OAEG;IACH,iBAAiB,IAAI,oBAAoB;IAIzC;;;;OAIG;IACH,0BAA0B,IAAI,OAAO;IAIrC;;;;OAIG;IACH,4BAA4B,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;IAS/C;;;;;;OAMG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW/B;;;;;;OAMG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAqDnC;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,SAAS;IAI7F;;;;;;OAMG;IACH,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAavD;;;;;;OAMG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIxE;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAM5E;;;;;;OAMG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS;IAWhG;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,SAAS;IAMpG;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAe1F;;;;OAIG;YACW,kCAAkC;IA+ChD;;;;;;;OAOG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,OAAO,CAAC;IAwFnG;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAMvD;;OAEG;IACH,QAAQ,IAAI,IAAI;IAUhB;;;;;;OAMG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQrC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAMpF;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAyBzB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuC/B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA+E1B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8ChC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IA8D/B;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,0BAA0B;IAoElC;;;;;;;OAOG;IACH,OAAO,CAAC,kCAAkC;IAuC1C;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAkClC;;;;;OAKG;IACG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD3D;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;;;;;OAOG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EhG;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAUnC;;;;;;;OAOG;IACG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IAuElE;;;;;;;;;;;;OAYG;IACG,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAsB9F;;OAEG;YACW,eAAe;IAiB7B;;;OAGG;YACW,WAAW;IAmCzB;;OAEG;YACW,WAAW;CA8CzB"}
|
|
@@ -29,6 +29,15 @@ export class SchemaManager {
|
|
|
29
29
|
defaultVTabModuleArgs = {};
|
|
30
30
|
db;
|
|
31
31
|
changeNotifier = new SchemaChangeNotifier();
|
|
32
|
+
/**
|
|
33
|
+
* Re-entrancy guard: when truthy, optimizer-side assertion hoisting is
|
|
34
|
+
* suppressed. Set by `AssertionEvaluator` while compiling an assertion's
|
|
35
|
+
* own violation query — without this guard, the hoist would make the
|
|
36
|
+
* violation query plan to empty (the optimizer would trust the assertion
|
|
37
|
+
* to prove its own non-violation), defeating commit-time enforcement.
|
|
38
|
+
* See `assertion-hoist-cache.ts` and `core/database-assertions.ts`.
|
|
39
|
+
*/
|
|
40
|
+
assertionHoistSuppressed = 0;
|
|
32
41
|
/**
|
|
33
42
|
* Creates a new schema manager
|
|
34
43
|
*
|
|
@@ -85,6 +94,16 @@ export class SchemaManager {
|
|
|
85
94
|
getModule(name) {
|
|
86
95
|
return this.modules.get(name.toLowerCase());
|
|
87
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Iterates registered virtual table modules in registration order.
|
|
99
|
+
* Each entry yields the registered (lowercased) name, the module, and
|
|
100
|
+
* any auxData supplied at registration time.
|
|
101
|
+
*/
|
|
102
|
+
*allModules() {
|
|
103
|
+
for (const [name, reg] of this.modules) {
|
|
104
|
+
yield { name, module: reg.module, auxData: reg.auxData };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
88
107
|
/**
|
|
89
108
|
* Sets the default virtual table module to use when USING is omitted
|
|
90
109
|
*
|
|
@@ -189,12 +208,87 @@ export class SchemaManager {
|
|
|
189
208
|
}
|
|
190
209
|
return result;
|
|
191
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Adds (or replaces) an assertion in the named schema, firing
|
|
213
|
+
* `assertion_added` or `assertion_modified` events as appropriate.
|
|
214
|
+
* The Schema object itself does not hold a notifier; this wrapper exists
|
|
215
|
+
* so optimizer caches (e.g. assertion-hoist) can invalidate on change.
|
|
216
|
+
*/
|
|
217
|
+
addAssertion(schemaName, assertion) {
|
|
218
|
+
const schema = this.schemas.get(schemaName.toLowerCase());
|
|
219
|
+
if (!schema) {
|
|
220
|
+
throw new QuereusError(`Schema not found: ${schemaName}`, StatusCode.ERROR);
|
|
221
|
+
}
|
|
222
|
+
const existing = schema.getAssertion(assertion.name);
|
|
223
|
+
schema.addAssertion(assertion);
|
|
224
|
+
if (existing) {
|
|
225
|
+
this.changeNotifier.notifyChange({
|
|
226
|
+
type: 'assertion_modified',
|
|
227
|
+
schemaName: schemaName,
|
|
228
|
+
objectName: assertion.name,
|
|
229
|
+
oldObject: existing,
|
|
230
|
+
newObject: assertion,
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
this.changeNotifier.notifyChange({
|
|
235
|
+
type: 'assertion_added',
|
|
236
|
+
schemaName: schemaName,
|
|
237
|
+
objectName: assertion.name,
|
|
238
|
+
newObject: assertion,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Removes an assertion from the named schema, firing `assertion_removed`
|
|
244
|
+
* on success. Returns true iff the assertion existed and was removed.
|
|
245
|
+
*/
|
|
246
|
+
removeAssertion(schemaName, name) {
|
|
247
|
+
const schema = this.schemas.get(schemaName.toLowerCase());
|
|
248
|
+
if (!schema)
|
|
249
|
+
return false;
|
|
250
|
+
const existing = schema.getAssertion(name);
|
|
251
|
+
if (!existing)
|
|
252
|
+
return false;
|
|
253
|
+
const removed = schema.removeAssertion(name);
|
|
254
|
+
if (removed) {
|
|
255
|
+
this.changeNotifier.notifyChange({
|
|
256
|
+
type: 'assertion_removed',
|
|
257
|
+
schemaName: schemaName,
|
|
258
|
+
objectName: name,
|
|
259
|
+
oldObject: existing,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return removed;
|
|
263
|
+
}
|
|
192
264
|
/**
|
|
193
265
|
* Gets the schema change notifier for listening to schema changes
|
|
194
266
|
*/
|
|
195
267
|
getChangeNotifier() {
|
|
196
268
|
return this.changeNotifier;
|
|
197
269
|
}
|
|
270
|
+
/**
|
|
271
|
+
* True when assertion-hoisting must be suppressed (the caller is currently
|
|
272
|
+
* planning an assertion's own violation query). Read by
|
|
273
|
+
* `getAssertionHoistedConstraints`.
|
|
274
|
+
*/
|
|
275
|
+
isAssertionHoistSuppressed() {
|
|
276
|
+
return this.assertionHoistSuppressed > 0;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Run `fn` with assertion-hoisting suppressed. Re-entrant via a depth
|
|
280
|
+
* counter so nested suppressions compose. Always restores the previous
|
|
281
|
+
* state, even when `fn` throws.
|
|
282
|
+
*/
|
|
283
|
+
withSuppressedAssertionHoist(fn) {
|
|
284
|
+
this.assertionHoistSuppressed++;
|
|
285
|
+
try {
|
|
286
|
+
return fn();
|
|
287
|
+
}
|
|
288
|
+
finally {
|
|
289
|
+
this.assertionHoistSuppressed--;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
198
292
|
/**
|
|
199
293
|
* Adds a new schema (e.g., for ATTACH)
|
|
200
294
|
*
|
|
@@ -581,7 +675,7 @@ export class SchemaManager {
|
|
|
581
675
|
*/
|
|
582
676
|
buildColumnSchemas(astColumns, astConstraints, defaultNotNull) {
|
|
583
677
|
const preliminaryColumnSchemas = astColumns.map(colDef => columnDefToSchema(colDef, defaultNotNull));
|
|
584
|
-
const pkDefinition = findPKDefinition(preliminaryColumnSchemas, astConstraints);
|
|
678
|
+
const { pkDef: pkDefinition, defaultConflict: pkDefaultConflict } = findPKDefinition(preliminaryColumnSchemas, astConstraints);
|
|
585
679
|
const columns = preliminaryColumnSchemas.map((col, idx) => {
|
|
586
680
|
const isPkColumn = pkDefinition.some(pkCol => pkCol.index === idx);
|
|
587
681
|
const pkOrder = isPkColumn
|
|
@@ -594,7 +688,7 @@ export class SchemaManager {
|
|
|
594
688
|
notNull: isPkColumn ? true : col.notNull,
|
|
595
689
|
};
|
|
596
690
|
});
|
|
597
|
-
return { columns, pkDefinition };
|
|
691
|
+
return { columns, pkDefinition, pkDefaultConflict };
|
|
598
692
|
}
|
|
599
693
|
/**
|
|
600
694
|
* Extracts CHECK constraints from AST column and table constraint definitions.
|
|
@@ -749,7 +843,7 @@ export class SchemaManager {
|
|
|
749
843
|
const defaultNullability = this.db.options.getStringOption('default_column_nullability');
|
|
750
844
|
const defaultNotNull = defaultNullability === 'not_null';
|
|
751
845
|
const astColumns = stmt.columns || [];
|
|
752
|
-
const { columns, pkDefinition } = this.buildColumnSchemas(astColumns, stmt.constraints, defaultNotNull);
|
|
846
|
+
const { columns, pkDefinition, pkDefaultConflict } = this.buildColumnSchemas(astColumns, stmt.constraints, defaultNotNull);
|
|
753
847
|
const checkConstraints = this.extractCheckConstraints(astColumns, stmt.constraints);
|
|
754
848
|
const columnIndexMap = buildColumnIndexMap(columns);
|
|
755
849
|
const foreignKeys = this.extractForeignKeys(astColumns, stmt.constraints, columnIndexMap, tableName, targetSchemaName);
|
|
@@ -773,6 +867,7 @@ export class SchemaManager {
|
|
|
773
867
|
columns: Object.freeze(columns),
|
|
774
868
|
columnIndexMap,
|
|
775
869
|
primaryKeyDefinition: pkDefinition,
|
|
870
|
+
primaryKeyDefaultConflict: pkDefaultConflict,
|
|
776
871
|
checkConstraints: Object.freeze(checkConstraints),
|
|
777
872
|
foreignKeys: foreignKeys.length > 0 ? Object.freeze(foreignKeys) : undefined,
|
|
778
873
|
uniqueConstraints: uniqueConstraints.length > 0 ? Object.freeze(uniqueConstraints) : undefined,
|
|
@@ -1051,6 +1146,7 @@ export class SchemaManager {
|
|
|
1051
1146
|
name: indexSchema.name,
|
|
1052
1147
|
columns: Object.freeze(indexSchema.columns.map(c => c.index)),
|
|
1053
1148
|
predicate: indexSchema.predicate,
|
|
1149
|
+
derivedFromIndex: indexSchema.name,
|
|
1054
1150
|
};
|
|
1055
1151
|
const updatedConstraints = [...(tableSchema.uniqueConstraints ?? []), newConstraint];
|
|
1056
1152
|
result.uniqueConstraints = Object.freeze(updatedConstraints);
|
|
@@ -1100,11 +1196,16 @@ export class SchemaManager {
|
|
|
1100
1196
|
throw new QuereusError(`dropIndex failed for index '${indexName}' on table '${ownerTable.name}': ${message}`, code, e instanceof Error ? e : undefined);
|
|
1101
1197
|
}
|
|
1102
1198
|
}
|
|
1103
|
-
// Remove the index from the table schema
|
|
1199
|
+
// Remove the index from the table schema, along with any uniqueConstraint
|
|
1200
|
+
// that was synthesized from this index (see addIndexToTableSchema).
|
|
1104
1201
|
const updatedIndexes = (ownerTable.indexes || []).filter(idx => idx.name.toLowerCase() !== lowerIndexName);
|
|
1202
|
+
const updatedUniqueConstraints = (ownerTable.uniqueConstraints ?? []).filter(uc => uc.derivedFromIndex?.toLowerCase() !== lowerIndexName);
|
|
1105
1203
|
const updatedTableSchema = {
|
|
1106
1204
|
...ownerTable,
|
|
1107
1205
|
indexes: Object.freeze(updatedIndexes),
|
|
1206
|
+
uniqueConstraints: updatedUniqueConstraints.length > 0
|
|
1207
|
+
? Object.freeze(updatedUniqueConstraints)
|
|
1208
|
+
: undefined,
|
|
1108
1209
|
};
|
|
1109
1210
|
schema.addTable(updatedTableSchema);
|
|
1110
1211
|
this.changeNotifier.notifyChange({
|