@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { asRun } from '../types.js';
|
|
2
2
|
import { createMaintainedTable } from './materialized-view-helpers.js';
|
|
3
3
|
import { assertDdlTransactionPolicy } from './ddl-transaction-policy.js';
|
|
4
|
+
import { withStatementScopedSchemaEvents } from './ddl-event-scope.js';
|
|
4
5
|
export function emitCreateTable(plan, _ctx) {
|
|
5
6
|
async function run(rctx) {
|
|
6
7
|
// Strict-policy gate (see ddl-transaction-policy.ts). The owning module is the
|
|
@@ -14,16 +15,25 @@ export function emitCreateTable(plan, _ctx) {
|
|
|
14
15
|
}
|
|
15
16
|
// Ensure we're in a transaction before DDL (lazy/JIT transaction start)
|
|
16
17
|
await rctx.db._ensureTransaction();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
// Both arms run under the statement-scoped schema-event scope (see
|
|
19
|
+
// ddl-event-scope.ts). The maintained arm creates the backing table — announced —
|
|
20
|
+
// and fills it afterwards, so a fill that violates a declared constraint would
|
|
21
|
+
// otherwise announce a create and a drop for a statement that did nothing. The
|
|
22
|
+
// plain arm can fail after `module.create` too (the FK-collation check in
|
|
23
|
+
// SchemaManager.createTable), by which point an emitter-backed module has already
|
|
24
|
+
// announced.
|
|
25
|
+
return withStatementScopedSchemaEvents(rctx, async () => {
|
|
26
|
+
if (plan.statementAst.maintained) {
|
|
27
|
+
// `create table … maintained as <body>` — the declared-shape maintained
|
|
28
|
+
// form: shape-verify against the body BEFORE registration, then create +
|
|
29
|
+
// attach-to-empty through the shared attach core (all-or-nothing).
|
|
30
|
+
await createMaintainedTable(rctx.db, plan.statementAst);
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
await rctx.db.schemaManager.createTable(plan.statementAst);
|
|
34
|
+
// The specific error handling for IF NOT EXISTS is within SchemaManager.defineTable.
|
|
35
|
+
return null; // Explicitly return null for successful void operations
|
|
36
|
+
});
|
|
27
37
|
}
|
|
28
38
|
return { params: [], run: asRun(run), note: `createTable(${plan.statementAst.table.name})` };
|
|
29
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"create-table.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-table.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,UAAU,eAAe,CAAC,IAAqB,EAAE,IAAqB;IAC3E,KAAK,UAAU,GAAG,CAAC,IAAoB;QACtC,+EAA+E;QAC/E,yEAAyE;QACzE,gFAAgF;QAChF,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC;QACpG,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,0BAA0B,CACzB,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,UAAU,EACrC,gBAAgB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAC9C,CAAC;QACH,CAAC;QAED,wEAAwE;QACxE,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAEnC,mEAAmE;QACnE,kFAAkF;QAClF,+EAA+E;QAC/E,+EAA+E;QAC/E,0EAA0E;QAC1E,kFAAkF;QAClF,aAAa;QACb,OAAO,+BAA+B,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACvD,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;gBAClC,wEAAwE;gBACxE,yEAAyE;gBACzE,mEAAmE;gBACnE,MAAM,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC;YACb,CAAC;YAED,MAAM,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3D,qFAAqF;YAErF,OAAO,IAAI,CAAC,CAAC,wDAAwD;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;AAC9F,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-view.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/create-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-view.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/create-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAO9D,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,GAAG,WAAW,CA4EvF"}
|
|
@@ -1,55 +1,62 @@
|
|
|
1
1
|
import { QuereusError } from '../../common/errors.js';
|
|
2
2
|
import { StatusCode } from '../../common/types.js';
|
|
3
3
|
import { assertCatalogObjectPersistable } from '../../schema/catalog-persistability.js';
|
|
4
|
+
import { withStatementScopedSchemaEvents } from './ddl-event-scope.js';
|
|
4
5
|
export function emitCreateView(plan, _ctx) {
|
|
5
6
|
async function run(rctx) {
|
|
6
7
|
// Ensure we're in a transaction before DDL (lazy/JIT transaction start)
|
|
7
8
|
await rctx.db._ensureTransaction();
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
9
|
+
// Statement-scoped schema-event scope. This statement raises nothing on the public
|
|
10
|
+
// schema channel today (`view_added` is an internal catalog notification), so the
|
|
11
|
+
// scope is a no-op — it is here so the invariant holds by construction: see
|
|
12
|
+
// ddl-event-scope.ts.
|
|
13
|
+
return withStatementScopedSchemaEvents(rctx, async () => {
|
|
14
|
+
// Check if view already exists
|
|
15
|
+
const existingView = rctx.db.schemaManager.getView(plan.schemaName, plan.viewName);
|
|
16
|
+
if (existingView && !plan.ifNotExists) {
|
|
17
|
+
throw new QuereusError(`View '${plan.schemaName}.${plan.viewName}' already exists`, StatusCode.ERROR);
|
|
18
|
+
}
|
|
19
|
+
if (existingView && plan.ifNotExists) {
|
|
20
|
+
// View exists but IF NOT EXISTS was specified, so this is a no-op
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
// Create the view schema. Any `with defaults (…)` rides inside
|
|
24
|
+
// plan.selectStmt (→ selectAst), so there is no separate field to thread.
|
|
25
|
+
const viewSchema = {
|
|
26
|
+
name: plan.viewName,
|
|
27
|
+
schemaName: plan.schemaName,
|
|
28
|
+
sql: plan.sql,
|
|
29
|
+
selectAst: plan.selectStmt,
|
|
30
|
+
columns: plan.columns,
|
|
31
|
+
tags: plan.tags,
|
|
32
|
+
};
|
|
33
|
+
// Add the view to the schema manager
|
|
34
|
+
const schema = rctx.db.schemaManager.getSchema(plan.schemaName);
|
|
35
|
+
if (!schema) {
|
|
36
|
+
throw new QuereusError(`Schema '${plan.schemaName}' does not exist`, StatusCode.ERROR);
|
|
37
|
+
}
|
|
38
|
+
// Refuse up front if a registered module could not durably persist this
|
|
39
|
+
// definition — the persistence itself is fire-and-forget (see
|
|
40
|
+
// assertCatalogObjectPersistable), so this is the only place the failure can
|
|
41
|
+
// reach the statement. Nothing has been mutated yet, so a throw is a clean no-op.
|
|
42
|
+
assertCatalogObjectPersistable(rctx.db, 'view', viewSchema);
|
|
43
|
+
schema.addView(viewSchema);
|
|
44
|
+
// Fire view_added so a store-backed catalog can persist this view. Fired
|
|
45
|
+
// here (not from Schema.addView) so only user/declarative DDL views are
|
|
46
|
+
// persisted; internal views (lens bodies, etc.) register via schema.addView
|
|
47
|
+
// directly and are deliberately excluded. Not reached on the IF NOT EXISTS
|
|
48
|
+
// no-op above.
|
|
49
|
+
rctx.db.schemaManager.getChangeNotifier().notifyChange({
|
|
50
|
+
type: 'view_added',
|
|
51
|
+
// Stored names of the registered ViewSchema — see
|
|
52
|
+
// SchemaManager.canonicalSchemaName for the emitter/stored-name invariant
|
|
53
|
+
// (plan.schemaName is already canonical via the builder, so they coincide).
|
|
54
|
+
schemaName: viewSchema.schemaName,
|
|
55
|
+
objectName: viewSchema.name,
|
|
56
|
+
newObject: viewSchema,
|
|
57
|
+
});
|
|
58
|
+
return null; // Explicitly return null for successful void operations
|
|
51
59
|
});
|
|
52
|
-
return null; // Explicitly return null for successful void operations
|
|
53
60
|
}
|
|
54
61
|
return {
|
|
55
62
|
params: [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-view.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"create-view.js","sourceRoot":"","sources":["../../../../src/runtime/emit/create-view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAiB,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,UAAU,cAAc,CAAC,IAAoB,EAAE,IAAqB;IACzE,KAAK,UAAU,GAAG,CAAC,IAAoB;QACtC,wEAAwE;QACxE,MAAM,IAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAEnC,mFAAmF;QACnF,kFAAkF;QAClF,4EAA4E;QAC5E,sBAAsB;QACtB,OAAO,+BAA+B,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACvD,+BAA+B;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEnF,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACvC,MAAM,IAAI,YAAY,CACrB,SAAS,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,kBAAkB,EAC3D,UAAU,CAAC,KAAK,CAChB,CAAC;YACH,CAAC;YAED,IAAI,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,kEAAkE;gBAClE,OAAO,IAAI,CAAC;YACb,CAAC;YAED,+DAA+D;YAC/D,0EAA0E;YAC1E,MAAM,UAAU,GAAe;gBAC9B,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;aACf,CAAC;YAEF,qCAAqC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,IAAI,YAAY,CACrB,WAAW,IAAI,CAAC,UAAU,kBAAkB,EAC5C,UAAU,CAAC,KAAK,CAChB,CAAC;YACH,CAAC;YAED,wEAAwE;YACxE,8DAA8D;YAC9D,6EAA6E;YAC7E,kFAAkF;YAClF,8BAA8B,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAE5D,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3B,yEAAyE;YACzE,wEAAwE;YACxE,4EAA4E;YAC5E,2EAA2E;YAC3E,eAAe;YACf,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC,YAAY,CAAC;gBACtD,IAAI,EAAE,YAAY;gBAClB,kDAAkD;gBAClD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,UAAU,EAAE,UAAU,CAAC,IAAI;gBAC3B,SAAS,EAAE,UAAU;aACrB,CAAC,CAAC;YACH,OAAO,IAAI,CAAC,CAAC,wDAAwD;QACtE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACN,MAAM,EAAE,EAAE;QACV,GAAG;QACH,IAAI,EAAE,cAAc,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,GAAG;KACvD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { RuntimeContext } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runs one whole DDL statement with its schema events made RETRACTABLE: if `fn` throws,
|
|
4
|
+
* every schema event batched since the call is dropped before the error propagates, so a
|
|
5
|
+
* statement that unwound announces nothing at all.
|
|
6
|
+
*
|
|
7
|
+
* The other half of the "one event per statement, on the success path only" rule. The
|
|
8
|
+
* engine's own auto emits satisfy the rule by construction (they sit at the tail of the
|
|
9
|
+
* catalog mutation, past any throw), but a backend that emits for ITSELF cannot: it emits
|
|
10
|
+
* from inside `module.create` / `module.alterTable` / `module.destroy`, which is not the end
|
|
11
|
+
* of the statement. Two demonstrated leaks:
|
|
12
|
+
*
|
|
13
|
+
* - `alter table … add column <inline constraint>` installs each constraint through further
|
|
14
|
+
* module calls; a failure there runs `revertAddColumn` — by which point the module's
|
|
15
|
+
* announcement, carrying the statement's SQL, already sits in the transaction's batch.
|
|
16
|
+
* - `create table … maintained as <body>` creates the backing table (announced) and fills it
|
|
17
|
+
* afterwards; a fill that violates a declared constraint drops the table again, so
|
|
18
|
+
* subscribers see a create followed by a drop for a statement that did nothing. This one
|
|
19
|
+
* leaks on the ENGINE's path too, because the drop's own auto emit is a second statement's
|
|
20
|
+
* worth of announcement inside one failing statement.
|
|
21
|
+
*
|
|
22
|
+
* A syncing peer that re-executed either announcement would diverge from the device where the
|
|
23
|
+
* statement failed.
|
|
24
|
+
*
|
|
25
|
+
* ## The rule
|
|
26
|
+
*
|
|
27
|
+
* **Every DDL statement emitter opens this scope around its `run()` body** — including the
|
|
28
|
+
* ones that raise no schema event today (`create view`, the assertion verbs, the tag arms).
|
|
29
|
+
* The point is that the invariant holds by construction: if one of those ever starts
|
|
30
|
+
* announcing, it cannot reintroduce the class. Check it against the DDL block of
|
|
31
|
+
* `runtime/register.ts`.
|
|
32
|
+
*
|
|
33
|
+
* **The declarative statements (`apply schema` and friends) deliberately do NOT open one.**
|
|
34
|
+
* `emitApplySchema` generates migration DDL and runs each generated statement through
|
|
35
|
+
* `db._execWithinTransaction`. A failure on statement 5 leaves statements 1–4 *applied* —
|
|
36
|
+
* there is no catalog rollback, and inside an explicit transaction the user may still commit.
|
|
37
|
+
* Those four really happened and must stay announced; a scope around the whole apply would
|
|
38
|
+
* retract them. The per-statement rule gives the right answer there for free: each generated
|
|
39
|
+
* sub-statement runs its own emitter, so each opens and spends its own scope.
|
|
40
|
+
*
|
|
41
|
+
* ## Call shape
|
|
42
|
+
*
|
|
43
|
+
* Call it INSIDE the emitter's `run()` — after `assertDdlTransactionPolicy` and
|
|
44
|
+
* `await db._ensureTransaction()`, so the mark is taken with batching already on. Retraction
|
|
45
|
+
* is a no-op without a batch, which is correct: the events were delivered synchronously and
|
|
46
|
+
* nothing can call them back. Placement is not load-bearing for correctness (the watermark is
|
|
47
|
+
* a lifetime-monotonic counter), but keeping it identical everywhere makes the invariant
|
|
48
|
+
* readable.
|
|
49
|
+
*
|
|
50
|
+
* Only the SCHEMA channel is retracted — see
|
|
51
|
+
* {@link DatabaseEventEmitter.discardSchemaEventsSince} for why touching the data channel here
|
|
52
|
+
* would swallow earlier statements' committed writes.
|
|
53
|
+
*
|
|
54
|
+
* NOTE: retraction is the right answer only while a failed statement's catalog change does not
|
|
55
|
+
* OUTLIVE the failure — the same condition the `apply schema` carve-out above turns on. It
|
|
56
|
+
* holds today by placement: every engine auto emit sits at the tail of its catalog mutation
|
|
57
|
+
* (`SchemaManager.createTable` / `createIndex` / `dropIndex` / `dropTable` / `createBackingTable`),
|
|
58
|
+
* and the only post-emit work any DDL emitter still does — `dropMaintainedTable`'s
|
|
59
|
+
* `materialized_view_removed` notify — cannot throw, because `SchemaChangeNotifier.notifyChange`
|
|
60
|
+
* swallows listener errors. If a DDL emitter ever gains work that runs AFTER a catalog change
|
|
61
|
+
* landed and can throw, this scope would un-announce a change the catalog kept; that arm needs
|
|
62
|
+
* the carve-out treatment (its own inner scope, or no scope), not a wider one.
|
|
63
|
+
*
|
|
64
|
+
* NOTE: nothing nests these scopes today (`apply schema` is unwrapped, and the one ALTER arm
|
|
65
|
+
* that runs nested SQL — the ALTER PRIMARY KEY shadow rebuild — does it under
|
|
66
|
+
* `withPublicEventsSuppressed`, so it batches no events at all). If an arm ever did nest one,
|
|
67
|
+
* the outer failure would retract the inner statement's events too, which is the wanted
|
|
68
|
+
* reading: the outer statement unwound, so everything it did announces nothing.
|
|
69
|
+
*/
|
|
70
|
+
export declare function withStatementScopedSchemaEvents<T>(rctx: RuntimeContext, fn: () => Promise<T>): Promise<T>;
|
|
71
|
+
//# sourceMappingURL=ddl-event-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-event-scope.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/ddl-event-scope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,wBAAsB,+BAA+B,CAAC,CAAC,EACtD,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs one whole DDL statement with its schema events made RETRACTABLE: if `fn` throws,
|
|
3
|
+
* every schema event batched since the call is dropped before the error propagates, so a
|
|
4
|
+
* statement that unwound announces nothing at all.
|
|
5
|
+
*
|
|
6
|
+
* The other half of the "one event per statement, on the success path only" rule. The
|
|
7
|
+
* engine's own auto emits satisfy the rule by construction (they sit at the tail of the
|
|
8
|
+
* catalog mutation, past any throw), but a backend that emits for ITSELF cannot: it emits
|
|
9
|
+
* from inside `module.create` / `module.alterTable` / `module.destroy`, which is not the end
|
|
10
|
+
* of the statement. Two demonstrated leaks:
|
|
11
|
+
*
|
|
12
|
+
* - `alter table … add column <inline constraint>` installs each constraint through further
|
|
13
|
+
* module calls; a failure there runs `revertAddColumn` — by which point the module's
|
|
14
|
+
* announcement, carrying the statement's SQL, already sits in the transaction's batch.
|
|
15
|
+
* - `create table … maintained as <body>` creates the backing table (announced) and fills it
|
|
16
|
+
* afterwards; a fill that violates a declared constraint drops the table again, so
|
|
17
|
+
* subscribers see a create followed by a drop for a statement that did nothing. This one
|
|
18
|
+
* leaks on the ENGINE's path too, because the drop's own auto emit is a second statement's
|
|
19
|
+
* worth of announcement inside one failing statement.
|
|
20
|
+
*
|
|
21
|
+
* A syncing peer that re-executed either announcement would diverge from the device where the
|
|
22
|
+
* statement failed.
|
|
23
|
+
*
|
|
24
|
+
* ## The rule
|
|
25
|
+
*
|
|
26
|
+
* **Every DDL statement emitter opens this scope around its `run()` body** — including the
|
|
27
|
+
* ones that raise no schema event today (`create view`, the assertion verbs, the tag arms).
|
|
28
|
+
* The point is that the invariant holds by construction: if one of those ever starts
|
|
29
|
+
* announcing, it cannot reintroduce the class. Check it against the DDL block of
|
|
30
|
+
* `runtime/register.ts`.
|
|
31
|
+
*
|
|
32
|
+
* **The declarative statements (`apply schema` and friends) deliberately do NOT open one.**
|
|
33
|
+
* `emitApplySchema` generates migration DDL and runs each generated statement through
|
|
34
|
+
* `db._execWithinTransaction`. A failure on statement 5 leaves statements 1–4 *applied* —
|
|
35
|
+
* there is no catalog rollback, and inside an explicit transaction the user may still commit.
|
|
36
|
+
* Those four really happened and must stay announced; a scope around the whole apply would
|
|
37
|
+
* retract them. The per-statement rule gives the right answer there for free: each generated
|
|
38
|
+
* sub-statement runs its own emitter, so each opens and spends its own scope.
|
|
39
|
+
*
|
|
40
|
+
* ## Call shape
|
|
41
|
+
*
|
|
42
|
+
* Call it INSIDE the emitter's `run()` — after `assertDdlTransactionPolicy` and
|
|
43
|
+
* `await db._ensureTransaction()`, so the mark is taken with batching already on. Retraction
|
|
44
|
+
* is a no-op without a batch, which is correct: the events were delivered synchronously and
|
|
45
|
+
* nothing can call them back. Placement is not load-bearing for correctness (the watermark is
|
|
46
|
+
* a lifetime-monotonic counter), but keeping it identical everywhere makes the invariant
|
|
47
|
+
* readable.
|
|
48
|
+
*
|
|
49
|
+
* Only the SCHEMA channel is retracted — see
|
|
50
|
+
* {@link DatabaseEventEmitter.discardSchemaEventsSince} for why touching the data channel here
|
|
51
|
+
* would swallow earlier statements' committed writes.
|
|
52
|
+
*
|
|
53
|
+
* NOTE: retraction is the right answer only while a failed statement's catalog change does not
|
|
54
|
+
* OUTLIVE the failure — the same condition the `apply schema` carve-out above turns on. It
|
|
55
|
+
* holds today by placement: every engine auto emit sits at the tail of its catalog mutation
|
|
56
|
+
* (`SchemaManager.createTable` / `createIndex` / `dropIndex` / `dropTable` / `createBackingTable`),
|
|
57
|
+
* and the only post-emit work any DDL emitter still does — `dropMaintainedTable`'s
|
|
58
|
+
* `materialized_view_removed` notify — cannot throw, because `SchemaChangeNotifier.notifyChange`
|
|
59
|
+
* swallows listener errors. If a DDL emitter ever gains work that runs AFTER a catalog change
|
|
60
|
+
* landed and can throw, this scope would un-announce a change the catalog kept; that arm needs
|
|
61
|
+
* the carve-out treatment (its own inner scope, or no scope), not a wider one.
|
|
62
|
+
*
|
|
63
|
+
* NOTE: nothing nests these scopes today (`apply schema` is unwrapped, and the one ALTER arm
|
|
64
|
+
* that runs nested SQL — the ALTER PRIMARY KEY shadow rebuild — does it under
|
|
65
|
+
* `withPublicEventsSuppressed`, so it batches no events at all). If an arm ever did nest one,
|
|
66
|
+
* the outer failure would retract the inner statement's events too, which is the wanted
|
|
67
|
+
* reading: the outer statement unwound, so everything it did announces nothing.
|
|
68
|
+
*/
|
|
69
|
+
export async function withStatementScopedSchemaEvents(rctx, fn) {
|
|
70
|
+
const emitter = rctx.db._getEventEmitter();
|
|
71
|
+
const watermark = emitter.beginSchemaEventScope();
|
|
72
|
+
try {
|
|
73
|
+
return await fn();
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
emitter.discardSchemaEventsSince(watermark);
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ddl-event-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-event-scope.js","sourceRoot":"","sources":["../../../../src/runtime/emit/ddl-event-scope.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACpD,IAAoB,EACpB,EAAoB;IAEpB,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAClD,IAAI,CAAC;QACJ,OAAO,MAAM,EAAE,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dml-executor.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/dml-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AAO5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"dml-executor.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/dml-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAA+C,MAAM,aAAa,CAAC;AAO5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAgTzD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAQ7E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CAixCxF"}
|
|
@@ -10,7 +10,7 @@ import { isMaintainedTable } from '../../schema/derivation.js';
|
|
|
10
10
|
import { hasNativeEventSupport } from '../../util/event-support.js';
|
|
11
11
|
import { sqlValueIdentical, compareSqlValuesFast, BINARY_COLLATION } from '../../util/comparison.js';
|
|
12
12
|
import { uniqueEnforcementComparators } from '../../schema/unique-enforcement.js';
|
|
13
|
-
import {
|
|
13
|
+
import { buildCellCoercion } from '../../types/validation.js';
|
|
14
14
|
import { withAsyncRowContext } from '../context-helpers.js';
|
|
15
15
|
import { REPR_STRICT } from '../strict-flags.js';
|
|
16
16
|
import { assertRowConforms } from '../strict-representation.js';
|
|
@@ -279,7 +279,11 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
279
279
|
for (const attr of plan.contextAttributes) {
|
|
280
280
|
const valueNode = plan.mutationContextValues.get(attr.name);
|
|
281
281
|
if (!valueNode) {
|
|
282
|
-
|
|
282
|
+
// Invariant, not user input: the DML builders fill EVERY declared context
|
|
283
|
+
// slot — the supplied value expression, or a NULL literal when the statement
|
|
284
|
+
// omitted the variable (planner/building/mutation-context.ts). A gap here
|
|
285
|
+
// would silently shift the evaluated context row against contextDescriptor.
|
|
286
|
+
throw new QuereusError(`Internal: no mutation context evaluator for '${attr.name}'`, StatusCode.INTERNAL);
|
|
283
287
|
}
|
|
284
288
|
const instruction = emitCallFromPlan(valueNode, ctx);
|
|
285
289
|
contextEvaluatorInstructions.push(instruction);
|
|
@@ -326,12 +330,14 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
326
330
|
else {
|
|
327
331
|
runtime.assignmentIndices.set(colIndex, evaluatorIndex);
|
|
328
332
|
}
|
|
329
|
-
// Same
|
|
330
|
-
// assignment expression's type
|
|
331
|
-
// Applies to a generated value too — it is
|
|
333
|
+
// Same decision as emitUpdate, from the same helper: convert unless the
|
|
334
|
+
// assignment expression's type IS the column's declared type AND the
|
|
335
|
+
// value already inhabits it. Applies to a generated value too — it is
|
|
336
|
+
// written to the same cell.
|
|
332
337
|
const column = tableSchema.columns[colIndex];
|
|
333
|
-
|
|
334
|
-
|
|
338
|
+
const coerce = buildCellCoercion(valueNode.getType().logicalType, column.logicalType, column.name);
|
|
339
|
+
if (coerce) {
|
|
340
|
+
runtime.assignmentCoercions.set(colIndex, coerce);
|
|
335
341
|
}
|
|
336
342
|
}
|
|
337
343
|
// Keep topological order (drive off the plan's list, not map order).
|
|
@@ -377,11 +383,9 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
377
383
|
notNullDefaults: upsertValidation.notNullDefaults.map((d, i) => ({
|
|
378
384
|
columnIndex: d.columnIndex,
|
|
379
385
|
evaluatorIndex: defaultStart + i,
|
|
380
|
-
// Same
|
|
381
|
-
//
|
|
382
|
-
|
|
383
|
-
? tableSchema.columns[d.columnIndex]
|
|
384
|
-
: undefined,
|
|
386
|
+
// Same decision as everywhere else a DEFAULT is substituted after the
|
|
387
|
+
// emitters' conversion pass — see NotNullDefaultRuntime.coerce.
|
|
388
|
+
coerce: buildCellCoercion(d.defaultNode.getType().logicalType, tableSchema.columns[d.columnIndex].logicalType, tableSchema.columns[d.columnIndex].name),
|
|
385
389
|
})),
|
|
386
390
|
flatDescriptor: upsertValidation.flatRowDescriptor,
|
|
387
391
|
combinedDescriptor: plan.contextDescriptor
|
|
@@ -461,7 +465,7 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
461
465
|
const notNullDefaults = validation.notNullDefaults.map(d => ({
|
|
462
466
|
columnIndex: d.columnIndex,
|
|
463
467
|
evaluator: upsertEvaluators[d.evaluatorIndex],
|
|
464
|
-
|
|
468
|
+
coerce: d.coerce,
|
|
465
469
|
}));
|
|
466
470
|
const useContext = contextRow !== undefined && validation.combinedDescriptor !== undefined;
|
|
467
471
|
const descriptor = useContext ? validation.combinedDescriptor : validation.flatDescriptor;
|
|
@@ -514,12 +518,12 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
514
518
|
return await evaluator(rctx);
|
|
515
519
|
});
|
|
516
520
|
});
|
|
517
|
-
// Convert to the declared column type
|
|
518
|
-
//
|
|
519
|
-
//
|
|
520
|
-
const
|
|
521
|
-
if (
|
|
522
|
-
value =
|
|
521
|
+
// Convert to the declared column type as the assignment requires (see
|
|
522
|
+
// assignmentCoercions) — `existingRow` is a stored row, so the composed
|
|
523
|
+
// updatedRow is then fully declared-form.
|
|
524
|
+
const coerce = clause.assignmentCoercions?.get(colIndex);
|
|
525
|
+
if (coerce) {
|
|
526
|
+
value = coerce(value);
|
|
523
527
|
}
|
|
524
528
|
updatedRow[colIndex] = value;
|
|
525
529
|
}
|
|
@@ -547,9 +551,9 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
547
551
|
await withAsyncRowContext(rctx, clause.generatedRowDescriptor, () => updatedRow, async () => {
|
|
548
552
|
for (const { colIndex, evaluatorIndex } of clause.generatedAssignments) {
|
|
549
553
|
let value = await upsertEvaluators[evaluatorIndex](rctx);
|
|
550
|
-
const
|
|
551
|
-
if (
|
|
552
|
-
value =
|
|
554
|
+
const coerce = clause.assignmentCoercions?.get(colIndex);
|
|
555
|
+
if (coerce) {
|
|
556
|
+
value = coerce(value);
|
|
553
557
|
}
|
|
554
558
|
updatedRow[colIndex] = value;
|
|
555
559
|
}
|
|
@@ -1033,7 +1037,7 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
1033
1037
|
// replaced by key accumulation + one chunked probe per FK at the
|
|
1034
1038
|
// end-of-statement boundary. The plan side made the same gate decision
|
|
1035
1039
|
// and skipped the per-row NOT EXISTS checks.
|
|
1036
|
-
const batchableFks = getBatchableRestrictFks(ctx.db
|
|
1040
|
+
const batchableFks = getBatchableRestrictFks(ctx.db, tableSchema, 'update', plan.onConflict, plan.lensRouted);
|
|
1037
1041
|
const fkRestrictBatch = batchableFks ? createParentRestrictBatch(batchableFks) : undefined;
|
|
1038
1042
|
// Physical Halloween avoidance: unless the target module guarantees per-scan
|
|
1039
1043
|
// snapshot isolation, fully drain the source match set (closing the scan
|
|
@@ -1170,7 +1174,7 @@ export function emitDmlExecutor(plan, ctx) {
|
|
|
1170
1174
|
// Batched parent-side RESTRICT enforcement — see the matching note in
|
|
1171
1175
|
// runUpdate (per-execution state; one chunked probe per FK at the
|
|
1172
1176
|
// end-of-statement boundary when the gate admits the statement).
|
|
1173
|
-
const batchableFks = getBatchableRestrictFks(ctx.db
|
|
1177
|
+
const batchableFks = getBatchableRestrictFks(ctx.db, tableSchema, 'delete', plan.onConflict, plan.lensRouted);
|
|
1174
1178
|
const fkRestrictBatch = batchableFks ? createParentRestrictBatch(batchableFks) : undefined;
|
|
1175
1179
|
// Physical Halloween avoidance — see the matching note in runUpdate. Unless
|
|
1176
1180
|
// the target module guarantees per-scan snapshot isolation, drain the source
|