@quereus/quereus 4.10.0 → 4.12.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/dist/src/common/type-inference.d.ts +12 -6
- package/dist/src/common/type-inference.d.ts.map +1 -1
- package/dist/src/common/type-inference.js +12 -24
- package/dist/src/common/type-inference.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +7 -5
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +4 -3
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +4 -3
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-materialized-views-analysis.d.ts +1 -3
- package/dist/src/core/database-materialized-views-analysis.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-analysis.js +1 -11
- package/dist/src/core/database-materialized-views-analysis.js.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views-plan-builders.js +12 -10
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +13 -2
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/core/derived-row-validator.d.ts.map +1 -1
- package/dist/src/core/derived-row-validator.js +14 -2
- package/dist/src/core/derived-row-validator.js.map +1 -1
- package/dist/src/core/param.d.ts +9 -0
- package/dist/src/core/param.d.ts.map +1 -1
- package/dist/src/core/param.js +21 -1
- package/dist/src/core/param.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +38 -15
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +7 -2
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.d.ts.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +27 -11
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/datetime.d.ts.map +1 -1
- package/dist/src/func/builtins/datetime.js +8 -3
- package/dist/src/func/builtins/datetime.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +9 -29
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.d.ts.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +14 -7
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/return-types.d.ts +29 -0
- package/dist/src/func/builtins/return-types.d.ts.map +1 -1
- package/dist/src/func/builtins/return-types.js +4 -1
- package/dist/src/func/builtins/return-types.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +22 -67
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/schema.d.ts.map +1 -1
- package/dist/src/func/builtins/schema.js +26 -16
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +5 -3
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/visitor.d.ts +16 -0
- package/dist/src/parser/visitor.d.ts.map +1 -1
- package/dist/src/parser/visitor.js +16 -0
- package/dist/src/parser/visitor.js.map +1 -1
- package/dist/src/planner/analysis/assertion-plan.d.ts +33 -0
- package/dist/src/planner/analysis/assertion-plan.d.ts.map +1 -0
- package/dist/src/planner/analysis/assertion-plan.js +39 -0
- package/dist/src/planner/analysis/assertion-plan.js.map +1 -0
- package/dist/src/planner/analysis/binary-operator-class.d.ts +55 -0
- package/dist/src/planner/analysis/binary-operator-class.d.ts.map +1 -0
- package/dist/src/planner/analysis/binary-operator-class.js +57 -0
- package/dist/src/planner/analysis/binary-operator-class.js.map +1 -0
- package/dist/src/planner/analysis/binding-extractor.d.ts +9 -3
- package/dist/src/planner/analysis/binding-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/binding-extractor.js +11 -16
- package/dist/src/planner/analysis/binding-extractor.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +19 -6
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts +1 -7
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.d.ts +17 -0
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.js +17 -5
- 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 +18 -18
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts +11 -7
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +11 -7
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts +1 -1
- package/dist/src/planner/analysis/equi-correlation.js +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.js +0 -2
- package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
- package/dist/src/planner/analysis/key-filter.d.ts.map +1 -1
- package/dist/src/planner/analysis/key-filter.js +2 -3
- package/dist/src/planner/analysis/key-filter.js.map +1 -1
- package/dist/src/planner/analysis/relation-key.d.ts +104 -0
- package/dist/src/planner/analysis/relation-key.d.ts.map +1 -0
- package/dist/src/planner/analysis/relation-key.js +121 -0
- package/dist/src/planner/analysis/relation-key.js.map +1 -0
- package/dist/src/planner/analysis/scalar-param-usage.d.ts.map +1 -1
- package/dist/src/planner/analysis/scalar-param-usage.js +12 -4
- package/dist/src/planner/analysis/scalar-param-usage.js.map +1 -1
- package/dist/src/planner/analysis/set-op-type-merge.d.ts +9 -3
- package/dist/src/planner/analysis/set-op-type-merge.d.ts.map +1 -1
- package/dist/src/planner/analysis/set-op-type-merge.js +22 -8
- package/dist/src/planner/analysis/set-op-type-merge.js.map +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +31 -23
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/analyze.d.ts.map +1 -1
- package/dist/src/planner/building/analyze.js +21 -0
- package/dist/src/planner/building/analyze.js.map +1 -1
- package/dist/src/planner/building/block.d.ts.map +1 -1
- package/dist/src/planner/building/block.js +222 -82
- package/dist/src/planner/building/block.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +3 -2
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +20 -27
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +8 -25
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +11 -3
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts +19 -8
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +56 -37
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/generated-column-scope.d.ts +58 -0
- package/dist/src/planner/building/generated-column-scope.d.ts.map +1 -0
- package/dist/src/planner/building/generated-column-scope.js +117 -0
- package/dist/src/planner/building/generated-column-scope.js.map +1 -0
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +36 -60
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/mutation-context.d.ts +63 -0
- package/dist/src/planner/building/mutation-context.d.ts.map +1 -0
- package/dist/src/planner/building/mutation-context.js +126 -0
- package/dist/src/planner/building/mutation-context.js.map +1 -0
- package/dist/src/planner/building/select-aggregates.d.ts +73 -132
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +405 -81
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +37 -8
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +8 -9
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +6 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +1 -1
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts +2 -2
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +82 -101
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +78 -33
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.d.ts.map +1 -1
- package/dist/src/planner/building/update.js +21 -32
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +329 -14
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/building/with.d.ts +6 -0
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +52 -3
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
- package/dist/src/planner/cache/correlation-detector.js +44 -17
- package/dist/src/planner/cache/correlation-detector.js.map +1 -1
- package/dist/src/planner/framework/physical-utils.d.ts +6 -0
- package/dist/src/planner/framework/physical-utils.d.ts.map +1 -1
- package/dist/src/planner/framework/physical-utils.js +6 -0
- package/dist/src/planner/framework/physical-utils.js.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.d.ts +123 -0
- package/dist/src/planner/mutation/lens-enforcement.d.ts.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.js +362 -5
- package/dist/src/planner/mutation/lens-enforcement.js.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.d.ts.map +1 -1
- package/dist/src/planner/mutation/mutation-diagnostic.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +15 -11
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +5 -0
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/bloom-join-node.js +7 -0
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +16 -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/plan-node-type.d.ts +1 -1
- package/dist/src/planner/nodes/plan-node-type.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node-type.js +1 -1
- package/dist/src/planner/nodes/plan-node-type.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +5 -2
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +9 -1
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +117 -91
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/sequence-node.d.ts +50 -0
- package/dist/src/planner/nodes/sequence-node.d.ts.map +1 -0
- package/dist/src/planner/nodes/sequence-node.js +96 -0
- package/dist/src/planner/nodes/sequence-node.js.map +1 -0
- package/dist/src/planner/nodes/values-node.d.ts +8 -0
- package/dist/src/planner/nodes/values-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/values-node.js +29 -6
- package/dist/src/planner/nodes/values-node.js.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts +43 -1
- package/dist/src/planner/nodes/view-mutation-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/view-mutation-node.js +27 -6
- package/dist/src/planner/nodes/view-mutation-node.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +33 -4
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +80 -36
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +38 -1
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.js +8 -3
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +18 -12
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +4 -3
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +6 -0
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/scopes/param.d.ts.map +1 -1
- package/dist/src/planner/scopes/param.js +10 -5
- package/dist/src/planner/scopes/param.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +25 -8
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +53 -10
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +7 -7
- package/dist/src/planner/util/key-utils.js +9 -9
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/runtime/delta-executor.d.ts.map +1 -1
- package/dist/src/runtime/delta-executor.js +7 -2
- package/dist/src/runtime/delta-executor.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +50 -15
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.d.ts +2 -43
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.js +2 -53
- package/dist/src/runtime/emit/alter-schema-event.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +70 -26
- 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 +7 -0
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/assertion-rename-helpers.js +2 -3
- package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts +5 -0
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +22 -22
- 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 +9 -3
- package/dist/src/runtime/emit/block.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +22 -13
- 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 +71 -70
- 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 +8 -3
- 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 +20 -10
- package/dist/src/runtime/emit/create-table.js.map +1 -1
- package/dist/src/runtime/emit/create-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/create-view.js +51 -44
- package/dist/src/runtime/emit/create-view.js.map +1 -1
- package/dist/src/runtime/emit/ddl-event-scope.d.ts +71 -0
- package/dist/src/runtime/emit/ddl-event-scope.d.ts.map +1 -0
- package/dist/src/runtime/emit/ddl-event-scope.js +80 -0
- package/dist/src/runtime/emit/ddl-event-scope.js.map +1 -0
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +28 -24
- 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 +23 -17
- 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 +7 -2
- 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 +16 -10
- package/dist/src/runtime/emit/drop-table.js.map +1 -1
- package/dist/src/runtime/emit/drop-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-view.js +50 -43
- package/dist/src/runtime/emit/drop-view.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/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +87 -67
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts +8 -0
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +128 -25
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/sequence.d.ts +17 -0
- package/dist/src/runtime/emit/sequence.d.ts.map +1 -0
- package/dist/src/runtime/emit/sequence.js +40 -0
- package/dist/src/runtime/emit/sequence.js.map +1 -0
- package/dist/src/runtime/emit/set-object-tags.d.ts.map +1 -1
- package/dist/src/runtime/emit/set-object-tags.js +40 -32
- package/dist/src/runtime/emit/set-object-tags.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 +3 -2
- package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
- package/dist/src/runtime/emit/update.js +3 -3
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/emit/view-mutation.d.ts.map +1 -1
- package/dist/src/runtime/emit/view-mutation.js +45 -3
- package/dist/src/runtime/emit/view-mutation.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.d.ts.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +9 -10
- 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 +3 -2
- package/dist/src/runtime/register.js.map +1 -1
- package/dist/src/runtime/row-constraints.d.ts +14 -8
- package/dist/src/runtime/row-constraints.d.ts.map +1 -1
- package/dist/src/runtime/row-constraints.js +41 -15
- package/dist/src/runtime/row-constraints.js.map +1 -1
- package/dist/src/runtime/strict-representation.d.ts +11 -6
- package/dist/src/runtime/strict-representation.d.ts.map +1 -1
- package/dist/src/runtime/strict-representation.js +1 -44
- package/dist/src/runtime/strict-representation.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +25 -2
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/assertion.js.map +1 -1
- package/dist/src/schema/catalog-rendering.d.ts +38 -0
- package/dist/src/schema/catalog-rendering.d.ts.map +1 -0
- package/dist/src/schema/catalog-rendering.js +171 -0
- package/dist/src/schema/catalog-rendering.js.map +1 -0
- package/dist/src/schema/catalog.d.ts +94 -5
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +159 -21
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column-source-resolver.d.ts +9 -5
- package/dist/src/schema/column-source-resolver.d.ts.map +1 -1
- package/dist/src/schema/column-source-resolver.js +9 -5
- package/dist/src/schema/column-source-resolver.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts +23 -7
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +60 -16
- package/dist/src/schema/constraint-builder.js.map +1 -1
- package/dist/src/schema/declared-schema-manager.d.ts +50 -0
- package/dist/src/schema/declared-schema-manager.d.ts.map +1 -1
- package/dist/src/schema/declared-schema-manager.js +52 -0
- package/dist/src/schema/declared-schema-manager.js.map +1 -1
- package/dist/src/schema/expr-scope/frame.d.ts +65 -0
- package/dist/src/schema/expr-scope/frame.d.ts.map +1 -0
- package/dist/src/schema/expr-scope/frame.js +104 -0
- package/dist/src/schema/expr-scope/frame.js.map +1 -0
- package/dist/src/schema/expr-scope/walk.d.ts +40 -0
- package/dist/src/schema/expr-scope/walk.d.ts.map +1 -0
- package/dist/src/schema/expr-scope/walk.js +260 -0
- package/dist/src/schema/expr-scope/walk.js.map +1 -0
- package/dist/src/schema/generated-column-refs.d.ts +41 -0
- package/dist/src/schema/generated-column-refs.d.ts.map +1 -0
- package/dist/src/schema/generated-column-refs.js +124 -0
- package/dist/src/schema/generated-column-refs.js.map +1 -0
- package/dist/src/schema/lens-ack.d.ts.map +1 -1
- package/dist/src/schema/lens-ack.js +5 -2
- package/dist/src/schema/lens-ack.js.map +1 -1
- package/dist/src/schema/lens-compiler.d.ts.map +1 -1
- package/dist/src/schema/lens-compiler.js +9 -1
- package/dist/src/schema/lens-compiler.js.map +1 -1
- package/dist/src/schema/lens-prover.d.ts +7 -2
- package/dist/src/schema/lens-prover.d.ts.map +1 -1
- package/dist/src/schema/lens-prover.js +105 -11
- package/dist/src/schema/lens-prover.js.map +1 -1
- package/dist/src/schema/lens.d.ts +12 -0
- package/dist/src/schema/lens.d.ts.map +1 -1
- package/dist/src/schema/lens.js +10 -0
- package/dist/src/schema/lens.js.map +1 -1
- package/dist/src/schema/manager.d.ts +48 -1
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +168 -36
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename/self-qualifier-strip.d.ts +16 -10
- package/dist/src/schema/rename/self-qualifier-strip.d.ts.map +1 -1
- package/dist/src/schema/rename/self-qualifier-strip.js +30 -213
- package/dist/src/schema/rename/self-qualifier-strip.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +4 -3
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +4 -3
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +54 -6
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +108 -42
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/schema-hasher.d.ts +12 -0
- package/dist/src/schema/schema-hasher.d.ts.map +1 -1
- package/dist/src/schema/schema-hasher.js +28 -10
- package/dist/src/schema/schema-hasher.js.map +1 -1
- package/dist/src/schema/table.d.ts +117 -19
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +213 -71
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/types/comparison-coercion.d.ts +5 -1
- package/dist/src/types/comparison-coercion.d.ts.map +1 -1
- package/dist/src/types/comparison-coercion.js +21 -5
- package/dist/src/types/comparison-coercion.js.map +1 -1
- package/dist/src/types/representation.d.ts +65 -0
- package/dist/src/types/representation.d.ts.map +1 -0
- package/dist/src/types/representation.js +63 -0
- package/dist/src/types/representation.js.map +1 -0
- package/dist/src/types/validation.d.ts +76 -22
- package/dist/src/types/validation.d.ts.map +1 -1
- package/dist/src/types/validation.js +110 -31
- package/dist/src/types/validation.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +10 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +16 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/capabilities.d.ts +72 -4
- package/dist/src/vtab/capabilities.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 +17 -13
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/module.d.ts +13 -7
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/src/planner/nodes/array-index-node.d.ts +0 -22
- package/dist/src/planner/nodes/array-index-node.d.ts.map +0 -1
- package/dist/src/planner/nodes/array-index-node.js +0 -41
- package/dist/src/planner/nodes/array-index-node.js.map +0 -1
- package/dist/src/runtime/emit/array-index.d.ts +0 -5
- package/dist/src/runtime/emit/array-index.d.ts.map +0 -1
- package/dist/src/runtime/emit/array-index.js +0 -22
- package/dist/src/runtime/emit/array-index.js.map +0 -1
|
@@ -7,6 +7,7 @@ import { RowOp, type SqlValue } from '../common/types.js';
|
|
|
7
7
|
import type * as AST from '../parser/ast.js';
|
|
8
8
|
import type { LogicalType } from '../types/logical-type.js';
|
|
9
9
|
import type { TableStatistics } from '../planner/stats/catalog-stats.js';
|
|
10
|
+
import type { ResolveColumnInSource } from './rename/shared.js';
|
|
10
11
|
/**
|
|
11
12
|
* Represents the schema definition of a table (real or virtual).
|
|
12
13
|
*/
|
|
@@ -134,6 +135,13 @@ export declare function resolveNamedConstraintClass(tableSchema: TableSchema, co
|
|
|
134
135
|
* typed — harmless, and not special-cased here.
|
|
135
136
|
*/
|
|
136
137
|
export declare function namedConstraintExists(tableSchema: TableSchema, name: string): boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Every constraint name a table currently holds (CHECK / UNIQUE / FK — the same
|
|
140
|
+
* three arrays {@link namedConstraintExists} scans), case-folded. The set form of
|
|
141
|
+
* that predicate, for callers that seed a mint-disambiguation taken-set
|
|
142
|
+
* ({@link disambiguateAutoConstraintName}) rather than testing one name.
|
|
143
|
+
*/
|
|
144
|
+
export declare function collectTableConstraintNames(tableSchema: TableSchema): Set<string>;
|
|
137
145
|
/**
|
|
138
146
|
* Refuses a *user-written* constraint name that is already taken — the within-table
|
|
139
147
|
* name-uniqueness rule shared by every ALTER path that adds a named constraint
|
|
@@ -159,6 +167,42 @@ export declare function namedConstraintExists(tableSchema: TableSchema, name: st
|
|
|
159
167
|
* @throws QuereusError(CONSTRAINT) when the name is taken.
|
|
160
168
|
*/
|
|
161
169
|
export declare function assertConstraintNameFree(tableSchema: TableSchema, name: string, alsoTaken?: ReadonlySet<string>): void;
|
|
170
|
+
/**
|
|
171
|
+
* Visits every *user-written* constraint name in a CREATE TABLE declaration —
|
|
172
|
+
* column-level clauses first, then table-level, each in declaration order, with
|
|
173
|
+
* the name spelled as the user typed it. Only the three classes that occupy a
|
|
174
|
+
* named-constraint array (CHECK / UNIQUE / FOREIGN KEY) are visited: a name on
|
|
175
|
+
* an inline NOT NULL / DEFAULT is not stored, so it cannot collide.
|
|
176
|
+
*
|
|
177
|
+
* The single walk behind both {@link collectDeclaredConstraintNames} (the mint
|
|
178
|
+
* taken-set) and `assertNoDuplicateConstraintNames` (schema/catalog.ts, the
|
|
179
|
+
* CREATE-time refusal), so the class filter cannot drift between the guard and
|
|
180
|
+
* the set it guards.
|
|
181
|
+
*/
|
|
182
|
+
export declare function forEachDeclaredConstraintName(astColumns: ReadonlyArray<AST.ColumnDef>, astConstraints: ReadonlyArray<AST.TableConstraint> | undefined, visit: (name: string) => void): void;
|
|
183
|
+
/**
|
|
184
|
+
* The statement-wide taken-set the CREATE TABLE mint sites disambiguate against:
|
|
185
|
+
* every *user-written* CHECK / UNIQUE / FOREIGN KEY constraint name in the
|
|
186
|
+
* declaration, case-folded. Seeded BEFORE any mint runs so a mint can never
|
|
187
|
+
* collide with a user name declared later in the statement.
|
|
188
|
+
*/
|
|
189
|
+
export declare function collectDeclaredConstraintNames(astColumns: ReadonlyArray<AST.ColumnDef>, astConstraints: ReadonlyArray<AST.TableConstraint> | undefined): Set<string>;
|
|
190
|
+
/**
|
|
191
|
+
* Collision-only disambiguation for an engine-minted constraint name
|
|
192
|
+
* (`_check_<col>`, `_fk_<table>_<cols>`). The first occurrence keeps the base
|
|
193
|
+
* name byte-identical to what the mint has always produced — the property that
|
|
194
|
+
* keeps every non-colliding persisted name and corpus assertion unchanged; the
|
|
195
|
+
* Nth colliding occurrence gets `_<N>` (N starting at 2), bumping past any
|
|
196
|
+
* already-taken suffixed spelling. `taken` spans the statement's user-written
|
|
197
|
+
* names ({@link collectDeclaredConstraintNames}) plus every earlier mint — one
|
|
198
|
+
* case-folded name space across CHECK / UNIQUE / FK — so a mint can never
|
|
199
|
+
* collide with a name the user typed, or with another mint. The chosen name is
|
|
200
|
+
* registered into `taken` before returning.
|
|
201
|
+
*
|
|
202
|
+
* A suffixed name keeps the reserved `_` prefix, so `isAutoConstraintName`
|
|
203
|
+
* (schema/catalog.ts) still classifies it as engine-synthesized.
|
|
204
|
+
*/
|
|
205
|
+
export declare function disambiguateAutoConstraintName(base: string, taken: Set<string>): string;
|
|
162
206
|
/**
|
|
163
207
|
* Builds a map from column names to their indices in the columns array
|
|
164
208
|
*
|
|
@@ -353,9 +397,9 @@ export declare function appendIndexToTableSchema(tableSchema: TableSchema, index
|
|
|
353
397
|
* likewise left to the caller: the engine recomputes them from column names right after DROP
|
|
354
398
|
* COLUMN returns (`withGeneratedColumnGraph` in `runDropColumn`), so only a caller driving a
|
|
355
399
|
* module's API directly ever observes a stale map — mirroring the same carve-out on the insert
|
|
356
|
-
* side.
|
|
357
|
-
* side: enforcement resolves the parent indices on demand from `referencedColumnNames`
|
|
358
|
-
* the parent's CURRENT schema.
|
|
400
|
+
* side. A foreign key has no stored parent-column-index field to touch, for the same reason as on
|
|
401
|
+
* the insert side: enforcement resolves the parent indices on demand from `referencedColumnNames`
|
|
402
|
+
* against the parent's CURRENT schema.
|
|
359
403
|
*/
|
|
360
404
|
export declare function shiftSchemaIndicesForDrop(schema: TableSchema, colIndex: number): {
|
|
361
405
|
columns: ReadonlyArray<ColumnSchema>;
|
|
@@ -463,6 +507,27 @@ export interface RowConstraintSchema {
|
|
|
463
507
|
defaultConflict?: ConflictResolution;
|
|
464
508
|
/** Arbitrary metadata tags (informational only) */
|
|
465
509
|
tags?: Readonly<Record<string, SqlValue>>;
|
|
510
|
+
/**
|
|
511
|
+
* Verbatim violation text for a SYNTHESIZED constraint whose expression the
|
|
512
|
+
* user never wrote (e.g. the lens NOT NULL obligation's `<col> is not null`),
|
|
513
|
+
* carried onto the built {@link import('../planner/nodes/constraint-check-node.js').ConstraintCheck}
|
|
514
|
+
* so the failure reads as its real class (`NOT NULL constraint failed: t.col`)
|
|
515
|
+
* instead of an anonymous CHECK. Unset for user-written constraints. Transient —
|
|
516
|
+
* set only on a write-plan-time constraint, never persisted to the catalog.
|
|
517
|
+
*/
|
|
518
|
+
violationMessage?: string;
|
|
519
|
+
/**
|
|
520
|
+
* When true, this constraint's expression evaluates to NULL when SATISFIED and
|
|
521
|
+
* to the violation-message TEXT when VIOLATED — inverting the pipeline's usual
|
|
522
|
+
* truthy-passes test. `runtime/row-constraints.ts` then fails the row iff the
|
|
523
|
+
* evaluated value is non-NULL and reports that value verbatim as the failure
|
|
524
|
+
* message. Lets one planned expression decide SEVERAL rules while keeping exact
|
|
525
|
+
* per-rule attribution (the lens decomposition writes' grouped deferred
|
|
526
|
+
* logical-row re-read — see `synthesizeLensRowLocalDeferredConstraint`).
|
|
527
|
+
* Transient — set only on a write-plan-time constraint, never persisted to the
|
|
528
|
+
* catalog.
|
|
529
|
+
*/
|
|
530
|
+
messageValued?: boolean;
|
|
466
531
|
/**
|
|
467
532
|
* Lens-synthesized **row-local CHECK only**: the lowercased basis-column names this
|
|
468
533
|
* constraint depends on, supplied by the prover (`collectLensRowLocalConstraints`)
|
|
@@ -537,8 +602,6 @@ export interface ForeignKeyConstraintSchema {
|
|
|
537
602
|
referencedTable: string;
|
|
538
603
|
/** Referenced schema (default: same schema) */
|
|
539
604
|
referencedSchema?: string;
|
|
540
|
-
/** Column indices in the parent table */
|
|
541
|
-
referencedColumns: ReadonlyArray<number>;
|
|
542
605
|
/**
|
|
543
606
|
* Referenced column names for deferred resolution.
|
|
544
607
|
* Parent column indices can't be resolved at schema creation time because
|
|
@@ -565,6 +628,26 @@ export interface ForeignKeyConstraintSchema {
|
|
|
565
628
|
* Uses stored column names or falls back to the parent's primary key.
|
|
566
629
|
*/
|
|
567
630
|
export declare function resolveReferencedColumns(fk: ForeignKeyConstraintSchema, parentSchema: TableSchema): number[];
|
|
631
|
+
/**
|
|
632
|
+
* {@link resolveReferencedColumns} plus the arity check every ENFORCEMENT site
|
|
633
|
+
* needs: a FK whose child column count does not match the resolved parent key
|
|
634
|
+
* cannot be checked at all, so the statement must fail rather than quietly skip
|
|
635
|
+
* the constraint.
|
|
636
|
+
*
|
|
637
|
+
* The gap this closes is the `references <Parent>` form with no parent column
|
|
638
|
+
* list: the declaration builders (`schema/constraint-builder.ts`
|
|
639
|
+
* `buildForeignKeyConstraintSchema`, `SchemaManager.extractForeignKeys`) compare
|
|
640
|
+
* counts only when a parent column list is written, and the defaulted form
|
|
641
|
+
* resolves to the parent's primary key — which may not exist yet (forward
|
|
642
|
+
* references are legal, see docs/sql-ddl.md § Order Independence) and can change
|
|
643
|
+
* arity later. So the arity is only knowable at enforcement time, and every
|
|
644
|
+
* enforcement site routes through here.
|
|
645
|
+
*
|
|
646
|
+
* Introspection / optimization callers (key-utils, ind-utils, lens FK
|
|
647
|
+
* discovery, `foreign_key_info`) keep using {@link resolveReferencedColumns} —
|
|
648
|
+
* a malformed FK must not make a read query fail.
|
|
649
|
+
*/
|
|
650
|
+
export declare function resolveReferencedColumnsForEnforcement(fk: ForeignKeyConstraintSchema, parentSchema: TableSchema, childSchema: TableSchema): number[];
|
|
568
651
|
/**
|
|
569
652
|
* Represents a UNIQUE constraint on one or more columns (beyond the primary key)
|
|
570
653
|
*/
|
|
@@ -739,20 +822,35 @@ export declare function findGoverningBasisKeys(table: TableSchema, indices: read
|
|
|
739
822
|
* Returns a copy of `tableSchema` with `generatedColumnDependencies` and
|
|
740
823
|
* `generatedColumnTopoOrder` recomputed from its current column list.
|
|
741
824
|
* Throws on cycle. The other fields are preserved as-is.
|
|
742
|
-
*/
|
|
743
|
-
export declare function withGeneratedColumnGraph(tableSchema: TableSchema): TableSchema;
|
|
744
|
-
/**
|
|
745
|
-
* For each generated column, walks its expression AST and collects the column
|
|
746
|
-
* indices in this table that the expression references. Unknown column names
|
|
747
|
-
* referenced unqualified (or qualified to this table) are rejected with a
|
|
748
|
-
* specific error so typos surface at CREATE TABLE / ALTER TABLE time rather
|
|
749
|
-
* than at INSERT/UPDATE time.
|
|
750
825
|
*
|
|
751
|
-
*
|
|
752
|
-
*
|
|
753
|
-
*
|
|
754
|
-
|
|
755
|
-
|
|
826
|
+
* `resolveColumnInSource` is the catalog-backed resolver
|
|
827
|
+
* (`buildColumnSourceResolver(db)`) the scope-aware reference analysis
|
|
828
|
+
* consults for inner FROM sources; questions about this table itself are
|
|
829
|
+
* answered from `tableSchema.columns` (the catalog may hold a stale
|
|
830
|
+
* pre-ALTER column set, or not hold the table at all).
|
|
831
|
+
*/
|
|
832
|
+
export declare function withGeneratedColumnGraph(tableSchema: TableSchema, resolveColumnInSource: ResolveColumnInSource): TableSchema;
|
|
833
|
+
/**
|
|
834
|
+
* For each generated column, collects the column indices in this table that
|
|
835
|
+
* its expression references, via the scope-aware collector
|
|
836
|
+
* (`./generated-column-refs.ts`) — a name bound by a FROM clause inside the
|
|
837
|
+
* expression belongs to that source, not to this table. Per reference:
|
|
838
|
+
*
|
|
839
|
+
* - `'own'` binding: a known column records a dependency edge; an unknown
|
|
840
|
+
* name of `'column'` shape is rejected ("not found") so typos surface at
|
|
841
|
+
* CREATE TABLE / ALTER TABLE time rather than at INSERT/UPDATE time; an
|
|
842
|
+
* unknown `'identifier'` is ignored (it may legitimately be a function or
|
|
843
|
+
* mutation-context variable).
|
|
844
|
+
* - `'foreign'` binding: ignored entirely.
|
|
845
|
+
* - `'unbound'` binding (a qualified reference nothing binds): rejected —
|
|
846
|
+
* there is nothing for it to resolve against at write time either.
|
|
847
|
+
* - `'unknown'` binding (an opaque subquery / function / CTE source
|
|
848
|
+
* intervenes): a known column records an edge (a missing edge would compute
|
|
849
|
+
* a generated column before its dependency and silently write NULL);
|
|
850
|
+
* an unknown name is ignored silently. Net effect vs. the scope-blind
|
|
851
|
+
* analysis this replaced: only ever accepts more, never less.
|
|
852
|
+
*/
|
|
853
|
+
export declare function extractGeneratedColumnDependencies(columns: ReadonlyArray<ColumnSchema>, tableName: string, schemaName: string, resolveColumnInSource: ResolveColumnInSource): Map<number, number[]>;
|
|
756
854
|
/**
|
|
757
855
|
* Pre-flight for `ALTER TABLE ADD COLUMN … GENERATED ALWAYS AS (<expr>)`, run at
|
|
758
856
|
* plan-build BEFORE the expression is compiled against a scope holding only the
|
|
@@ -770,7 +868,7 @@ export declare function extractGeneratedColumnDependencies(columns: ReadonlyArra
|
|
|
770
868
|
* A self-reference is the only cycle ADD COLUMN can create: an existing column's
|
|
771
869
|
* expression cannot name a column that does not exist yet.
|
|
772
870
|
*/
|
|
773
|
-
export declare function validateAddColumnGeneratedRefs(expr: AST.Expression, newColumnName: string, existingColumns: ReadonlyArray<ColumnSchema>, tableName: string): void;
|
|
871
|
+
export declare function validateAddColumnGeneratedRefs(expr: AST.Expression, newColumnName: string, existingColumns: ReadonlyArray<ColumnSchema>, tableName: string, schemaName: string, resolveColumnInSource: ResolveColumnInSource): void;
|
|
774
872
|
/**
|
|
775
873
|
* Topologically sorts generated columns so a generated column's dependencies
|
|
776
874
|
* come before it. Throws on any cycle (including self-edges).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/schema/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAI7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/schema/table.ts"],"names":[],"mappings":"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"}
|
package/dist/src/schema/table.js
CHANGED
|
@@ -4,7 +4,7 @@ import { StatusCode } from '../common/types.js';
|
|
|
4
4
|
import { quereusError, QuereusError } from '../common/errors.js';
|
|
5
5
|
import { createLogger } from '../common/logger.js';
|
|
6
6
|
import { inferType } from '../types/registry.js';
|
|
7
|
-
import {
|
|
7
|
+
import { collectGeneratedColumnRefs } from './generated-column-refs.js';
|
|
8
8
|
const log = createLogger('schema:table');
|
|
9
9
|
const warnLog = log.extend('warn');
|
|
10
10
|
/**
|
|
@@ -65,6 +65,25 @@ export function namedConstraintExists(tableSchema, name) {
|
|
|
65
65
|
|| (tableSchema.uniqueConstraints ?? []).some(c => c.name?.toLowerCase() === lower)
|
|
66
66
|
|| (tableSchema.foreignKeys ?? []).some(c => c.name?.toLowerCase() === lower);
|
|
67
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Every constraint name a table currently holds (CHECK / UNIQUE / FK — the same
|
|
70
|
+
* three arrays {@link namedConstraintExists} scans), case-folded. The set form of
|
|
71
|
+
* that predicate, for callers that seed a mint-disambiguation taken-set
|
|
72
|
+
* ({@link disambiguateAutoConstraintName}) rather than testing one name.
|
|
73
|
+
*/
|
|
74
|
+
export function collectTableConstraintNames(tableSchema) {
|
|
75
|
+
const names = new Set();
|
|
76
|
+
for (const c of tableSchema.checkConstraints ?? [])
|
|
77
|
+
if (c.name)
|
|
78
|
+
names.add(c.name.toLowerCase());
|
|
79
|
+
for (const c of tableSchema.uniqueConstraints ?? [])
|
|
80
|
+
if (c.name)
|
|
81
|
+
names.add(c.name.toLowerCase());
|
|
82
|
+
for (const c of tableSchema.foreignKeys ?? [])
|
|
83
|
+
if (c.name)
|
|
84
|
+
names.add(c.name.toLowerCase());
|
|
85
|
+
return names;
|
|
86
|
+
}
|
|
68
87
|
/**
|
|
69
88
|
* Refuses a *user-written* constraint name that is already taken — the within-table
|
|
70
89
|
* name-uniqueness rule shared by every ALTER path that adds a named constraint
|
|
@@ -94,6 +113,67 @@ export function assertConstraintNameFree(tableSchema, name, alsoTaken) {
|
|
|
94
113
|
return;
|
|
95
114
|
throw new QuereusError(`Cannot add constraint '${name}' to table '${tableSchema.name}': a constraint with that name already exists`, StatusCode.CONSTRAINT);
|
|
96
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Visits every *user-written* constraint name in a CREATE TABLE declaration —
|
|
118
|
+
* column-level clauses first, then table-level, each in declaration order, with
|
|
119
|
+
* the name spelled as the user typed it. Only the three classes that occupy a
|
|
120
|
+
* named-constraint array (CHECK / UNIQUE / FOREIGN KEY) are visited: a name on
|
|
121
|
+
* an inline NOT NULL / DEFAULT is not stored, so it cannot collide.
|
|
122
|
+
*
|
|
123
|
+
* The single walk behind both {@link collectDeclaredConstraintNames} (the mint
|
|
124
|
+
* taken-set) and `assertNoDuplicateConstraintNames` (schema/catalog.ts, the
|
|
125
|
+
* CREATE-time refusal), so the class filter cannot drift between the guard and
|
|
126
|
+
* the set it guards.
|
|
127
|
+
*/
|
|
128
|
+
export function forEachDeclaredConstraintName(astColumns, astConstraints, visit) {
|
|
129
|
+
const claim = (con) => {
|
|
130
|
+
if (!con.name)
|
|
131
|
+
return;
|
|
132
|
+
if (con.type !== 'check' && con.type !== 'unique' && con.type !== 'foreignKey')
|
|
133
|
+
return;
|
|
134
|
+
visit(con.name);
|
|
135
|
+
};
|
|
136
|
+
for (const colDef of astColumns) {
|
|
137
|
+
for (const con of colDef.constraints ?? [])
|
|
138
|
+
claim(con);
|
|
139
|
+
}
|
|
140
|
+
for (const con of astConstraints ?? [])
|
|
141
|
+
claim(con);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* The statement-wide taken-set the CREATE TABLE mint sites disambiguate against:
|
|
145
|
+
* every *user-written* CHECK / UNIQUE / FOREIGN KEY constraint name in the
|
|
146
|
+
* declaration, case-folded. Seeded BEFORE any mint runs so a mint can never
|
|
147
|
+
* collide with a user name declared later in the statement.
|
|
148
|
+
*/
|
|
149
|
+
export function collectDeclaredConstraintNames(astColumns, astConstraints) {
|
|
150
|
+
const names = new Set();
|
|
151
|
+
forEachDeclaredConstraintName(astColumns, astConstraints, name => names.add(name.toLowerCase()));
|
|
152
|
+
return names;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Collision-only disambiguation for an engine-minted constraint name
|
|
156
|
+
* (`_check_<col>`, `_fk_<table>_<cols>`). The first occurrence keeps the base
|
|
157
|
+
* name byte-identical to what the mint has always produced — the property that
|
|
158
|
+
* keeps every non-colliding persisted name and corpus assertion unchanged; the
|
|
159
|
+
* Nth colliding occurrence gets `_<N>` (N starting at 2), bumping past any
|
|
160
|
+
* already-taken suffixed spelling. `taken` spans the statement's user-written
|
|
161
|
+
* names ({@link collectDeclaredConstraintNames}) plus every earlier mint — one
|
|
162
|
+
* case-folded name space across CHECK / UNIQUE / FK — so a mint can never
|
|
163
|
+
* collide with a name the user typed, or with another mint. The chosen name is
|
|
164
|
+
* registered into `taken` before returning.
|
|
165
|
+
*
|
|
166
|
+
* A suffixed name keeps the reserved `_` prefix, so `isAutoConstraintName`
|
|
167
|
+
* (schema/catalog.ts) still classifies it as engine-synthesized.
|
|
168
|
+
*/
|
|
169
|
+
export function disambiguateAutoConstraintName(base, taken) {
|
|
170
|
+
let candidate = base;
|
|
171
|
+
for (let n = 2; taken.has(candidate.toLowerCase()); n++) {
|
|
172
|
+
candidate = `${base}_${n}`;
|
|
173
|
+
}
|
|
174
|
+
taken.add(candidate.toLowerCase());
|
|
175
|
+
return candidate;
|
|
176
|
+
}
|
|
97
177
|
/**
|
|
98
178
|
* Builds a map from column names to their indices in the columns array
|
|
99
179
|
*
|
|
@@ -382,9 +462,9 @@ export function appendIndexToTableSchema(tableSchema, indexSchema) {
|
|
|
382
462
|
* likewise left to the caller: the engine recomputes them from column names right after DROP
|
|
383
463
|
* COLUMN returns (`withGeneratedColumnGraph` in `runDropColumn`), so only a caller driving a
|
|
384
464
|
* module's API directly ever observes a stale map — mirroring the same carve-out on the insert
|
|
385
|
-
* side.
|
|
386
|
-
* side: enforcement resolves the parent indices on demand from `referencedColumnNames`
|
|
387
|
-
* the parent's CURRENT schema.
|
|
465
|
+
* side. A foreign key has no stored parent-column-index field to touch, for the same reason as on
|
|
466
|
+
* the insert side: enforcement resolves the parent indices on demand from `referencedColumnNames`
|
|
467
|
+
* against the parent's CURRENT schema.
|
|
388
468
|
*/
|
|
389
469
|
export function shiftSchemaIndicesForDrop(schema, colIndex) {
|
|
390
470
|
if (colIndex < 0 || colIndex >= schema.columns.length) {
|
|
@@ -619,6 +699,37 @@ export function resolveReferencedColumns(fk, parentSchema) {
|
|
|
619
699
|
// Default to primary key columns
|
|
620
700
|
return parentSchema.primaryKeyDefinition.map(pk => pk.index);
|
|
621
701
|
}
|
|
702
|
+
/**
|
|
703
|
+
* {@link resolveReferencedColumns} plus the arity check every ENFORCEMENT site
|
|
704
|
+
* needs: a FK whose child column count does not match the resolved parent key
|
|
705
|
+
* cannot be checked at all, so the statement must fail rather than quietly skip
|
|
706
|
+
* the constraint.
|
|
707
|
+
*
|
|
708
|
+
* The gap this closes is the `references <Parent>` form with no parent column
|
|
709
|
+
* list: the declaration builders (`schema/constraint-builder.ts`
|
|
710
|
+
* `buildForeignKeyConstraintSchema`, `SchemaManager.extractForeignKeys`) compare
|
|
711
|
+
* counts only when a parent column list is written, and the defaulted form
|
|
712
|
+
* resolves to the parent's primary key — which may not exist yet (forward
|
|
713
|
+
* references are legal, see docs/sql-ddl.md § Order Independence) and can change
|
|
714
|
+
* arity later. So the arity is only knowable at enforcement time, and every
|
|
715
|
+
* enforcement site routes through here.
|
|
716
|
+
*
|
|
717
|
+
* Introspection / optimization callers (key-utils, ind-utils, lens FK
|
|
718
|
+
* discovery, `foreign_key_info`) keep using {@link resolveReferencedColumns} —
|
|
719
|
+
* a malformed FK must not make a read query fail.
|
|
720
|
+
*/
|
|
721
|
+
export function resolveReferencedColumnsForEnforcement(fk, parentSchema, childSchema) {
|
|
722
|
+
const parentColIndices = resolveReferencedColumns(fk, parentSchema);
|
|
723
|
+
if (parentColIndices.length === fk.columns.length)
|
|
724
|
+
return parentColIndices;
|
|
725
|
+
const fkName = fk.name ?? `_fk_${childSchema.name}`;
|
|
726
|
+
const child = `${childSchema.schemaName}.${childSchema.name}`;
|
|
727
|
+
const parent = `${parentSchema.schemaName}.${parentSchema.name}`;
|
|
728
|
+
const target = (fk.referencedColumnNames && fk.referencedColumnNames.length > 0)
|
|
729
|
+
? `${parentColIndices.length} column(s) of '${parent}'`
|
|
730
|
+
: `the primary key of '${parent}', which has ${parentColIndices.length} column(s)`;
|
|
731
|
+
throw new QuereusError(`Foreign key '${fkName}' on table '${child}': ${fk.columns.length} column(s) reference ${target}.`, StatusCode.ERROR);
|
|
732
|
+
}
|
|
622
733
|
/**
|
|
623
734
|
* Helper to parse primary key from AST column and table constraints.
|
|
624
735
|
* @param columns Parsed column definitions from AST.
|
|
@@ -852,9 +963,15 @@ function findColumnPKDefinition(columns) {
|
|
|
852
963
|
* Returns a copy of `tableSchema` with `generatedColumnDependencies` and
|
|
853
964
|
* `generatedColumnTopoOrder` recomputed from its current column list.
|
|
854
965
|
* Throws on cycle. The other fields are preserved as-is.
|
|
966
|
+
*
|
|
967
|
+
* `resolveColumnInSource` is the catalog-backed resolver
|
|
968
|
+
* (`buildColumnSourceResolver(db)`) the scope-aware reference analysis
|
|
969
|
+
* consults for inner FROM sources; questions about this table itself are
|
|
970
|
+
* answered from `tableSchema.columns` (the catalog may hold a stale
|
|
971
|
+
* pre-ALTER column set, or not hold the table at all).
|
|
855
972
|
*/
|
|
856
|
-
export function withGeneratedColumnGraph(tableSchema) {
|
|
857
|
-
const rawDeps = extractGeneratedColumnDependencies(tableSchema.columns, tableSchema.name);
|
|
973
|
+
export function withGeneratedColumnGraph(tableSchema, resolveColumnInSource) {
|
|
974
|
+
const rawDeps = extractGeneratedColumnDependencies(tableSchema.columns, tableSchema.name, tableSchema.schemaName, resolveColumnInSource);
|
|
858
975
|
if (rawDeps.size === 0) {
|
|
859
976
|
return Object.freeze({
|
|
860
977
|
...tableSchema,
|
|
@@ -873,46 +990,80 @@ export function withGeneratedColumnGraph(tableSchema) {
|
|
|
873
990
|
});
|
|
874
991
|
}
|
|
875
992
|
/**
|
|
876
|
-
*
|
|
877
|
-
*
|
|
878
|
-
*
|
|
879
|
-
*
|
|
880
|
-
*
|
|
993
|
+
* Wrap the catalog-backed source resolver so questions about the table under
|
|
994
|
+
* analysis are answered from the in-flight column list instead of the catalog:
|
|
995
|
+
* at CREATE TABLE the catalog does not hold the table yet, and at DROP COLUMN
|
|
996
|
+
* it still holds the pre-drop column set. `extraColumnLower` covers ALTER ADD
|
|
997
|
+
* COLUMN, where the resolver must answer for the post-ALTER column set the
|
|
998
|
+
* emitter's re-analysis will see.
|
|
999
|
+
*/
|
|
1000
|
+
function resolveWithInFlightColumns(resolve, schemaName, tableName, columnIndexMap, extraColumnLower) {
|
|
1001
|
+
const schemaLower = schemaName.toLowerCase();
|
|
1002
|
+
const tableLower = tableName.toLowerCase();
|
|
1003
|
+
return (sourceSchema, sourceName, columnName) => {
|
|
1004
|
+
if (sourceSchema.toLowerCase() === schemaLower && sourceName.toLowerCase() === tableLower) {
|
|
1005
|
+
const colLower = columnName.toLowerCase();
|
|
1006
|
+
return columnIndexMap.has(colLower) || colLower === extraColumnLower;
|
|
1007
|
+
}
|
|
1008
|
+
return resolve(sourceSchema, sourceName, columnName);
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
/**
|
|
1012
|
+
* Shared rejection for a qualified generated-column reference nothing binds
|
|
1013
|
+
* (`RefBinding` `'unbound'`) — thrown identically by both authoring surfaces
|
|
1014
|
+
* so a declaration cannot be accepted by one and rejected by the other. See
|
|
1015
|
+
* `RefBinding` in `./generated-column-refs.ts`.
|
|
881
1016
|
*
|
|
882
|
-
*
|
|
883
|
-
*
|
|
884
|
-
*
|
|
1017
|
+
* NOTE: accepted tradeoff — this also fires on catalog reload (via
|
|
1018
|
+
* `withGeneratedColumnGraph`), so a table a pre-fix build persisted with such a
|
|
1019
|
+
* body now fails to LOAD rather than loading unwritable. Kept: the table could
|
|
1020
|
+
* never be written either way, and backwards compatibility is not yet a project
|
|
1021
|
+
* constraint. Revisit if stores written by older builds must open.
|
|
885
1022
|
*/
|
|
886
|
-
|
|
1023
|
+
function unboundQualifierError(ref, generatedColumnName, tableName) {
|
|
1024
|
+
return new QuereusError(`'${ref.originalQualifier}.${ref.originalName}' referenced by generated column '${generatedColumnName}' in table '${tableName}' binds nothing: a generated expression computes from the row being written, so it may only name this table's own columns (bare, '${tableName}.', or 'new.') or columns of a source it selects from`, StatusCode.ERROR);
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* For each generated column, collects the column indices in this table that
|
|
1028
|
+
* its expression references, via the scope-aware collector
|
|
1029
|
+
* (`./generated-column-refs.ts`) — a name bound by a FROM clause inside the
|
|
1030
|
+
* expression belongs to that source, not to this table. Per reference:
|
|
1031
|
+
*
|
|
1032
|
+
* - `'own'` binding: a known column records a dependency edge; an unknown
|
|
1033
|
+
* name of `'column'` shape is rejected ("not found") so typos surface at
|
|
1034
|
+
* CREATE TABLE / ALTER TABLE time rather than at INSERT/UPDATE time; an
|
|
1035
|
+
* unknown `'identifier'` is ignored (it may legitimately be a function or
|
|
1036
|
+
* mutation-context variable).
|
|
1037
|
+
* - `'foreign'` binding: ignored entirely.
|
|
1038
|
+
* - `'unbound'` binding (a qualified reference nothing binds): rejected —
|
|
1039
|
+
* there is nothing for it to resolve against at write time either.
|
|
1040
|
+
* - `'unknown'` binding (an opaque subquery / function / CTE source
|
|
1041
|
+
* intervenes): a known column records an edge (a missing edge would compute
|
|
1042
|
+
* a generated column before its dependency and silently write NULL);
|
|
1043
|
+
* an unknown name is ignored silently. Net effect vs. the scope-blind
|
|
1044
|
+
* analysis this replaced: only ever accepts more, never less.
|
|
1045
|
+
*/
|
|
1046
|
+
export function extractGeneratedColumnDependencies(columns, tableName, schemaName, resolveColumnInSource) {
|
|
887
1047
|
const columnIndexMap = buildColumnIndexMap(columns);
|
|
888
|
-
const
|
|
1048
|
+
const resolve = resolveWithInFlightColumns(resolveColumnInSource, schemaName, tableName, columnIndexMap);
|
|
889
1049
|
const result = new Map();
|
|
890
1050
|
columns.forEach((col, colIdx) => {
|
|
891
1051
|
if (!col.generated || !col.generatedExpr)
|
|
892
1052
|
return;
|
|
893
1053
|
const deps = new Set();
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
const ref = node;
|
|
908
|
-
if (ref.schema)
|
|
909
|
-
return;
|
|
910
|
-
const refIdx = columnIndexMap.get(ref.name.toLowerCase());
|
|
911
|
-
if (refIdx !== undefined)
|
|
912
|
-
deps.add(refIdx);
|
|
913
|
-
}
|
|
914
|
-
},
|
|
915
|
-
});
|
|
1054
|
+
for (const ref of collectGeneratedColumnRefs(col.generatedExpr, tableName, schemaName, resolve)) {
|
|
1055
|
+
if (ref.binding === 'unbound')
|
|
1056
|
+
throw unboundQualifierError(ref, col.name, tableName);
|
|
1057
|
+
if (ref.binding === 'foreign')
|
|
1058
|
+
continue;
|
|
1059
|
+
const refIdx = columnIndexMap.get(ref.name);
|
|
1060
|
+
if (refIdx !== undefined) {
|
|
1061
|
+
deps.add(refIdx);
|
|
1062
|
+
}
|
|
1063
|
+
else if (ref.binding === 'own' && ref.shape === 'column') {
|
|
1064
|
+
throw new QuereusError(`Column '${ref.originalName}' referenced by generated column '${col.name}' not found in table '${tableName}'`, StatusCode.ERROR);
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
916
1067
|
result.set(colIdx, Array.from(deps).sort((a, b) => a - b));
|
|
917
1068
|
});
|
|
918
1069
|
return result;
|
|
@@ -934,45 +1085,36 @@ export function extractGeneratedColumnDependencies(columns, tableName) {
|
|
|
934
1085
|
* A self-reference is the only cycle ADD COLUMN can create: an existing column's
|
|
935
1086
|
* expression cannot name a column that does not exist yet.
|
|
936
1087
|
*/
|
|
937
|
-
export function validateAddColumnGeneratedRefs(expr, newColumnName, existingColumns, tableName) {
|
|
1088
|
+
export function validateAddColumnGeneratedRefs(expr, newColumnName, existingColumns, tableName, schemaName, resolveColumnInSource) {
|
|
938
1089
|
const columnIndexMap = buildColumnIndexMap(existingColumns);
|
|
939
|
-
const tableNameLower = tableName.toLowerCase();
|
|
940
1090
|
const newColLower = newColumnName.toLowerCase();
|
|
941
1091
|
// `add column v … generated always as (v * 2)` where `v` ALREADY exists is a duplicate
|
|
942
1092
|
// column, not a cycle; the reference resolves to the existing sibling. Leave the
|
|
943
1093
|
// rejection to `runAddColumn`'s duplicate check so the message names the real problem.
|
|
944
1094
|
const newColumnIsDuplicate = columnIndexMap.has(newColLower);
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
if (lower === newColLower && !newColumnIsDuplicate) {
|
|
969
|
-
throw new QuereusError(`Cyclic dependency in generated columns: '${newColumnName}'`, StatusCode.ERROR);
|
|
970
|
-
}
|
|
971
|
-
if (node.type === 'column' && !columnIndexMap.has(lower)) {
|
|
972
|
-
throw new QuereusError(`Column '${name}' referenced by generated column '${newColumnName}' not found in table '${tableName}'`, StatusCode.ERROR);
|
|
973
|
-
}
|
|
974
|
-
},
|
|
975
|
-
});
|
|
1095
|
+
// Resolve questions about this table from the POST-ALTER column set (existing
|
|
1096
|
+
// plus the new column): the emitter re-runs `extractGeneratedColumnDependencies`
|
|
1097
|
+
// on that set, and this pre-flight must accept exactly what it will.
|
|
1098
|
+
const resolve = resolveWithInFlightColumns(resolveColumnInSource, schemaName, tableName, columnIndexMap, newColLower);
|
|
1099
|
+
for (const ref of collectGeneratedColumnRefs(expr, tableName, schemaName, resolve)) {
|
|
1100
|
+
if (ref.binding === 'unbound')
|
|
1101
|
+
throw unboundQualifierError(ref, newColumnName, tableName);
|
|
1102
|
+
if (ref.binding === 'foreign')
|
|
1103
|
+
continue;
|
|
1104
|
+
// Both `'own'` and `'unknown'` bindings of the new column's own name are a
|
|
1105
|
+
// self-cycle here: the emitter's re-analysis records a dependency edge for
|
|
1106
|
+
// either (see extractGeneratedColumnDependencies) and its topological sort
|
|
1107
|
+
// then raises this same error — this pre-flight only moves it earlier.
|
|
1108
|
+
if (ref.name === newColLower && !newColumnIsDuplicate) {
|
|
1109
|
+
throw new QuereusError(`Cyclic dependency in generated columns: '${newColumnName}'`, StatusCode.ERROR);
|
|
1110
|
+
}
|
|
1111
|
+
// Only an `'own'`-bound `column` shape yields "not found" — an `'unknown'`
|
|
1112
|
+
// binding may bind an opaque inner source, and a bare `identifier` may
|
|
1113
|
+
// legitimately resolve to something that is not a column of this table.
|
|
1114
|
+
if (ref.binding === 'own' && ref.shape === 'column' && !columnIndexMap.has(ref.name)) {
|
|
1115
|
+
throw new QuereusError(`Column '${ref.originalName}' referenced by generated column '${newColumnName}' not found in table '${tableName}'`, StatusCode.ERROR);
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
976
1118
|
}
|
|
977
1119
|
/**
|
|
978
1120
|
* Topologically sorts generated columns so a generated column's dependencies
|