@quereus/quereus 4.11.0 → 4.12.1
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 +8 -5
- 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.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +5 -3
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/delete.js +1 -1
- 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 +16 -6
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +43 -20
- 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 +20 -28
- package/dist/src/planner/building/insert.js.map +1 -1
- 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 +14 -8
- 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 +59 -24
- 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 +5 -6
- 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 +23 -23
- 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 +69 -3
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +124 -19
- 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 +13 -10
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +45 -17
- 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 +35 -1
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +125 -26
- 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 +74 -19
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +133 -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-schema-manager.d.ts","sourceRoot":"","sources":["../../../src/schema/declared-schema-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"declared-schema-manager.d.ts","sourceRoot":"","sources":["../../../src/schema/declared-schema-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createLogger } from '../common/logger.js';
|
|
2
|
+
import { renderDeclaredSchemaCanonical } from './schema-hasher.js';
|
|
2
3
|
const log = createLogger('schema:declared');
|
|
3
4
|
/**
|
|
4
5
|
* Manages declared schemas and their associated seed data
|
|
@@ -24,13 +25,60 @@ export class DeclaredSchemaManager {
|
|
|
24
25
|
* advisories. Errors never reach here — they throw atomically during deploy.
|
|
25
26
|
*/
|
|
26
27
|
deployedLensReports = new Map();
|
|
28
|
+
/**
|
|
29
|
+
* Memoized `renderDeclaredSchemaCanonical` per lowercased schema name. Paid
|
|
30
|
+
* once per `declare schema`, on the first apply after it — the apply that is
|
|
31
|
+
* going to do real work anyway.
|
|
32
|
+
*/
|
|
33
|
+
declaredRenderings = new Map();
|
|
34
|
+
/** Applied-state snapshots per lowercased schema name; see {@link AppliedSchemaSnapshot}. */
|
|
35
|
+
appliedSnapshots = new Map();
|
|
27
36
|
/**
|
|
28
37
|
* Stores a declared schema
|
|
29
38
|
*/
|
|
30
39
|
setDeclaredSchema(schemaName, declaration) {
|
|
31
40
|
this.declaredSchemas.set(schemaName.toLowerCase(), declaration);
|
|
41
|
+
// Invalidate the memoized rendering — it describes the PREVIOUS declaration.
|
|
42
|
+
//
|
|
43
|
+
// The applied snapshot deliberately SURVIVES a re-declare. It records what
|
|
44
|
+
// both sides rendered to, and the next apply re-renders the new declaration
|
|
45
|
+
// and compares; a re-`declare schema` of byte-identical text therefore still
|
|
46
|
+
// takes the fast path, while any real edit fails the compare. Clearing it
|
|
47
|
+
// here would throw that away for no soundness gain.
|
|
48
|
+
this.declaredRenderings.delete(schemaName.toLowerCase());
|
|
32
49
|
log('Stored declared schema for: %s', schemaName);
|
|
33
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Canonical, **tags-inclusive** rendering of the stored declaration for
|
|
53
|
+
* `schemaName` (memoized), or `undefined` when nothing is declared. This is
|
|
54
|
+
* the declared half of the applied-state snapshot compare — NOT the version
|
|
55
|
+
* hash, which strips tags (see {@link renderDeclaredSchemaCanonical}).
|
|
56
|
+
*/
|
|
57
|
+
getDeclaredRendering(schemaName) {
|
|
58
|
+
const key = schemaName.toLowerCase();
|
|
59
|
+
const cached = this.declaredRenderings.get(key);
|
|
60
|
+
if (cached !== undefined)
|
|
61
|
+
return cached;
|
|
62
|
+
const declaration = this.declaredSchemas.get(key);
|
|
63
|
+
if (!declaration)
|
|
64
|
+
return undefined;
|
|
65
|
+
const rendering = renderDeclaredSchemaCanonical(declaration);
|
|
66
|
+
this.declaredRenderings.set(key, rendering);
|
|
67
|
+
return rendering;
|
|
68
|
+
}
|
|
69
|
+
/** The applied-state snapshot for `schemaName`, or `undefined` if none recorded. */
|
|
70
|
+
getAppliedSnapshot(schemaName) {
|
|
71
|
+
return this.appliedSnapshots.get(schemaName.toLowerCase());
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Records the applied-state snapshot for `schemaName`. Callers must only do
|
|
75
|
+
* this after an apply that both succeeded and produced an empty migration
|
|
76
|
+
* plan — see the write site in `runtime/emit/schema-declarative.ts`.
|
|
77
|
+
*/
|
|
78
|
+
setAppliedSnapshot(schemaName, snapshot) {
|
|
79
|
+
this.appliedSnapshots.set(schemaName.toLowerCase(), snapshot);
|
|
80
|
+
log('Recorded applied-state snapshot for: %s', schemaName);
|
|
81
|
+
}
|
|
34
82
|
/**
|
|
35
83
|
* Retrieves a declared schema
|
|
36
84
|
*/
|
|
@@ -83,6 +131,10 @@ export class DeclaredSchemaManager {
|
|
|
83
131
|
removeDeclaredSchema(schemaName) {
|
|
84
132
|
this.declaredSchemas.delete(schemaName.toLowerCase());
|
|
85
133
|
this.seedData.delete(schemaName.toLowerCase());
|
|
134
|
+
// Both derived caches go with the declaration: with nothing declared there is
|
|
135
|
+
// nothing for a later apply to compare a surviving snapshot against.
|
|
136
|
+
this.declaredRenderings.delete(schemaName.toLowerCase());
|
|
137
|
+
this.appliedSnapshots.delete(schemaName.toLowerCase());
|
|
86
138
|
this.lensDeclarations.delete(schemaName.toLowerCase());
|
|
87
139
|
this.deployedLensSnapshots.delete(schemaName.toLowerCase());
|
|
88
140
|
this.deployedLensReports.delete(schemaName.toLowerCase());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-schema-manager.js","sourceRoot":"","sources":["../../../src/schema/declared-schema-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"declared-schema-manager.js","sourceRoot":"","sources":["../../../src/schema/declared-schema-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type * as AST from '../../parser/ast.js';
|
|
2
|
+
/** One FROM nesting level for a conservative scope walk. */
|
|
3
|
+
export interface ScopeFrame {
|
|
4
|
+
/** Lowercase qualifier names this frame's FROM binds (table names, aliases, CTE names). */
|
|
5
|
+
bound: Set<string>;
|
|
6
|
+
/** Real-table sources, askable via the catalog callback for unqualified capture. */
|
|
7
|
+
realSources: Array<{
|
|
8
|
+
schema: string;
|
|
9
|
+
name: string;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Frame contains sources whose column sets cannot be analyzed
|
|
13
|
+
* (subquery / function / CTE sources), or marks a context that must be
|
|
14
|
+
* treated as categorically unanalysable (CTE / derived-table bodies).
|
|
15
|
+
*/
|
|
16
|
+
hasOpaque: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Marks a subtree whose names resolve in a naming environment this walk does not
|
|
19
|
+
* model at all (view write-through metadata: a result column's `with inverse`
|
|
20
|
+
* clause, a select's trailing `with defaults` clause, both evaluated against the
|
|
21
|
+
* written view row where `new.<output column>` is the naming environment).
|
|
22
|
+
* NOTHING below a sealed frame can reach the seed — not even the `new.` /
|
|
23
|
+
* owning-table spellings that an opaque frame still lets through, since the
|
|
24
|
+
* classifiers check those AFTER the frame loop. Implies {@link hasOpaque}.
|
|
25
|
+
*/
|
|
26
|
+
sealed: boolean;
|
|
27
|
+
/** Lowercase CTE names declared at this level (consulted by nested FROMs). */
|
|
28
|
+
cteNames: Set<string>;
|
|
29
|
+
}
|
|
30
|
+
export declare function emptyScopeFrame(): ScopeFrame;
|
|
31
|
+
/** A frame that binds nothing but blocks every unqualified-capture question. */
|
|
32
|
+
export declare function opaqueScopeFrame(): ScopeFrame;
|
|
33
|
+
/**
|
|
34
|
+
* A frame nothing below can see past — see {@link ScopeFrame.sealed}.
|
|
35
|
+
*
|
|
36
|
+
* NOTE: nothing forces a NEW view write-through clause to be sealed. The two that
|
|
37
|
+
* exist (`with inverse`, `with defaults`) are sealed by hand in `./walk.ts`; a third
|
|
38
|
+
* would default to ordinary scope rules and its `new.<col>` refs would come back
|
|
39
|
+
* `'own'`, inventing a dependency on the table being defined. Unlike the expression
|
|
40
|
+
* node kinds — which the walk spec's `EXPRESSION_KINDS` ledger forces a decision for —
|
|
41
|
+
* "clauses resolved in the written-row environment" is not an enumerable set on the
|
|
42
|
+
* AST. If a third one lands, give it a ledger of its own here.
|
|
43
|
+
*/
|
|
44
|
+
export declare function sealedScopeFrame(): ScopeFrame;
|
|
45
|
+
/**
|
|
46
|
+
* Whether any frame above the seed is sealed. A flat scan of `stack[1..]` rather
|
|
47
|
+
* than a position-relative check, which is correct precisely because a sealed
|
|
48
|
+
* frame blocks UNCONDITIONALLY: it is only ever on the stack while the walk is
|
|
49
|
+
* inside such a subtree.
|
|
50
|
+
*/
|
|
51
|
+
export declare function hasSealedFrame(stack: ReadonlyArray<ScopeFrame>): boolean;
|
|
52
|
+
/** Whether any frame on the stack declares `name` (lowercase) as a CTE. */
|
|
53
|
+
export declare function isCteNameInScope(stack: ReadonlyArray<ScopeFrame>, name: string): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Record one FROM item's bindings into `frame`. A table source whose bare name
|
|
56
|
+
* is a CTE in scope (and carries no schema qualifier) is opaque — its column
|
|
57
|
+
* set is not analyzed; every other table source is a real source the catalog
|
|
58
|
+
* callback can be asked about. Subquery and function sources are opaque.
|
|
59
|
+
*/
|
|
60
|
+
export declare function collectScopeBindings(item: AST.FromClause, defaultSchema: string, stack: ReadonlyArray<ScopeFrame>, frame: ScopeFrame): void;
|
|
61
|
+
/** Build the frame for a select body's FROM list. */
|
|
62
|
+
export declare function buildScopeFrame(from: AST.FromClause[] | undefined, defaultSchema: string, stack: ReadonlyArray<ScopeFrame>): ScopeFrame;
|
|
63
|
+
/** Run `fn` with `frame` pushed on `stack`, popping it after. */
|
|
64
|
+
export declare function withScopeFrame<T>(stack: ScopeFrame[], frame: ScopeFrame, fn: () => T): T;
|
|
65
|
+
//# sourceMappingURL=frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../../../../src/schema/expr-scope/frame.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAchD,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IAC1B,2FAA2F;IAC3F,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACnB,oFAAoF;IACpF,WAAW,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD;;;;OAIG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;;;OAQG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACtB;AAED,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,gFAAgF;AAChF,wBAAgB,gBAAgB,IAAI,UAAU,CAI7C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAI7C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,OAAO,CAKxE;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CACnC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,KAAK,EAAE,UAAU,GACf,IAAI,CAgCN;AAED,qDAAqD;AACrD,wBAAgB,eAAe,CAC9B,IAAI,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,SAAS,EAClC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAC9B,UAAU,CAIZ;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAOxF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export function emptyScopeFrame() {
|
|
2
|
+
return { bound: new Set(), realSources: [], hasOpaque: false, sealed: false, cteNames: new Set() };
|
|
3
|
+
}
|
|
4
|
+
/** A frame that binds nothing but blocks every unqualified-capture question. */
|
|
5
|
+
export function opaqueScopeFrame() {
|
|
6
|
+
const frame = emptyScopeFrame();
|
|
7
|
+
frame.hasOpaque = true;
|
|
8
|
+
return frame;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A frame nothing below can see past — see {@link ScopeFrame.sealed}.
|
|
12
|
+
*
|
|
13
|
+
* NOTE: nothing forces a NEW view write-through clause to be sealed. The two that
|
|
14
|
+
* exist (`with inverse`, `with defaults`) are sealed by hand in `./walk.ts`; a third
|
|
15
|
+
* would default to ordinary scope rules and its `new.<col>` refs would come back
|
|
16
|
+
* `'own'`, inventing a dependency on the table being defined. Unlike the expression
|
|
17
|
+
* node kinds — which the walk spec's `EXPRESSION_KINDS` ledger forces a decision for —
|
|
18
|
+
* "clauses resolved in the written-row environment" is not an enumerable set on the
|
|
19
|
+
* AST. If a third one lands, give it a ledger of its own here.
|
|
20
|
+
*/
|
|
21
|
+
export function sealedScopeFrame() {
|
|
22
|
+
const frame = opaqueScopeFrame();
|
|
23
|
+
frame.sealed = true;
|
|
24
|
+
return frame;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Whether any frame above the seed is sealed. A flat scan of `stack[1..]` rather
|
|
28
|
+
* than a position-relative check, which is correct precisely because a sealed
|
|
29
|
+
* frame blocks UNCONDITIONALLY: it is only ever on the stack while the walk is
|
|
30
|
+
* inside such a subtree.
|
|
31
|
+
*/
|
|
32
|
+
export function hasSealedFrame(stack) {
|
|
33
|
+
for (let i = 1; i < stack.length; i++) {
|
|
34
|
+
if (stack[i].sealed)
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
/** Whether any frame on the stack declares `name` (lowercase) as a CTE. */
|
|
40
|
+
export function isCteNameInScope(stack, name) {
|
|
41
|
+
for (const frame of stack) {
|
|
42
|
+
if (frame.cteNames.has(name))
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Record one FROM item's bindings into `frame`. A table source whose bare name
|
|
49
|
+
* is a CTE in scope (and carries no schema qualifier) is opaque — its column
|
|
50
|
+
* set is not analyzed; every other table source is a real source the catalog
|
|
51
|
+
* callback can be asked about. Subquery and function sources are opaque.
|
|
52
|
+
*/
|
|
53
|
+
export function collectScopeBindings(item, defaultSchema, stack, frame) {
|
|
54
|
+
switch (item.type) {
|
|
55
|
+
case 'table': {
|
|
56
|
+
const ts = item;
|
|
57
|
+
const name = ts.table.name.toLowerCase();
|
|
58
|
+
frame.bound.add(ts.alias ? ts.alias.toLowerCase() : name);
|
|
59
|
+
if (ts.table.schema === undefined && isCteNameInScope(stack, name)) {
|
|
60
|
+
// CTE source — column set not analyzed.
|
|
61
|
+
frame.hasOpaque = true;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
frame.realSources.push({ schema: (ts.table.schema ?? defaultSchema).toLowerCase(), name });
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'join': {
|
|
69
|
+
const join = item;
|
|
70
|
+
collectScopeBindings(join.left, defaultSchema, stack, frame);
|
|
71
|
+
collectScopeBindings(join.right, defaultSchema, stack, frame);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'subquerySource': {
|
|
75
|
+
frame.bound.add(item.alias.toLowerCase());
|
|
76
|
+
frame.hasOpaque = true;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'functionSource': {
|
|
80
|
+
const fs = item;
|
|
81
|
+
if (fs.alias)
|
|
82
|
+
frame.bound.add(fs.alias.toLowerCase());
|
|
83
|
+
frame.hasOpaque = true;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Build the frame for a select body's FROM list. */
|
|
89
|
+
export function buildScopeFrame(from, defaultSchema, stack) {
|
|
90
|
+
const frame = emptyScopeFrame();
|
|
91
|
+
(from ?? []).forEach(item => collectScopeBindings(item, defaultSchema, stack, frame));
|
|
92
|
+
return frame;
|
|
93
|
+
}
|
|
94
|
+
/** Run `fn` with `frame` pushed on `stack`, popping it after. */
|
|
95
|
+
export function withScopeFrame(stack, frame, fn) {
|
|
96
|
+
stack.push(frame);
|
|
97
|
+
try {
|
|
98
|
+
return fn();
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
stack.pop();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.js","sourceRoot":"","sources":["../../../../src/schema/expr-scope/frame.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type * as AST from '../../parser/ast.js';
|
|
2
|
+
import { type ScopeFrame } from './frame.js';
|
|
3
|
+
/** What a scope walk does when it reaches a name-bearing leaf. */
|
|
4
|
+
export interface ScopeWalkHandlers {
|
|
5
|
+
/**
|
|
6
|
+
* Every `column` node reached. `stack[0]` is always the seed frame.
|
|
7
|
+
*
|
|
8
|
+
* The stack is the walk's LIVE array, handed over as a read-only view — it is
|
|
9
|
+
* mutated as the walk unwinds, so a handler must read what it needs during the
|
|
10
|
+
* call and never retain the reference.
|
|
11
|
+
*/
|
|
12
|
+
onColumn(col: AST.ColumnExpr, stack: ReadonlyArray<ScopeFrame>): void;
|
|
13
|
+
/**
|
|
14
|
+
* Every bare `identifier` node reached in expression position. Omit when the
|
|
15
|
+
* analysis has nothing to say about them (the self-qualifier strip). Same
|
|
16
|
+
* do-not-retain rule for `stack` as {@link onColumn}.
|
|
17
|
+
*/
|
|
18
|
+
onIdentifier?(ident: AST.IdentifierExpr, stack: ReadonlyArray<ScopeFrame>): void;
|
|
19
|
+
}
|
|
20
|
+
export interface ScopeWalkOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Lowercase schema an unqualified FROM table source belongs to — the owning
|
|
23
|
+
* object's schema, NOT a search path. `main.t.qty` inside an expression on
|
|
24
|
+
* `temp.t` is not a self-reference, and no resolver lookup happens here.
|
|
25
|
+
*/
|
|
26
|
+
readonly defaultSchema: string;
|
|
27
|
+
/** Lowercase names the implicit seed frame binds (the owning table's name). */
|
|
28
|
+
readonly seedBindings: ReadonlyArray<string>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Walk `root` with the conservative FROM-frame model, invoking `handlers` at
|
|
32
|
+
* every name-bearing leaf. The walk mirrors SQL shadowing rules: a qualifier
|
|
33
|
+
* rebound by an inner FROM is visible to the handler as a binding frame above
|
|
34
|
+
* the seed, and contexts that cannot correlate to the written row (CTE bodies,
|
|
35
|
+
* derived-table bodies, DML statements) sit under an opaque barrier frame.
|
|
36
|
+
*
|
|
37
|
+
* A missing `root` returns without touching the handlers.
|
|
38
|
+
*/
|
|
39
|
+
export declare function walkSchemaExpressionScope(root: AST.AstNode | undefined, options: ScopeWalkOptions, handlers: ScopeWalkHandlers): void;
|
|
40
|
+
//# sourceMappingURL=walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../../../src/schema/expr-scope/walk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAwF,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAmCnI,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACtE;;;;OAIG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC7C;AASD;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,IAAI,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,EAC7B,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,iBAAiB,GACzB,IAAI,CAMN"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import { buildScopeFrame, emptyScopeFrame, opaqueScopeFrame, sealedScopeFrame, withScopeFrame } from './frame.js';
|
|
2
|
+
/**
|
|
3
|
+
* Walk `root` with the conservative FROM-frame model, invoking `handlers` at
|
|
4
|
+
* every name-bearing leaf. The walk mirrors SQL shadowing rules: a qualifier
|
|
5
|
+
* rebound by an inner FROM is visible to the handler as a binding frame above
|
|
6
|
+
* the seed, and contexts that cannot correlate to the written row (CTE bodies,
|
|
7
|
+
* derived-table bodies, DML statements) sit under an opaque barrier frame.
|
|
8
|
+
*
|
|
9
|
+
* A missing `root` returns without touching the handlers.
|
|
10
|
+
*/
|
|
11
|
+
export function walkSchemaExpressionScope(root, options, handlers) {
|
|
12
|
+
if (!root)
|
|
13
|
+
return;
|
|
14
|
+
const state = { options, handlers, stack: [] };
|
|
15
|
+
const seed = emptyScopeFrame();
|
|
16
|
+
for (const name of options.seedBindings)
|
|
17
|
+
seed.bound.add(name);
|
|
18
|
+
withScopeFrame(state.stack, seed, () => visit(root, state));
|
|
19
|
+
}
|
|
20
|
+
/** Visit a node whose scope cannot be analyzed (CTE / derived-table / DML bodies). */
|
|
21
|
+
function visitBarrier(node, state) {
|
|
22
|
+
withScopeFrame(state.stack, opaqueScopeFrame(), () => visit(node, state));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Visit a node whose names resolve in a naming environment this walk does not
|
|
26
|
+
* model at all — view write-through metadata (`with inverse (…)` /
|
|
27
|
+
* `with defaults (…)`), evaluated against the written view row. Stronger than a
|
|
28
|
+
* barrier: not even `new.<col>` may reach the seed from in here.
|
|
29
|
+
*/
|
|
30
|
+
function visitSealed(node, state) {
|
|
31
|
+
withScopeFrame(state.stack, sealedScopeFrame(), () => visit(node, state));
|
|
32
|
+
}
|
|
33
|
+
function visit(node, state) {
|
|
34
|
+
if (!node)
|
|
35
|
+
return;
|
|
36
|
+
switch (node.type) {
|
|
37
|
+
case 'select':
|
|
38
|
+
visitSelect(node, state);
|
|
39
|
+
break;
|
|
40
|
+
case 'insert':
|
|
41
|
+
case 'update':
|
|
42
|
+
case 'delete':
|
|
43
|
+
visitDml(node, state);
|
|
44
|
+
break;
|
|
45
|
+
case 'values': {
|
|
46
|
+
node.values.forEach(row => row.forEach(v => visit(v, state)));
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
case 'join': {
|
|
50
|
+
const join = node;
|
|
51
|
+
visit(join.left, state);
|
|
52
|
+
visit(join.right, state);
|
|
53
|
+
visit(join.condition, state);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
case 'functionSource': {
|
|
57
|
+
node.args.forEach(a => visit(a, state));
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'subquerySource': {
|
|
61
|
+
// A derived table's body cannot correlate to the written row — barrier.
|
|
62
|
+
visitBarrier(node.subquery, state);
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
case 'binary': {
|
|
66
|
+
const e = node;
|
|
67
|
+
visit(e.left, state);
|
|
68
|
+
visit(e.right, state);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
case 'unary':
|
|
72
|
+
case 'cast':
|
|
73
|
+
case 'collate':
|
|
74
|
+
visit(node.expr, state);
|
|
75
|
+
break;
|
|
76
|
+
case 'function':
|
|
77
|
+
node.args.forEach(a => visit(a, state));
|
|
78
|
+
break;
|
|
79
|
+
case 'subquery':
|
|
80
|
+
visit(node.query, state);
|
|
81
|
+
break;
|
|
82
|
+
case 'windowFunction': {
|
|
83
|
+
const wf = node;
|
|
84
|
+
visit(wf.function, state);
|
|
85
|
+
visit(wf.window, state);
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
case 'windowDefinition':
|
|
89
|
+
visitWindowDefinition(node, state);
|
|
90
|
+
break;
|
|
91
|
+
case 'case': {
|
|
92
|
+
const ce = node;
|
|
93
|
+
visit(ce.baseExpr, state);
|
|
94
|
+
ce.whenThenClauses.forEach(wt => {
|
|
95
|
+
visit(wt.when, state);
|
|
96
|
+
visit(wt.then, state);
|
|
97
|
+
});
|
|
98
|
+
visit(ce.elseExpr, state);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case 'in': {
|
|
102
|
+
const ie = node;
|
|
103
|
+
visit(ie.expr, state);
|
|
104
|
+
(ie.values ?? []).forEach(v => visit(v, state));
|
|
105
|
+
visit(ie.subquery, state);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'exists':
|
|
109
|
+
visit(node.subquery, state);
|
|
110
|
+
break;
|
|
111
|
+
case 'between': {
|
|
112
|
+
const be = node;
|
|
113
|
+
visit(be.expr, state);
|
|
114
|
+
visit(be.lower, state);
|
|
115
|
+
visit(be.upper, state);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 'column':
|
|
119
|
+
state.handlers.onColumn(node, state.stack);
|
|
120
|
+
break;
|
|
121
|
+
case 'identifier':
|
|
122
|
+
// Terminal either way — an analysis with nothing to say about bare
|
|
123
|
+
// identifiers (the strip) simply supplies no handler.
|
|
124
|
+
state.handlers.onIdentifier?.(node, state.stack);
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
// Silently ignored, unlike `traverseAst`'s warn: a schema expression
|
|
128
|
+
// legitimately holds `literal` / `parameter` / `table` nodes that carry
|
|
129
|
+
// no name for a handler to see.
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
function visitSelect(stmt, state) {
|
|
134
|
+
const withFrame = emptyScopeFrame();
|
|
135
|
+
withScopeFrame(state.stack, withFrame, () => {
|
|
136
|
+
for (const cte of stmt.withClause?.ctes ?? []) {
|
|
137
|
+
// A CTE body cannot correlate to the written row — no analysis inside.
|
|
138
|
+
// Its name is registered only AFTER its own body is visited, so a
|
|
139
|
+
// non-recursive CTE cannot see itself; swapping the order silently
|
|
140
|
+
// changes which sources `collectScopeBindings` treats as opaque.
|
|
141
|
+
visitBarrier(cte.query, state);
|
|
142
|
+
withFrame.cteNames.add(cte.name.toLowerCase());
|
|
143
|
+
}
|
|
144
|
+
const frame = buildScopeFrame(stmt.from, state.options.defaultSchema, state.stack);
|
|
145
|
+
withScopeFrame(state.stack, frame, () => {
|
|
146
|
+
visitResultColumns(stmt.columns, state);
|
|
147
|
+
// Trailing `with defaults (col = expr, …)` — view write-through metadata,
|
|
148
|
+
// sealed like a result column's `with inverse (…)`. Position in this list is
|
|
149
|
+
// semantically irrelevant (the seal blocks everything); kept next to the
|
|
150
|
+
// result-column visit so the two write-through clauses read together.
|
|
151
|
+
(stmt.defaults ?? []).forEach(d => visitSealed(d.expr, state));
|
|
152
|
+
(stmt.from ?? []).forEach(f => visit(f, state));
|
|
153
|
+
visit(stmt.where, state);
|
|
154
|
+
(stmt.groupBy ?? []).forEach(g => visit(g, state));
|
|
155
|
+
visit(stmt.having, state);
|
|
156
|
+
// NOTE: on a compound these bind to the WHOLE compound, not the leading
|
|
157
|
+
// leg, so visiting them inside the leading leg's FROM frame can let that
|
|
158
|
+
// leg's sources capture a name that should fall through. Left as-is: it is
|
|
159
|
+
// conditional, not wrong for a non-compound select, and untangling it needs
|
|
160
|
+
// the AST to distinguish leg-level from compound-level clauses, which it
|
|
161
|
+
// does not (the parser folds a compound's trailing ORDER BY / LIMIT onto the
|
|
162
|
+
// leading leg — see `parseTrailingOrderLimit`).
|
|
163
|
+
(stmt.orderBy ?? []).forEach(o => visit(o.expr, state));
|
|
164
|
+
visit(stmt.limit, state);
|
|
165
|
+
visit(stmt.offset, state);
|
|
166
|
+
});
|
|
167
|
+
// Each compound leg is a self-contained relation that builds its OWN FROM
|
|
168
|
+
// frame, so the legs are visited outside the leading leg's frame — otherwise a
|
|
169
|
+
// bare name in the second leg could be captured by the first leg's sources and
|
|
170
|
+
// come back `'foreign'`, costing the generated-column analysis a dependency
|
|
171
|
+
// edge. Still inside `withFrame`: a leading `with` clause scopes over the whole
|
|
172
|
+
// compound, a `from` clause does not.
|
|
173
|
+
visit(stmt.union, state);
|
|
174
|
+
if (stmt.compound)
|
|
175
|
+
visit(stmt.compound.select, state);
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Result columns of a select or of a DML `returning` list. A column's
|
|
180
|
+
* `with inverse (col = expr, …)` clause is view write-through metadata — visited
|
|
181
|
+
* under a seal, since it resolves against the written view row.
|
|
182
|
+
*/
|
|
183
|
+
function visitResultColumns(columns, state) {
|
|
184
|
+
(columns ?? []).forEach(c => {
|
|
185
|
+
if (c.type !== 'column')
|
|
186
|
+
return;
|
|
187
|
+
visit(c.expr, state);
|
|
188
|
+
(c.inverse ?? []).forEach(inv => visitSealed(inv.expr, state));
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* DML bodies (reachable via a subquery source / scalar subquery over
|
|
193
|
+
* `insert … returning` etc.) bind names against their target table in ways this
|
|
194
|
+
* walk does not model — everything below descends under one barrier, so refs
|
|
195
|
+
* inside are undecidable rather than falsely attributed to the written row.
|
|
196
|
+
*
|
|
197
|
+
* The barrier makes every leaf here `'unknown'`, which is NOT inert for the
|
|
198
|
+
* generated-column pre-flight: `validateAddColumnGeneratedRefs` (`../table.ts`)
|
|
199
|
+
* treats an `'unknown'` binding of the column being added as a self-cycle, same
|
|
200
|
+
* as an `'own'` one. So `alter table t add column g generated always as (…)`
|
|
201
|
+
* whose body names `g` inside an inner DML's `returning` / upsert / context
|
|
202
|
+
* assignments is a cyclic-dependency error rather than silently accepted — the
|
|
203
|
+
* same answer the emitter's own re-analysis reaches once it sees the reference.
|
|
204
|
+
*/
|
|
205
|
+
function visitDml(stmt, state) {
|
|
206
|
+
withScopeFrame(state.stack, opaqueScopeFrame(), () => {
|
|
207
|
+
// NOTE: a DML-attached CTE's NAME is never registered on a frame (unlike
|
|
208
|
+
// `visitSelect`'s `withFrame`), so a `from <cte>` below reads as an askable
|
|
209
|
+
// real table source of that name. Inert only because the enclosing opaque
|
|
210
|
+
// frame already makes every leaf below undecidable / unstrippable; if the
|
|
211
|
+
// DML barrier is ever narrowed to something less than the whole statement,
|
|
212
|
+
// register the names on a frame here first.
|
|
213
|
+
stmt.withClause?.ctes.forEach(cte => visitBarrier(cte.query, state));
|
|
214
|
+
switch (stmt.type) {
|
|
215
|
+
case 'insert':
|
|
216
|
+
visit(stmt.source, state);
|
|
217
|
+
(stmt.upsertClauses ?? []).forEach(u => {
|
|
218
|
+
(u.assignments ?? []).forEach(a => visit(a.value, state));
|
|
219
|
+
visit(u.where, state);
|
|
220
|
+
});
|
|
221
|
+
break;
|
|
222
|
+
case 'update':
|
|
223
|
+
visit(stmt.targetSource, state);
|
|
224
|
+
stmt.assignments.forEach(a => visit(a.value, state));
|
|
225
|
+
visit(stmt.where, state);
|
|
226
|
+
break;
|
|
227
|
+
case 'delete':
|
|
228
|
+
visit(stmt.targetSource, state);
|
|
229
|
+
visit(stmt.where, state);
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
visitResultColumns(stmt.returning, state);
|
|
233
|
+
(stmt.contextValues ?? []).forEach(cv => visit(cv.value, state));
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function visitWindowDefinition(wd, state) {
|
|
237
|
+
(wd.partitionBy ?? []).forEach(p => visit(p, state));
|
|
238
|
+
(wd.orderBy ?? []).forEach(o => visit(o.expr, state));
|
|
239
|
+
// A frame bound is an ordinary correlated expression, so it belongs in the same
|
|
240
|
+
// frame as `partition by` / `order by` — no barrier and no seal. `WindowFrame`
|
|
241
|
+
// and `WindowFrameBound` do not extend `AstNode` (a frame's `type` is
|
|
242
|
+
// `'rows' | 'range'`, not a node kind), so they cannot go through `visit`'s
|
|
243
|
+
// switch; only the bound kinds that CARRY an expression have a `value`.
|
|
244
|
+
// NOTE: no schema-time analysis of a frame bound is observable today — the planner
|
|
245
|
+
// rejects any bound that is not a constant numeric literal ("Window frame offsets
|
|
246
|
+
// must be constant numeric literals"), so a bound naming a column never executes
|
|
247
|
+
// whether or not an edge was recorded for it. Reaching them is completeness, and
|
|
248
|
+
// the walk-level spec is the only place it can be asserted. If constant-foldable or
|
|
249
|
+
// correlated bounds are ever accepted, that changes and SQL-level cases become
|
|
250
|
+
// writable — the same shape as § 13 of `test/logic/41-generated-column-scope.sqllogic`.
|
|
251
|
+
visitWindowFrameBound(wd.frame?.start, state);
|
|
252
|
+
visitWindowFrameBound(wd.frame?.end ?? undefined, state);
|
|
253
|
+
}
|
|
254
|
+
function visitWindowFrameBound(bound, state) {
|
|
255
|
+
if (!bound)
|
|
256
|
+
return;
|
|
257
|
+
if (bound.type === 'preceding' || bound.type === 'following')
|
|
258
|
+
visit(bound.value, state);
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../../src/schema/expr-scope/walk.ts"],"names":[],"mappings":"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"}
|