@quereus/quereus 4.5.0 → 4.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/src/common/errors.d.ts +17 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +21 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/core/database-assertions.d.ts +4 -3
- package/dist/src/core/database-assertions.d.ts.map +1 -1
- package/dist/src/core/database-assertions.js +44 -14
- package/dist/src/core/database-assertions.js.map +1 -1
- package/dist/src/core/database-events.d.ts +161 -1
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +307 -5
- package/dist/src/core/database-events.js.map +1 -1
- package/dist/src/core/database-internal.d.ts +5 -2
- package/dist/src/core/database-internal.d.ts.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 +33 -4
- package/dist/src/core/database-materialized-views-plan-builders.js.map +1 -1
- package/dist/src/core/database-materialized-views-plans.d.ts +12 -2
- package/dist/src/core/database-materialized-views-plans.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.d.ts +46 -0
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +75 -4
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +9 -0
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +9 -0
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database.d.ts +16 -2
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +56 -15
- 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 +7 -1
- package/dist/src/core/derived-row-validator.js.map +1 -1
- package/dist/src/core/statement.d.ts.map +1 -1
- package/dist/src/core/statement.js +15 -5
- package/dist/src/core/statement.js.map +1 -1
- package/dist/src/emit/ast-stringify.d.ts +18 -2
- package/dist/src/emit/ast-stringify.d.ts.map +1 -1
- package/dist/src/emit/ast-stringify.js +22 -4
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/aggregate.js +11 -11
- 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 +15 -85
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/conversion.d.ts.map +1 -1
- package/dist/src/func/builtins/conversion.js +10 -9
- package/dist/src/func/builtins/conversion.js.map +1 -1
- package/dist/src/func/builtins/datetime.d.ts.map +1 -1
- package/dist/src/func/builtins/datetime.js +28 -10
- 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 +19 -5
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +23 -17
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/mutation.js +2 -2
- package/dist/src/func/builtins/mutation.js.map +1 -1
- package/dist/src/func/builtins/return-types.d.ts +327 -0
- package/dist/src/func/builtins/return-types.d.ts.map +1 -0
- package/dist/src/func/builtins/return-types.js +43 -0
- package/dist/src/func/builtins/return-types.js.map +1 -0
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +150 -79
- 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 +43 -8
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.d.ts.map +1 -1
- package/dist/src/func/builtins/string.js +4 -2
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/builtins/timespan.d.ts +3 -0
- package/dist/src/func/builtins/timespan.d.ts.map +1 -1
- package/dist/src/func/builtins/timespan.js +15 -11
- package/dist/src/func/builtins/timespan.js.map +1 -1
- package/dist/src/func/registration.d.ts +35 -1
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +235 -41
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +14 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +15 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/ast.d.ts +58 -1
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/parser.d.ts +46 -0
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +161 -45
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/utils.d.ts +13 -1
- package/dist/src/parser/utils.d.ts.map +1 -1
- package/dist/src/parser/utils.js +14 -0
- package/dist/src/parser/utils.js.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-classifier.js +7 -2
- package/dist/src/planner/analysis/assertion-classifier.js.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.d.ts.map +1 -1
- package/dist/src/planner/analysis/assertion-hoist-cache.js +5 -0
- package/dist/src/planner/analysis/assertion-hoist-cache.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts +11 -3
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +5 -4
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/check-extraction.d.ts.map +1 -1
- package/dist/src/planner/analysis/check-extraction.js +37 -4
- package/dist/src/planner/analysis/check-extraction.js.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.d.ts +20 -22
- package/dist/src/planner/analysis/comparison-collation.d.ts.map +1 -1
- package/dist/src/planner/analysis/comparison-collation.js +29 -26
- package/dist/src/planner/analysis/comparison-collation.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts +0 -7
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +59 -59
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.d.ts.map +1 -1
- package/dist/src/planner/analysis/coverage-prover.js +13 -5
- package/dist/src/planner/analysis/coverage-prover.js.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts +6 -1
- package/dist/src/planner/analysis/equi-correlation.d.ts.map +1 -1
- package/dist/src/planner/analysis/equi-correlation.js +8 -1
- package/dist/src/planner/analysis/equi-correlation.js.map +1 -1
- package/dist/src/planner/analysis/predicate-dependencies.d.ts +34 -0
- package/dist/src/planner/analysis/predicate-dependencies.d.ts.map +1 -0
- package/dist/src/planner/analysis/predicate-dependencies.js +60 -0
- package/dist/src/planner/analysis/predicate-dependencies.js.map +1 -0
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +0 -26
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +117 -43
- package/dist/src/planner/building/alter-table.js.map +1 -1
- package/dist/src/planner/building/coercion.d.ts +21 -45
- package/dist/src/planner/building/coercion.d.ts.map +1 -1
- package/dist/src/planner/building/coercion.js +42 -91
- package/dist/src/planner/building/coercion.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +9 -5
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/create-assertion.js +72 -1
- package/dist/src/planner/building/create-assertion.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts +6 -1
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +12 -3
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/ddl.d.ts.map +1 -1
- package/dist/src/planner/building/ddl.js +6 -2
- package/dist/src/planner/building/ddl.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +23 -10
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/dml-target.d.ts.map +1 -1
- package/dist/src/planner/building/dml-target.js +4 -0
- package/dist/src/planner/building/dml-target.js.map +1 -1
- package/dist/src/planner/building/drop-assertion.d.ts.map +1 -1
- package/dist/src/planner/building/drop-assertion.js +3 -1
- package/dist/src/planner/building/drop-assertion.js.map +1 -1
- package/dist/src/planner/building/expression.d.ts +17 -0
- package/dist/src/planner/building/expression.d.ts.map +1 -1
- package/dist/src/planner/building/expression.js +28 -17
- package/dist/src/planner/building/expression.js.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.d.ts.map +1 -1
- package/dist/src/planner/building/foreign-key-builder.js +7 -5
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts +35 -0
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +60 -42
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +185 -48
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/materialized-view.d.ts.map +1 -1
- package/dist/src/planner/building/materialized-view.js +3 -1
- package/dist/src/planner/building/materialized-view.js.map +1 -1
- package/dist/src/planner/building/schema-authored-context.d.ts +69 -0
- package/dist/src/planner/building/schema-authored-context.d.ts.map +1 -0
- package/dist/src/planner/building/schema-authored-context.js +75 -0
- package/dist/src/planner/building/schema-authored-context.js.map +1 -0
- package/dist/src/planner/building/schema-resolution.d.ts.map +1 -1
- package/dist/src/planner/building/schema-resolution.js +7 -4
- package/dist/src/planner/building/schema-resolution.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +188 -3
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +449 -65
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-compound.js +2 -2
- package/dist/src/planner/building/select-compound.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +98 -0
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +120 -37
- package/dist/src/planner/building/select-context.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +10 -3
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +29 -8
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +64 -19
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -1
- package/dist/src/planner/building/select-ordinal.js +79 -30
- package/dist/src/planner/building/select-ordinal.js.map +1 -1
- package/dist/src/planner/building/select-projections.d.ts +1 -1
- package/dist/src/planner/building/select-projections.d.ts.map +1 -1
- package/dist/src/planner/building/select-projections.js +18 -11
- package/dist/src/planner/building/select-projections.js.map +1 -1
- package/dist/src/planner/building/select-window.d.ts +13 -3
- package/dist/src/planner/building/select-window.d.ts.map +1 -1
- package/dist/src/planner/building/select-window.js +142 -37
- package/dist/src/planner/building/select-window.js.map +1 -1
- package/dist/src/planner/building/select.d.ts +37 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +240 -109
- 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 +27 -13
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts +1 -1
- package/dist/src/planner/building/view-mutation-builder.d.ts.map +1 -1
- package/dist/src/planner/building/view-mutation-builder.js +102 -8
- package/dist/src/planner/building/view-mutation-builder.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +34 -4
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/cache/correlation-detector.d.ts +15 -0
- package/dist/src/planner/cache/correlation-detector.d.ts.map +1 -1
- package/dist/src/planner/cache/correlation-detector.js +26 -0
- package/dist/src/planner/cache/correlation-detector.js.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.d.ts +7 -0
- package/dist/src/planner/cache/materialization-advisory.d.ts.map +1 -1
- package/dist/src/planner/cache/materialization-advisory.js +12 -3
- package/dist/src/planner/cache/materialization-advisory.js.map +1 -1
- package/dist/src/planner/cost/conjunct-cost.d.ts +40 -0
- package/dist/src/planner/cost/conjunct-cost.d.ts.map +1 -1
- package/dist/src/planner/cost/conjunct-cost.js +45 -0
- package/dist/src/planner/cost/conjunct-cost.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +10 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +15 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/framework/characteristics.d.ts +9 -0
- package/dist/src/planner/framework/characteristics.d.ts.map +1 -1
- package/dist/src/planner/framework/characteristics.js.map +1 -1
- package/dist/src/planner/framework/pass.d.ts +2 -0
- package/dist/src/planner/framework/pass.d.ts.map +1 -1
- package/dist/src/planner/framework/pass.js +15 -0
- package/dist/src/planner/framework/pass.js.map +1 -1
- package/dist/src/planner/mutation/backward-body.d.ts.map +1 -1
- package/dist/src/planner/mutation/backward-body.js +4 -1
- package/dist/src/planner/mutation/backward-body.js.map +1 -1
- package/dist/src/planner/mutation/body-context.d.ts +23 -0
- package/dist/src/planner/mutation/body-context.d.ts.map +1 -0
- package/dist/src/planner/mutation/body-context.js +26 -0
- package/dist/src/planner/mutation/body-context.js.map +1 -0
- package/dist/src/planner/mutation/cte-flatten.js +15 -2
- package/dist/src/planner/mutation/cte-flatten.js.map +1 -1
- package/dist/src/planner/mutation/decomposition.d.ts +8 -0
- package/dist/src/planner/mutation/decomposition.d.ts.map +1 -1
- package/dist/src/planner/mutation/decomposition.js +8 -3
- package/dist/src/planner/mutation/decomposition.js.map +1 -1
- package/dist/src/planner/mutation/lens-enforcement.js +1 -1
- package/dist/src/planner/mutation/multi-source.d.ts +7 -0
- package/dist/src/planner/mutation/multi-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/multi-source.js +5 -0
- package/dist/src/planner/mutation/multi-source.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/mutation/scope-transform.d.ts +32 -0
- package/dist/src/planner/mutation/scope-transform.d.ts.map +1 -1
- package/dist/src/planner/mutation/scope-transform.js +181 -33
- package/dist/src/planner/mutation/scope-transform.js.map +1 -1
- package/dist/src/planner/mutation/set-op.d.ts.map +1 -1
- package/dist/src/planner/mutation/set-op.js +66 -16
- package/dist/src/planner/mutation/set-op.js.map +1 -1
- package/dist/src/planner/mutation/single-source.d.ts.map +1 -1
- package/dist/src/planner/mutation/single-source.js +100 -24
- package/dist/src/planner/mutation/single-source.js.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts +15 -1
- package/dist/src/planner/nodes/add-constraint-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/add-constraint-node.js +10 -1
- package/dist/src/planner/nodes/add-constraint-node.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.d.ts +15 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +32 -17
- package/dist/src/planner/nodes/aggregate-node.js.map +1 -1
- package/dist/src/planner/nodes/alias-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alias-node.js +2 -1
- package/dist/src/planner/nodes/alias-node.js.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.d.ts +51 -10
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/alter-table-node.js +49 -2
- package/dist/src/planner/nodes/alter-table-node.js.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asof-scan-node.js +4 -1
- package/dist/src/planner/nodes/asof-scan-node.js.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/asserted-keys-node.js +2 -1
- package/dist/src/planner/nodes/asserted-keys-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 +8 -3
- package/dist/src/planner/nodes/bloom-join-node.js.map +1 -1
- package/dist/src/planner/nodes/cache-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cache-node.js +2 -1
- package/dist/src/planner/nodes/cache-node.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +17 -19
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/create-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/create-assertion-node.js +5 -2
- package/dist/src/planner/nodes/create-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts +19 -9
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +25 -9
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/delete-node.d.ts +20 -2
- package/dist/src/planner/nodes/delete-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/delete-node.js +11 -2
- package/dist/src/planner/nodes/delete-node.js.map +1 -1
- package/dist/src/planner/nodes/distinct-node.d.ts +6 -0
- package/dist/src/planner/nodes/distinct-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/distinct-node.js +10 -2
- package/dist/src/planner/nodes/distinct-node.js.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts +58 -1
- package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/dml-executor-node.js +107 -15
- package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts +2 -1
- package/dist/src/planner/nodes/drop-assertion-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/drop-assertion-node.js +5 -2
- package/dist/src/planner/nodes/drop-assertion-node.js.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js +2 -1
- package/dist/src/planner/nodes/eager-prefetch-node.js.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts +5 -0
- package/dist/src/planner/nodes/fanout-lookup-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/fanout-lookup-join-node.js +13 -6
- package/dist/src/planner/nodes/fanout-lookup-join-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +18 -5
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +1 -0
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +21 -16
- package/dist/src/planner/nodes/hash-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.d.ts +19 -2
- package/dist/src/planner/nodes/insert-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +10 -2
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/join-node.d.ts +20 -1
- package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-node.js +30 -9
- package/dist/src/planner/nodes/join-node.js.map +1 -1
- package/dist/src/planner/nodes/join-utils.d.ts +21 -0
- package/dist/src/planner/nodes/join-utils.d.ts.map +1 -1
- package/dist/src/planner/nodes/join-utils.js +26 -0
- package/dist/src/planner/nodes/join-utils.js.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts +42 -10
- package/dist/src/planner/nodes/key-set-semi-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.js +90 -17
- package/dist/src/planner/nodes/key-set-semi-join-node.js.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts +5 -0
- package/dist/src/planner/nodes/lens-auxiliary-access-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js +2 -1
- package/dist/src/planner/nodes/lens-auxiliary-access-node.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts +6 -0
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +10 -2
- package/dist/src/planner/nodes/limit-offset.js.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/merge-join-node.js +8 -3
- package/dist/src/planner/nodes/merge-join-node.js.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts +5 -0
- package/dist/src/planner/nodes/ordinal-slice-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/ordinal-slice-node.js +9 -2
- package/dist/src/planner/nodes/ordinal-slice-node.js.map +1 -1
- package/dist/src/planner/nodes/plan-node.d.ts +29 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/plan-node.js +12 -0
- package/dist/src/planner/nodes/plan-node.js.map +1 -1
- package/dist/src/planner/nodes/project-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/project-node.js +18 -36
- package/dist/src/planner/nodes/project-node.js.map +1 -1
- package/dist/src/planner/nodes/reference.d.ts.map +1 -1
- package/dist/src/planner/nodes/reference.js +3 -2
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.d.ts +16 -2
- package/dist/src/planner/nodes/retrieve-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +10 -2
- package/dist/src/planner/nodes/retrieve-node.js.map +1 -1
- package/dist/src/planner/nodes/returning-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/returning-node.js +13 -32
- package/dist/src/planner/nodes/returning-node.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +5 -18
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/sort.d.ts.map +1 -1
- package/dist/src/planner/nodes/sort.js +3 -1
- package/dist/src/planner/nodes/sort.js.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.d.ts +1 -0
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +22 -20
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts +89 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +69 -2
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/nodes/update-node.d.ts +19 -2
- package/dist/src/planner/nodes/update-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/update-node.js +10 -2
- package/dist/src/planner/nodes/update-node.js.map +1 -1
- package/dist/src/planner/nodes/window-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-function.js +8 -0
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/nodes/window-node.d.ts +1 -1
- package/dist/src/planner/nodes/window-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/window-node.js +3 -1
- package/dist/src/planner/nodes/window-node.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts +27 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +130 -10
- package/dist/src/planner/optimizer.js.map +1 -1
- package/dist/src/planner/planning-context.d.ts +24 -0
- package/dist/src/planner/planning-context.d.ts.map +1 -1
- package/dist/src/planner/planning-context.js.map +1 -1
- package/dist/src/planner/rules/access/rule-key-set-seek.d.ts +78 -20
- 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 +296 -135
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js +2 -2
- package/dist/src/planner/rules/access/rule-monotonic-range-access.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +30 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +70 -5
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts +7 -4
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.d.ts.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js +39 -5
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-cte-optimization.js +15 -2
- package/dist/src/planner/rules/cache/rule-cte-optimization.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js +10 -3
- package/dist/src/planner/rules/cache/rule-materialized-view-rewrite.js.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts.map +1 -1
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js +6 -4
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts +5 -31
- package/dist/src/planner/rules/join/equi-pair-extractor.d.ts.map +1 -1
- package/dist/src/planner/rules/join/equi-pair-extractor.js +4 -44
- package/dist/src/planner/rules/join/equi-pair-extractor.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts +49 -0
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -0
- package/dist/src/planner/rules/join/index-nested-loop.js +291 -0
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +8 -8
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts +4 -0
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js +50 -15
- package/dist/src/planner/rules/join/rule-fanout-lookup-join.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts +6 -0
- package/dist/src/planner/rules/join/rule-join-elimination.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-elimination.js +25 -9
- package/dist/src/planner/rules/join/rule-join-elimination.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts +7 -0
- package/dist/src/planner/rules/join/rule-join-key-inference.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-key-inference.js +23 -11
- package/dist/src/planner/rules/join/rule-join-key-inference.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +10 -4
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.js +115 -29
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts +2 -0
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +18 -4
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts +2 -2
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js +19 -22
- package/dist/src/planner/rules/predicate/rule-aggregate-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts +21 -8
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js +70 -14
- package/dist/src/planner/rules/predicate/rule-filter-conjunct-ordering.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts +56 -17
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js +103 -154
- package/dist/src/planner/rules/predicate/rule-filter-selectivity.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts +76 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.d.ts.map +1 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js +208 -0
- package/dist/src/planner/rules/predicate/rule-join-predicate-pushdown.js.map +1 -0
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts +14 -11
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js +21 -85
- package/dist/src/planner/rules/predicate/rule-predicate-inference-equivalence.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts +7 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js +18 -22
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +52 -0
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -0
- package/dist/src/planner/rules/shared/access-leaf.js +95 -0
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -0
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js +17 -7
- package/dist/src/planner/rules/subquery/rule-anti-join-fk-empty.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts +3 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js +26 -9
- package/dist/src/planner/rules/subquery/rule-semi-join-fk-trivial.js.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.d.ts.map +1 -1
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js +69 -11
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts +17 -7
- package/dist/src/planner/rules/window/rule-monotonic-window.d.ts.map +1 -1
- package/dist/src/planner/rules/window/rule-monotonic-window.js +124 -87
- package/dist/src/planner/rules/window/rule-monotonic-window.js.map +1 -1
- package/dist/src/planner/scopes/aliased.d.ts.map +1 -1
- package/dist/src/planner/scopes/aliased.js +6 -0
- package/dist/src/planner/scopes/aliased.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts +44 -13
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +137 -61
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/stats/conjunct-selectivity.d.ts +48 -0
- package/dist/src/planner/stats/conjunct-selectivity.d.ts.map +1 -0
- package/dist/src/planner/stats/conjunct-selectivity.js +168 -0
- package/dist/src/planner/stats/conjunct-selectivity.js.map +1 -0
- package/dist/src/planner/stats/index.d.ts +22 -3
- package/dist/src/planner/stats/index.d.ts.map +1 -1
- package/dist/src/planner/stats/index.js.map +1 -1
- package/dist/src/planner/stats/table-cardinality.d.ts +28 -0
- package/dist/src/planner/stats/table-cardinality.d.ts.map +1 -0
- package/dist/src/planner/stats/table-cardinality.js +29 -0
- package/dist/src/planner/stats/table-cardinality.js.map +1 -0
- package/dist/src/planner/stored-body-context.d.ts +57 -0
- package/dist/src/planner/stored-body-context.d.ts.map +1 -0
- package/dist/src/planner/stored-body-context.js +64 -0
- package/dist/src/planner/stored-body-context.js.map +1 -0
- package/dist/src/planner/util/column-origins.d.ts +29 -8
- package/dist/src/planner/util/column-origins.d.ts.map +1 -1
- package/dist/src/planner/util/column-origins.js +74 -14
- package/dist/src/planner/util/column-origins.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts +32 -8
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +46 -9
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/planner/util/ind-utils.d.ts +66 -19
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +91 -21
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +36 -3
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +57 -7
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/output-names.d.ts +12 -0
- package/dist/src/planner/util/output-names.d.ts.map +1 -0
- package/dist/src/planner/util/output-names.js +20 -0
- package/dist/src/planner/util/output-names.js.map +1 -0
- package/dist/src/planner/util/row-estimates.d.ts +39 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -0
- package/dist/src/planner/util/row-estimates.js +68 -0
- package/dist/src/planner/util/row-estimates.js.map +1 -0
- package/dist/src/planner/util/row-population.d.ts +42 -0
- package/dist/src/planner/util/row-population.d.ts.map +1 -0
- package/dist/src/planner/util/row-population.js +71 -0
- package/dist/src/planner/util/row-population.js.map +1 -0
- package/dist/src/runtime/deferred-constraint-queue.d.ts.map +1 -1
- package/dist/src/runtime/deferred-constraint-queue.js +3 -2
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +60 -6
- package/dist/src/runtime/emit/add-constraint.js.map +1 -1
- package/dist/src/runtime/emit/aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/aggregate.js +4 -4
- package/dist/src/runtime/emit/aggregate.js.map +1 -1
- package/dist/src/runtime/emit/alter-schema-event.d.ts +97 -0
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -0
- package/dist/src/runtime/emit/alter-schema-event.js +87 -0
- package/dist/src/runtime/emit/alter-schema-event.js.map +1 -0
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +582 -236
- 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 +50 -7
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts +37 -0
- package/dist/src/runtime/emit/assertion-drop-guard.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js +59 -0
- package/dist/src/runtime/emit/assertion-drop-guard.js.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts +33 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.d.ts.map +1 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js +124 -0
- package/dist/src/runtime/emit/assertion-rename-helpers.js.map +1 -0
- package/dist/src/runtime/emit/cast.d.ts.map +1 -1
- package/dist/src/runtime/emit/cast.js +4 -19
- package/dist/src/runtime/emit/cast.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +10 -227
- 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 +31 -14
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/cte.js +11 -6
- package/dist/src/runtime/emit/cte.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +233 -28
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/drop-assertion.js +8 -8
- package/dist/src/runtime/emit/drop-assertion.js.map +1 -1
- package/dist/src/runtime/emit/drop-column-guards.d.ts +151 -0
- package/dist/src/runtime/emit/drop-column-guards.d.ts.map +1 -0
- package/dist/src/runtime/emit/drop-column-guards.js +230 -0
- package/dist/src/runtime/emit/drop-column-guards.js.map +1 -0
- package/dist/src/runtime/emit/drop-index.d.ts.map +1 -1
- package/dist/src/runtime/emit/drop-index.js +4 -3
- 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 +6 -0
- 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 +4 -0
- package/dist/src/runtime/emit/drop-view.js.map +1 -1
- package/dist/src/runtime/emit/hash-aggregate.d.ts.map +1 -1
- package/dist/src/runtime/emit/hash-aggregate.js +2 -2
- package/dist/src/runtime/emit/hash-aggregate.js.map +1 -1
- package/dist/src/runtime/emit/join.d.ts.map +1 -1
- package/dist/src/runtime/emit/join.js +8 -67
- package/dist/src/runtime/emit/join.js.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/key-set-semi-join.js +11 -3
- package/dist/src/runtime/emit/key-set-semi-join.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +4 -4
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +34 -22
- package/dist/src/runtime/emit/materialized-view-helpers.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view.js +7 -2
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/operand-comparator.d.ts +30 -0
- package/dist/src/runtime/emit/operand-comparator.d.ts.map +1 -1
- package/dist/src/runtime/emit/operand-comparator.js +34 -0
- package/dist/src/runtime/emit/operand-comparator.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +4 -5
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.d.ts.map +1 -1
- package/dist/src/runtime/emit/schema-declarative.js +30 -0
- package/dist/src/runtime/emit/schema-declarative.js.map +1 -1
- package/dist/src/runtime/emit/subquery.d.ts.map +1 -1
- package/dist/src/runtime/emit/subquery.js +153 -52
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +18 -6
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/emit/window.js +36 -23
- package/dist/src/runtime/emit/window.js.map +1 -1
- package/dist/src/runtime/row-constraints.d.ts +85 -0
- package/dist/src/runtime/row-constraints.d.ts.map +1 -0
- package/dist/src/runtime/row-constraints.js +239 -0
- package/dist/src/runtime/row-constraints.js.map +1 -0
- package/dist/src/runtime/types.d.ts +8 -11
- package/dist/src/runtime/types.d.ts.map +1 -1
- package/dist/src/runtime/types.js.map +1 -1
- package/dist/src/schema/assertion.d.ts +14 -1
- package/dist/src/schema/assertion.d.ts.map +1 -1
- package/dist/src/schema/assertion.js +14 -1
- package/dist/src/schema/assertion.js.map +1 -1
- package/dist/src/schema/catalog-persistability.d.ts +19 -16
- package/dist/src/schema/catalog-persistability.d.ts.map +1 -1
- package/dist/src/schema/catalog-persistability.js +92 -20
- package/dist/src/schema/catalog-persistability.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +73 -2
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +220 -39
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column-source-resolver.d.ts +18 -0
- package/dist/src/schema/column-source-resolver.d.ts.map +1 -0
- package/dist/src/schema/column-source-resolver.js +22 -0
- package/dist/src/schema/column-source-resolver.js.map +1 -0
- package/dist/src/schema/column.d.ts +26 -3
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/constraint-builder.d.ts.map +1 -1
- package/dist/src/schema/constraint-builder.js +7 -1
- package/dist/src/schema/constraint-builder.js.map +1 -1
- package/dist/src/schema/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +27 -6
- package/dist/src/schema/ddl-generator.js.map +1 -1
- package/dist/src/schema/function.d.ts +32 -1
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +10 -2
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/lens-compiler.d.ts.map +1 -1
- package/dist/src/schema/lens-compiler.js +203 -51
- package/dist/src/schema/lens-compiler.js.map +1 -1
- package/dist/src/schema/lens-prover.d.ts +2 -3
- package/dist/src/schema/lens-prover.d.ts.map +1 -1
- package/dist/src/schema/lens-prover.js +19 -11
- package/dist/src/schema/lens-prover.js.map +1 -1
- package/dist/src/schema/manager.d.ts +115 -20
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +202 -70
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +142 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -1
- package/dist/src/schema/rename-rewriter.js +254 -9
- package/dist/src/schema/rename-rewriter.js.map +1 -1
- package/dist/src/schema/reserved-tags.d.ts +1 -1
- package/dist/src/schema/reserved-tags.d.ts.map +1 -1
- package/dist/src/schema/reserved-tags.js +4 -3
- package/dist/src/schema/reserved-tags.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts +16 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +225 -38
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +149 -1
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +248 -1
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +5 -3
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +5 -3
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/schema/view.d.ts +11 -0
- package/dist/src/schema/view.d.ts.map +1 -1
- package/dist/src/schema/view.js +12 -0
- package/dist/src/schema/view.js.map +1 -1
- package/dist/src/types/builtin-types.d.ts +54 -0
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +123 -34
- package/dist/src/types/builtin-types.js.map +1 -1
- package/dist/src/types/cast-semantics.d.ts +42 -0
- package/dist/src/types/cast-semantics.d.ts.map +1 -1
- package/dist/src/types/cast-semantics.js +64 -0
- package/dist/src/types/cast-semantics.js.map +1 -1
- package/dist/src/types/comparison-coercion.d.ts +101 -0
- package/dist/src/types/comparison-coercion.d.ts.map +1 -0
- package/dist/src/types/comparison-coercion.js +162 -0
- package/dist/src/types/comparison-coercion.js.map +1 -0
- package/dist/src/types/index.d.ts +2 -2
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +2 -2
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/logical-type.d.ts +7 -0
- package/dist/src/types/logical-type.d.ts.map +1 -1
- package/dist/src/types/logical-type.js.map +1 -1
- package/dist/src/types/validation.d.ts +56 -0
- package/dist/src/types/validation.d.ts.map +1 -1
- package/dist/src/types/validation.js +68 -0
- package/dist/src/types/validation.js.map +1 -1
- package/dist/src/util/{working-table-iterable.d.ts → array-row-iterable.d.ts} +6 -6
- package/dist/src/util/array-row-iterable.d.ts.map +1 -0
- package/dist/src/util/{working-table-iterable.js → array-row-iterable.js} +6 -6
- package/dist/src/util/array-row-iterable.js.map +1 -0
- package/dist/src/util/coercion.d.ts +8 -0
- package/dist/src/util/coercion.d.ts.map +1 -1
- package/dist/src/util/coercion.js +8 -0
- package/dist/src/util/coercion.js.map +1 -1
- package/dist/src/util/comparison.d.ts +16 -3
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +21 -5
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/util/key-serializer.d.ts +46 -0
- package/dist/src/util/key-serializer.d.ts.map +1 -1
- package/dist/src/util/key-serializer.js +47 -0
- package/dist/src/util/key-serializer.js.map +1 -1
- package/dist/src/util/value-set.d.ts +21 -0
- package/dist/src/util/value-set.d.ts.map +1 -0
- package/dist/src/util/value-set.js +22 -0
- package/dist/src/util/value-set.js.map +1 -0
- package/dist/src/vtab/capabilities.d.ts +1 -1
- package/dist/src/vtab/events.d.ts +8 -1
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js.map +1 -1
- package/dist/src/vtab/manifest.d.ts +15 -0
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/alter-column.d.ts +147 -0
- package/dist/src/vtab/memory/layer/alter-column.d.ts.map +1 -0
- package/dist/src/vtab/memory/layer/alter-column.js +214 -0
- package/dist/src/vtab/memory/layer/alter-column.js.map +1 -0
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +4 -3
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/interface.d.ts +2 -2
- package/dist/src/vtab/memory/layer/interface.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +176 -25
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +569 -558
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/scan-layer.js +32 -5
- package/dist/src/vtab/memory/layer/scan-layer.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts +101 -15
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +133 -45
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +16 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +64 -3
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +11 -6
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/dist/src/vtab/module.d.ts +77 -23
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +9 -2
- package/dist/src/vtab/table.d.ts.map +1 -1
- package/dist/src/vtab/table.js +1 -1
- package/dist/src/vtab/table.js.map +1 -1
- package/package.json +3 -3
- package/dist/src/util/working-table-iterable.d.ts.map +0 -1
- package/dist/src/util/working-table-iterable.js.map +0 -1
|
@@ -4,19 +4,21 @@ import { StatusCode } from '../../common/types.js';
|
|
|
4
4
|
import { SingleRowNode } from '../nodes/single-row.js';
|
|
5
5
|
import { buildTableReference } from './table.js';
|
|
6
6
|
import { isMaintainedTable } from '../../schema/derivation.js';
|
|
7
|
+
import { isViewSchema } from '../../schema/view.js';
|
|
7
8
|
import { AliasedScope } from '../scopes/aliased.js';
|
|
8
9
|
import { RegisteredScope } from '../scopes/registered.js';
|
|
9
10
|
import { MultiScope } from '../scopes/multi.js';
|
|
10
11
|
import { ShadowScope } from '../scopes/shadow.js';
|
|
12
|
+
import { EmptyScope } from '../scopes/empty.js';
|
|
11
13
|
import { ProjectNode } from '../nodes/project-node.js';
|
|
12
|
-
import { buildExpression } from './expression.js';
|
|
14
|
+
import { buildComparison, buildExpression } from './expression.js';
|
|
13
15
|
import { FilterNode } from '../nodes/filter.js';
|
|
14
16
|
import { buildTableFunctionCall } from './table-function.js';
|
|
15
17
|
import { CTEReferenceNode } from '../nodes/cte-reference-node.js';
|
|
16
18
|
import { JoinNode } from '../nodes/join-node.js';
|
|
17
|
-
import { resolveComparisonCollation, collationConflictError } from '../analysis/comparison-collation.js';
|
|
18
19
|
import { EXISTENCE_FLAG_TYPE } from '../nodes/join-utils.js';
|
|
19
20
|
import { ColumnReferenceNode } from '../nodes/reference.js';
|
|
21
|
+
import { BinaryOpNode } from '../nodes/scalar.js';
|
|
20
22
|
import { TEXT_TYPE } from '../../types/builtin-types.js';
|
|
21
23
|
import { ValuesNode } from '../nodes/values-node.js';
|
|
22
24
|
import { createLogger } from '../../common/logger.js';
|
|
@@ -25,14 +27,15 @@ import { AssertedKeysNode } from '../nodes/asserted-keys-node.js';
|
|
|
25
27
|
import { computeLensAssertedKeyFds } from '../../schema/lens-prover.js';
|
|
26
28
|
import { buildLensAuxiliaryAccessMarker } from './lens-auxiliary-access.js';
|
|
27
29
|
// Import decomposed functionality
|
|
28
|
-
import { buildWithContext } from './select-context.js';
|
|
30
|
+
import { buildWithContext, enterStoredBodyEnv } from './select-context.js';
|
|
31
|
+
import { storedBodyContext } from '../stored-body-context.js';
|
|
29
32
|
import { buildCompoundSelect } from './select-compound.js';
|
|
30
33
|
import { analyzeSelectColumns, buildStarProjections } from './select-projections.js';
|
|
31
|
-
import { buildAggregatePhase, buildFinalAggregateProjections } from './select-aggregates.js';
|
|
34
|
+
import { buildAggregatePhase, buildFinalAggregateProjections, buildGroupedWindowContext } from './select-aggregates.js';
|
|
32
35
|
import { buildWindowPhase } from './select-window.js';
|
|
33
36
|
import { buildFinalProjections, applyDistinct, applyOrderBy, applyLimitOffset, createProjectionOutputScope } from './select-modifiers.js';
|
|
34
37
|
import { SortNode } from '../nodes/sort.js';
|
|
35
|
-
import {
|
|
38
|
+
import { buildOrdinalAwareExpression, buildSelectListEntries } from './select-ordinal.js';
|
|
36
39
|
import { buildInsertStmt } from './insert.js';
|
|
37
40
|
import { buildUpdateStmt } from './update.js';
|
|
38
41
|
import { buildDeleteStmt } from './delete.js';
|
|
@@ -53,12 +56,19 @@ export function buildSelectStmt(ctx, stmt, parentCTEs = new Map(),
|
|
|
53
56
|
* expose only their declared columns.
|
|
54
57
|
*/
|
|
55
58
|
preserveInputColumns = true) {
|
|
56
|
-
//
|
|
59
|
+
// A sub-select copied out of a stored view / MV body by the write-through lowering carries
|
|
60
|
+
// that body's whole naming environment on the AST node (`AST.StoredBodyEnv`, stamped by
|
|
61
|
+
// `mapNestedSelects` in `mutation/scope-transform.ts` from `buildViewMutation`). Re-enter
|
|
62
|
+
// it here — home schema, the body's declared `with schema` path, and the body's own
|
|
63
|
+
// leading `with` clause as this fragment's parent CTE namespace, in that order. A
|
|
64
|
+
// pass-through for every other statement; see `enterStoredBodyEnv`.
|
|
65
|
+
const { ctx: storedCtx, parentCTEs: storedParentCTEs } = enterStoredBodyEnv(ctx, stmt.storedBodyEnv, parentCTEs);
|
|
66
|
+
// A fragment's OWN `with schema` clause outranks the carried path.
|
|
57
67
|
const contextWithSchemaPath = stmt.schemaPath
|
|
58
|
-
? { ...
|
|
59
|
-
:
|
|
68
|
+
? { ...storedCtx, schemaPath: stmt.schemaPath }
|
|
69
|
+
: storedCtx;
|
|
60
70
|
// Phase 0: Handle WITH clause if present
|
|
61
|
-
const { contextWithCTEs, cteNodes } = buildWithContext(contextWithSchemaPath, stmt,
|
|
71
|
+
const { contextWithCTEs, cteNodes } = buildWithContext(contextWithSchemaPath, stmt, storedParentCTEs);
|
|
62
72
|
// Handle compound set operations (UNION / INTERSECT / EXCEPT)
|
|
63
73
|
if (stmt.compound) {
|
|
64
74
|
return buildCompoundSelect(stmt, contextWithCTEs, cteNodes, (ctx, stmt, parentCTEs) => buildSelectStmt(ctx, stmt, parentCTEs));
|
|
@@ -74,6 +84,11 @@ preserveInputColumns = true) {
|
|
|
74
84
|
throw new QuereusError('SELECT with multiple FROM sources (joins) not supported.', StatusCode.UNSUPPORTED, undefined, stmt.from[1].loc?.start.line, stmt.from[1].loc?.start.column);
|
|
75
85
|
}
|
|
76
86
|
// Phase 2: Create the main scope for this SELECT statement
|
|
87
|
+
// NOTE: the `|| ft.scope` fallback only fires for the FROM-less SingleRowNode, which
|
|
88
|
+
// buildFrom never registers. Every scope buildFrom does register is own-only (see
|
|
89
|
+
// registerColumnScope); a node's own `.scope` is the enclosing chain, so if this
|
|
90
|
+
// fallback ever starts firing for a real source it silently reinstates the chaining
|
|
91
|
+
// this ShadowScope exists to replace.
|
|
77
92
|
const columnScopes = fromTables.map(ft => ctx.outputScopes.get(ft) || ft.scope).filter(Boolean);
|
|
78
93
|
const selectScope = new ShadowScope([...columnScopes, contextWithCTEs.scope]);
|
|
79
94
|
let selectContext = { ...contextWithCTEs, scope: selectScope };
|
|
@@ -100,29 +115,53 @@ preserveInputColumns = true) {
|
|
|
100
115
|
// Build projections based on the SELECT list
|
|
101
116
|
const projections = [];
|
|
102
117
|
// Analyze SELECT columns
|
|
103
|
-
const {
|
|
118
|
+
const { projectionsByColumn, aggregates, windowFunctions, hasAggregates: hasAggregatesInSelect, hasWindowFunctions, hasWrappedAggregates } = analyzeSelectColumns(stmt.columns, selectContext, input);
|
|
104
119
|
// `hasAggregates` may grow as buildAggregatePhase collects HAVING-only or
|
|
105
120
|
// ORDER-BY-only aggregates; track it locally so the post-aggregate branch
|
|
106
121
|
// is taken when those promote a non-aggregate query into an aggregate one.
|
|
107
122
|
let hasAggregates = hasAggregatesInSelect;
|
|
108
|
-
//
|
|
123
|
+
// Assemble the projection list in WRITTEN select-list order, expanding each star
|
|
124
|
+
// in place. Output columns follow the order the user wrote them — a star ahead of
|
|
125
|
+
// a named column emits its columns first, behind it emits them last — which is what
|
|
126
|
+
// SQLite/PostgreSQL do, and what the grouped path (`buildFinalAggregateProjections`,
|
|
127
|
+
// which walks `stmt.columns` itself) has always done.
|
|
128
|
+
//
|
|
129
|
+
// Star expansions are also kept keyed by their AST column so the aggregate path can
|
|
130
|
+
// expand each star back to *its own* columns — a select list may hold more than
|
|
131
|
+
// one star (`select a.*, b.* from a join b`).
|
|
132
|
+
const starProjectionsByColumn = new Map();
|
|
109
133
|
for (const column of stmt.columns) {
|
|
110
134
|
if (column.type === 'all') {
|
|
111
|
-
const
|
|
112
|
-
|
|
135
|
+
const expanded = buildStarProjections(column, input, selectScope);
|
|
136
|
+
starProjectionsByColumn.set(column, expanded);
|
|
137
|
+
projections.push(...expanded);
|
|
138
|
+
continue;
|
|
113
139
|
}
|
|
140
|
+
// Non-star column. Aggregate items produced no projection (they are routed
|
|
141
|
+
// into the aggregate phase instead) and are simply absent from the map.
|
|
142
|
+
const columnProjection = projectionsByColumn.get(column);
|
|
143
|
+
if (columnProjection)
|
|
144
|
+
projections.push(columnProjection);
|
|
114
145
|
}
|
|
115
|
-
//
|
|
116
|
-
projections.push(...columnProjections);
|
|
117
|
-
// Build the source-order AST list of SELECT-list output columns (with stars expanded)
|
|
146
|
+
// Build the source-order list of SELECT-list output columns (with stars expanded)
|
|
118
147
|
// for resolving GROUP BY / ORDER BY positional ordinals.
|
|
119
|
-
const
|
|
148
|
+
const selectListEntries = buildSelectListEntries(stmt.columns, input);
|
|
120
149
|
// Process aggregates if present
|
|
121
|
-
const aggregateResult = buildAggregatePhase(input, stmt, selectContext, aggregates, hasAggregates, projections, hasWrappedAggregates,
|
|
150
|
+
const aggregateResult = buildAggregatePhase(input, stmt, selectContext, aggregates, hasAggregates, projections, hasWrappedAggregates, selectListEntries, starProjectionsByColumn);
|
|
122
151
|
input = aggregateResult.output;
|
|
123
152
|
let preAggregateSort = aggregateResult.preAggregateSort;
|
|
124
153
|
let orderByAppliedEarly = false;
|
|
125
154
|
let aggregateProjectionScope;
|
|
155
|
+
// Set when the query is BOTH grouped and windowed: the grouped select-list
|
|
156
|
+
// projection list, to be projected above the window phase's WindowNode.
|
|
157
|
+
let windowSelectProjections;
|
|
158
|
+
// Also set only for a grouped, windowed query: what the aggregate's rows carry,
|
|
159
|
+
// so the window phase can redirect a window specification onto them and reject
|
|
160
|
+
// one that reads anything else.
|
|
161
|
+
let windowGroupedContext;
|
|
162
|
+
// The node whose output attributes ARE this SELECT's result columns, once one
|
|
163
|
+
// exists. A positional ORDER BY binds to its Nth attribute (see applyOrderBy).
|
|
164
|
+
let orderByOutputRelation;
|
|
126
165
|
// Update context if we have aggregates
|
|
127
166
|
if (aggregateResult.aggregateScope) {
|
|
128
167
|
// HAVING-only or ORDER-BY-only aggregates may have promoted this into an
|
|
@@ -144,22 +183,50 @@ preserveInputColumns = true) {
|
|
|
144
183
|
!preAggregateSort &&
|
|
145
184
|
!hasWindowFunctions &&
|
|
146
185
|
stmt.orderBy && stmt.orderBy.length > 0) {
|
|
147
|
-
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, undefined, true,
|
|
186
|
+
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, undefined, true, selectListEntries);
|
|
148
187
|
orderByAppliedEarly = true;
|
|
149
188
|
}
|
|
150
|
-
//
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
189
|
+
// A grouped, windowed query's window specifications and function arguments are
|
|
190
|
+
// built against the aggregate-output scope but fall through to the pre-aggregate
|
|
191
|
+
// select scope for anything the aggregate does not carry. Some of what falls
|
|
192
|
+
// through is a legal grouping key under another spelling and some is a genuinely
|
|
193
|
+
// ungrouped column, so hand the window phase both halves: the maps that redirect
|
|
194
|
+
// the former onto the aggregate's own output columns, and the strict coverage
|
|
195
|
+
// test that rejects the latter at plan time. The aggregate's source relation goes
|
|
196
|
+
// along so both halves can tell which references belong to THIS query — a window
|
|
197
|
+
// specification may contain a subquery, whose own columns and whose correlated
|
|
198
|
+
// references to an enclosing query are neither redirected nor rejected.
|
|
199
|
+
if (hasWindowFunctions &&
|
|
200
|
+
aggregateResult.aggregateNode &&
|
|
201
|
+
aggregateResult.groupByExpressions &&
|
|
202
|
+
aggregateResult.groupByExpressions.length > 0) {
|
|
203
|
+
windowGroupedContext = buildGroupedWindowContext(aggregateResult.groupByExpressions, aggregateResult.aggregateNode.getAttributes(), aggregateResult.aggregateNode.getRelations()[0]);
|
|
204
|
+
}
|
|
205
|
+
// Build final projections if needed. A window function in the select list also
|
|
206
|
+
// forces one: the window phase projects the select list ABOVE its WindowNode, so
|
|
207
|
+
// the grouped select list must be materialized as a projection list here even when
|
|
208
|
+
// the AggregateNode's own output would otherwise have been the result shape.
|
|
209
|
+
if ((aggregateResult.needsFinalProjection || hasWindowFunctions) && aggregateResult.aggregateNode && aggregateResult.groupByExpressions) {
|
|
210
|
+
const finalProjections = buildFinalAggregateProjections(stmt, selectContext, aggregateResult.aggregateScope, aggregateResult.aggregateNode, aggregates, aggregateResult.groupByExpressions, starProjectionsByColumn);
|
|
211
|
+
if (hasWindowFunctions) {
|
|
212
|
+
// Hand the grouped select list to the window phase instead of projecting it
|
|
213
|
+
// here: the WindowNode must sit between the aggregate output and the final
|
|
214
|
+
// projection, so there is exactly ONE projection and it is above the window.
|
|
215
|
+
windowSelectProjections = finalProjections;
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
// When HAVING-only or ORDER-BY-only aggregates were added, don't preserve
|
|
219
|
+
// input columns so they are stripped from the output (they exist only for
|
|
220
|
+
// those clauses).
|
|
221
|
+
const preserveForAggregate = preserveInputColumns &&
|
|
222
|
+
!aggregateResult.hasHavingOnlyAggregates &&
|
|
223
|
+
!aggregateResult.hasOrderByOnlyAggregates;
|
|
224
|
+
input = new ProjectNode(selectScope, input, finalProjections, undefined, undefined, preserveForAggregate);
|
|
225
|
+
// Expose final-projection output column names (including SELECT-list aliases)
|
|
226
|
+
// so subsequent ORDER BY can reference aliases like the non-aggregate path.
|
|
227
|
+
aggregateProjectionScope = createProjectionOutputScope(input);
|
|
228
|
+
orderByOutputRelation = input;
|
|
229
|
+
}
|
|
163
230
|
}
|
|
164
231
|
}
|
|
165
232
|
// Handle window functions if present
|
|
@@ -181,15 +248,14 @@ preserveInputColumns = true) {
|
|
|
181
248
|
if (orderByClause.expr.type === 'column') {
|
|
182
249
|
const orderColumn = orderByClause.expr.name.toLowerCase();
|
|
183
250
|
if (!selectedColumns.has(orderColumn)) {
|
|
184
|
-
// Apply ORDER BY before window projections
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
});
|
|
251
|
+
// Apply ORDER BY before window projections. This sort sits BELOW the
|
|
252
|
+
// window projection, so a positional reference resolves through the
|
|
253
|
+
// select list (no output attributes exist yet to bind to).
|
|
254
|
+
const sortKeys = stmt.orderBy.map(orderBy => ({
|
|
255
|
+
expression: buildOrdinalAwareExpression(selectContext, orderBy.expr, selectListEntries, 'ORDER BY'),
|
|
256
|
+
direction: orderBy.direction,
|
|
257
|
+
nulls: orderBy.nulls
|
|
258
|
+
}));
|
|
193
259
|
input = new SortNode(selectContext.scope, input, sortKeys);
|
|
194
260
|
preWindowSort = true;
|
|
195
261
|
break;
|
|
@@ -197,7 +263,10 @@ preserveInputColumns = true) {
|
|
|
197
263
|
}
|
|
198
264
|
}
|
|
199
265
|
}
|
|
200
|
-
input = buildWindowPhase(input, windowFunctions, selectContext,
|
|
266
|
+
input = buildWindowPhase(input, windowFunctions, selectContext, windowSelectProjections ?? projections, windowGroupedContext);
|
|
267
|
+
// The window phase ends in a ProjectNode over the SELECT list, so that node's
|
|
268
|
+
// attributes are this query's result columns.
|
|
269
|
+
orderByOutputRelation = input;
|
|
201
270
|
// Update context to include window output columns
|
|
202
271
|
const windowOutputScope = new RegisteredScope(selectContext.scope);
|
|
203
272
|
const windowAttributes = input.getAttributes();
|
|
@@ -213,15 +282,24 @@ preserveInputColumns = true) {
|
|
|
213
282
|
preAggregateSort = true;
|
|
214
283
|
}
|
|
215
284
|
}
|
|
216
|
-
// Handle final projections for non-aggregate, non-window cases
|
|
217
|
-
|
|
218
|
-
|
|
285
|
+
// Handle final projections for non-aggregate, non-window cases.
|
|
286
|
+
// A GROUP BY with no aggregate functions anywhere still went through the
|
|
287
|
+
// aggregate phase (which built its own final projection against the
|
|
288
|
+
// AggregateNode output); re-running buildFinalProjections here would emit a
|
|
289
|
+
// second projection whose column references still point at *pre-aggregate*
|
|
290
|
+
// attributes, which the AggregateNode does not output.
|
|
291
|
+
const hasGrouping = Boolean(aggregateResult.aggregateScope);
|
|
292
|
+
if (!hasGrouping && !hasWindowFunctions) {
|
|
293
|
+
const finalResult = buildFinalProjections(input, projections, selectScope, stmt, selectContext, preserveInputColumns, selectListEntries);
|
|
219
294
|
input = finalResult.output;
|
|
220
295
|
selectContext = finalResult.finalContext;
|
|
221
296
|
preAggregateSort = finalResult.preAggregateSort;
|
|
297
|
+
// Either the final ProjectNode, or — for an identity `select *` — the source
|
|
298
|
+
// itself, whose attributes already ARE the select list.
|
|
299
|
+
orderByOutputRelation = finalResult.output;
|
|
222
300
|
// Apply final modifiers with projection scope for column alias resolution
|
|
223
301
|
input = applyDistinct(input, stmt, selectScope);
|
|
224
|
-
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, finalResult.projectionScope, false,
|
|
302
|
+
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, finalResult.projectionScope, false, selectListEntries, orderByOutputRelation);
|
|
225
303
|
input = applyLimitOffset(input, stmt, selectContext, finalResult.projectionScope);
|
|
226
304
|
}
|
|
227
305
|
else {
|
|
@@ -233,7 +311,7 @@ preserveInputColumns = true) {
|
|
|
233
311
|
if (!orderByAppliedEarly) {
|
|
234
312
|
// In the aggregate path, ORDER BY may legally reference aggregates; in the
|
|
235
313
|
// window path it may reference window outputs. Both are now in selectContext.
|
|
236
|
-
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, aggregateProjectionScope, hasAggregates,
|
|
314
|
+
input = applyOrderBy(input, stmt, selectContext, preAggregateSort, aggregateProjectionScope, hasAggregates, selectListEntries, orderByOutputRelation);
|
|
237
315
|
}
|
|
238
316
|
input = applyLimitOffset(input, stmt, selectContext, aggregateProjectionScope);
|
|
239
317
|
}
|
|
@@ -255,9 +333,17 @@ export function buildValuesStmt(ctx, stmt) {
|
|
|
255
333
|
/**
|
|
256
334
|
* Registers each column of a relational node as a symbol in a new scope,
|
|
257
335
|
* wrapped with an AliasedScope for qualified name resolution.
|
|
336
|
+
*
|
|
337
|
+
* The scope is deliberately parented on {@link EmptyScope} — a FROM source's scope
|
|
338
|
+
* holds ONLY its own columns and answers "no" for anything else. The fallback to the
|
|
339
|
+
* enclosing query is composed exactly once by each consumer (`buildSelectStmt`'s
|
|
340
|
+
* `ShadowScope`, `buildJoin`'s ON-condition and LATERAL `ShadowScope`s). Chaining each
|
|
341
|
+
* source scope to the caller's scope instead would make `MultiScope`'s first-match reach
|
|
342
|
+
* the outer scope through peer #1 before peer #2 is ever consulted, so a join's own
|
|
343
|
+
* right-hand source loses name lookup to a same-named enclosing symbol.
|
|
258
344
|
*/
|
|
259
|
-
function registerColumnScope(
|
|
260
|
-
const registered = new RegisteredScope(
|
|
345
|
+
function registerColumnScope(node, scopeName, alias) {
|
|
346
|
+
const registered = new RegisteredScope(EmptyScope.instance);
|
|
261
347
|
const attributes = node.getAttributes();
|
|
262
348
|
node.getType().columns.forEach((c, i) => {
|
|
263
349
|
const attr = attributes[i];
|
|
@@ -286,8 +372,12 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
286
372
|
let columnScope;
|
|
287
373
|
if (fromClause.type === 'table') {
|
|
288
374
|
const tableName = fromClause.table.name.toLowerCase();
|
|
289
|
-
// Check if this is a CTE reference
|
|
290
|
-
|
|
375
|
+
// Check if this is a CTE reference. A schema-qualified name (`main.c`) names a
|
|
376
|
+
// schema object, never a CTE — CTEs live in no schema — so a qualifier sends the
|
|
377
|
+
// name straight to the ordinary view / table resolution below, even when a
|
|
378
|
+
// same-named CTE is in scope. Matches the write path (`resolveCteTarget`) and
|
|
379
|
+
// SQLite / PostgreSQL.
|
|
380
|
+
if (!fromClause.table.schema && cteNodes.has(tableName)) {
|
|
291
381
|
const cteNode = cteNodes.get(tableName);
|
|
292
382
|
// Check if this is an internal recursive CTE reference
|
|
293
383
|
if (CapabilityDetectors.isRecursiveCTERef(cteNode)) {
|
|
@@ -297,7 +387,7 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
297
387
|
internalRefNode = new AliasNode(parentContext.scope, cteNode, fromClause.alias.toLowerCase());
|
|
298
388
|
}
|
|
299
389
|
fromTable = internalRefNode;
|
|
300
|
-
columnScope = registerColumnScope(
|
|
390
|
+
columnScope = registerColumnScope(fromTable, tableName, fromClause.alias?.toLowerCase() ?? tableName);
|
|
301
391
|
}
|
|
302
392
|
else {
|
|
303
393
|
// Regular CTE reference - cache by CTE name + alias to ensure consistent attribute IDs
|
|
@@ -318,33 +408,32 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
318
408
|
const attrs = cteRefNode.getAttributes();
|
|
319
409
|
logger(`Created new CTE reference ${cacheKey}, attrs=[${attrs.map(a => a.id).join(',')}]`);
|
|
320
410
|
}
|
|
321
|
-
columnScope = registerColumnScope(
|
|
411
|
+
columnScope = registerColumnScope(cteRefNode, tableName, fromClause.alias?.toLowerCase() ?? tableName);
|
|
322
412
|
fromTable = cteRefNode;
|
|
323
413
|
}
|
|
324
414
|
}
|
|
325
415
|
else {
|
|
326
|
-
// Check if this is a view
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
// maintained table still gets the stale re-validation guard.
|
|
334
|
-
const pathResolved = parentContext.db.schemaManager.findTable(fromClause.table.name, undefined, parentContext.schemaPath);
|
|
335
|
-
if (isMaintainedTable(pathResolved))
|
|
336
|
-
maintainedTable = pathResolved;
|
|
337
|
-
}
|
|
416
|
+
// Check if this is a view. An unqualified name resolves through the
|
|
417
|
+
// schema search path — one path entry at a time, that schema's tables
|
|
418
|
+
// and views checked together — exactly as `buildTableReference` below
|
|
419
|
+
// resolves a plain table name.
|
|
420
|
+
const resolvedItem = parentContext.db.schemaManager.findSchemaItem(fromClause.table.name, fromClause.table.schema, parentContext.schemaPath);
|
|
421
|
+
const viewSchema = isViewSchema(resolvedItem) ? resolvedItem : undefined;
|
|
422
|
+
const maintainedTable = !isViewSchema(resolvedItem) && isMaintainedTable(resolvedItem) ? resolvedItem : undefined;
|
|
338
423
|
if (viewSchema) {
|
|
339
424
|
// Build the view's body. The body is a QueryExpr — today only
|
|
340
425
|
// SELECT and VALUES bodies plan; DML bodies are rejected at
|
|
341
426
|
// CREATE VIEW plan time so we never get here with one.
|
|
427
|
+
// The body plans under the VIEW's home-schema path (not the
|
|
428
|
+
// caller's) so its unqualified source names resolve next to the
|
|
429
|
+
// view — independent of the reading statement's search path.
|
|
430
|
+
const viewBodyContext = storedBodyContext(parentContext, viewSchema.schemaName);
|
|
342
431
|
let viewSelectNode;
|
|
343
432
|
if (viewSchema.selectAst.type === 'select') {
|
|
344
|
-
viewSelectNode = buildSelectStmt(
|
|
433
|
+
viewSelectNode = buildSelectStmt(viewBodyContext, viewSchema.selectAst);
|
|
345
434
|
}
|
|
346
435
|
else if (viewSchema.selectAst.type === 'values') {
|
|
347
|
-
viewSelectNode = buildValuesStmt(
|
|
436
|
+
viewSelectNode = buildValuesStmt(viewBodyContext, viewSchema.selectAst);
|
|
348
437
|
}
|
|
349
438
|
else {
|
|
350
439
|
throw new QuereusError(`View '${viewSchema.name}' has a ${viewSchema.selectAst.type.toUpperCase()} body, which is not yet supported.`, StatusCode.UNSUPPORTED);
|
|
@@ -397,7 +486,7 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
397
486
|
else {
|
|
398
487
|
fromTable = viewSelectNode;
|
|
399
488
|
}
|
|
400
|
-
columnScope = registerColumnScope(
|
|
489
|
+
columnScope = registerColumnScope(fromTable, fromClause.table.name.toLowerCase(), fromClause.alias?.toLowerCase() ?? fromClause.table.name.toLowerCase());
|
|
401
490
|
}
|
|
402
491
|
else if (maintainedTable) {
|
|
403
492
|
// Maintained table (materialized view): resolves through the ORDINARY
|
|
@@ -409,13 +498,18 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
409
498
|
if (maintainedTable.derivation.stale) {
|
|
410
499
|
// Re-validate the body against current source schemas. An
|
|
411
500
|
// incompatible change (dropped source, dropped column, …) makes
|
|
412
|
-
// the body fail to plan — surface the staleness diagnostic.
|
|
501
|
+
// the body fail to plan — surface the staleness diagnostic. Under the
|
|
502
|
+
// MV's home-schema path, like every other body re-plan: the caller's
|
|
503
|
+
// path would make a perfectly resolvable non-`main` body look
|
|
504
|
+
// incompatibly changed, hiding the materialized rows behind a false
|
|
505
|
+
// staleness error.
|
|
506
|
+
const bodyContext = storedBodyContext(parentContext, maintainedTable.schemaName);
|
|
413
507
|
try {
|
|
414
508
|
if (maintainedTable.derivation.selectAst.type === 'select') {
|
|
415
|
-
buildSelectStmt(
|
|
509
|
+
buildSelectStmt(bodyContext, maintainedTable.derivation.selectAst);
|
|
416
510
|
}
|
|
417
511
|
else if (maintainedTable.derivation.selectAst.type === 'values') {
|
|
418
|
-
buildValuesStmt(
|
|
512
|
+
buildValuesStmt(bodyContext, maintainedTable.derivation.selectAst);
|
|
419
513
|
}
|
|
420
514
|
}
|
|
421
515
|
catch (e) {
|
|
@@ -428,7 +522,7 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
428
522
|
tableNode = new AliasNode(parentContext.scope, tableNode, fromClause.alias.toLowerCase());
|
|
429
523
|
}
|
|
430
524
|
fromTable = tableNode;
|
|
431
|
-
columnScope = registerColumnScope(
|
|
525
|
+
columnScope = registerColumnScope(fromTable, fromClause.table.name.toLowerCase(), fromClause.alias?.toLowerCase() ?? fromClause.table.name.toLowerCase());
|
|
432
526
|
}
|
|
433
527
|
else {
|
|
434
528
|
// Regular table
|
|
@@ -438,7 +532,7 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
438
532
|
tableNode = new AliasNode(parentContext.scope, tableNode, fromClause.alias.toLowerCase());
|
|
439
533
|
}
|
|
440
534
|
fromTable = tableNode;
|
|
441
|
-
columnScope = registerColumnScope(
|
|
535
|
+
columnScope = registerColumnScope(fromTable, fromClause.table.name.toLowerCase(), fromClause.alias?.toLowerCase() ?? fromClause.table.name.toLowerCase());
|
|
442
536
|
}
|
|
443
537
|
}
|
|
444
538
|
}
|
|
@@ -449,7 +543,7 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
449
543
|
funcNode = new AliasNode(parentContext.scope, funcNode, fromClause.alias.toLowerCase());
|
|
450
544
|
}
|
|
451
545
|
fromTable = funcNode;
|
|
452
|
-
columnScope = registerColumnScope(
|
|
546
|
+
columnScope = registerColumnScope(fromTable, '', fromClause.alias?.toLowerCase() ?? fromClause.name.name.toLowerCase());
|
|
453
547
|
}
|
|
454
548
|
else if (fromClause.type === 'subquerySource') {
|
|
455
549
|
// Build the subquery body. SubquerySource now carries any QueryExpr;
|
|
@@ -485,8 +579,9 @@ export function buildFrom(fromClause, parentContext, cteNodes = new Map()) {
|
|
|
485
579
|
fromTable = alias
|
|
486
580
|
? new AliasNode(parentContext.scope, subqueryNode, alias)
|
|
487
581
|
: subqueryNode;
|
|
488
|
-
// Create scope for subquery columns
|
|
489
|
-
|
|
582
|
+
// Create scope for subquery columns. Own-only, parented on EmptyScope, for the
|
|
583
|
+
// same reason as registerColumnScope — see its doc comment.
|
|
584
|
+
const subqueryScope = new RegisteredScope(EmptyScope.instance);
|
|
490
585
|
const subqueryAttributes = fromTable.getAttributes();
|
|
491
586
|
// Use provided column names or infer from subquery
|
|
492
587
|
const columnNames = fromClause.columns || fromTable.getType().columns.map(c => c.name);
|
|
@@ -542,24 +637,24 @@ function buildJoin(joinClause, parentContext, cteNodes) {
|
|
|
542
637
|
}
|
|
543
638
|
// Create a combined scope for the join that includes both left and right columns
|
|
544
639
|
const combinedScope = new MultiScope([leftScope, rightScope]);
|
|
545
|
-
//
|
|
640
|
+
// Context for building the ON condition: the join's own two peers first, then the
|
|
641
|
+
// enclosing query. Both peers are own-only scopes (see registerColumnScope), so
|
|
642
|
+
// neither can answer for the other, and everything they do not own — a correlated
|
|
643
|
+
// outer column, a bind parameter — must still resolve, one level later.
|
|
546
644
|
const joinContext = {
|
|
547
645
|
...parentContext,
|
|
548
|
-
scope: combinedScope
|
|
646
|
+
scope: new ShadowScope([combinedScope, parentContext.scope])
|
|
549
647
|
};
|
|
550
648
|
let condition;
|
|
551
649
|
let usingColumns;
|
|
552
|
-
//
|
|
650
|
+
// ON and USING are mutually exclusive spellings of the same predicate (the parser
|
|
651
|
+
// accepts one or the other), and USING desugars into the ON condition it means.
|
|
553
652
|
if (joinClause.condition) {
|
|
554
653
|
condition = buildExpression(joinContext, joinClause.condition);
|
|
555
654
|
}
|
|
556
|
-
|
|
557
|
-
if (joinClause.columns) {
|
|
655
|
+
else if (joinClause.columns) {
|
|
558
656
|
usingColumns = joinClause.columns;
|
|
559
|
-
|
|
560
|
-
// For now, store the column names and let the emitter handle the condition
|
|
561
|
-
// TODO: This could be improved by synthesizing the equality conditions here
|
|
562
|
-
validateUsingCollations(usingColumns, leftNode, rightNode);
|
|
657
|
+
condition = buildUsingCondition(usingColumns, leftNode.getAttributes(), rightNode.getAttributes(), joinContext.scope);
|
|
563
658
|
}
|
|
564
659
|
// Existence (`exists … as`) flags: mint a stable attribute id per clause (once,
|
|
565
660
|
// here — so it survives `withChildren` rebuilds) and expose each by its `as`
|
|
@@ -587,31 +682,67 @@ function buildJoin(joinClause, parentContext, cteNodes) {
|
|
|
587
682
|
return joinNode;
|
|
588
683
|
}
|
|
589
684
|
/**
|
|
590
|
-
*
|
|
591
|
-
*
|
|
592
|
-
*
|
|
593
|
-
*
|
|
594
|
-
*
|
|
595
|
-
*
|
|
596
|
-
*
|
|
597
|
-
*
|
|
598
|
-
*
|
|
599
|
-
*
|
|
685
|
+
* Desugar `using (c1, c2, …)` into the `on l.c1 = r.c1 and l.c2 = r.c2 …` condition
|
|
686
|
+
* it is defined to mean, so a USING join is *the same plan* an equivalent ON join
|
|
687
|
+
* builds. Each pair goes through `buildComparison` — the same helper `buildExpression`
|
|
688
|
+
* uses for a spelled-out `=` — so everything hanging off a real comparison node
|
|
689
|
+
* applies to USING for free and cannot drift from the ON spelling:
|
|
690
|
+
*
|
|
691
|
+
* - cross-type coercion — a JSON column paired with a TEXT one compares structurally,
|
|
692
|
+
* an INTEGER paired with a TEXT one numerically (ticket
|
|
693
|
+
* `bug-using-join-skips-cross-type-coercion`; before the desugar USING compared
|
|
694
|
+
* raw storage classes and matched nothing).
|
|
695
|
+
* - `BinaryOpNode.generateType`'s collation-lattice validation — a `using (c)` over
|
|
696
|
+
* columns with conflicting explicit/declared collations raises the identical
|
|
697
|
+
* ambiguous-collation error as `l.c = r.c`, at plan time rather than only as the
|
|
698
|
+
* emitter's backstop. Both spellings resolve each pair through the SAME symmetric
|
|
699
|
+
* provenance lattice.
|
|
700
|
+
* - `extractEquiPairs` — hash/merge key selection, collation tagging and the
|
|
701
|
+
* semantic-ordering gate, all off the one extractor.
|
|
702
|
+
*
|
|
703
|
+
* A NATURAL join (not yet parsed) desugars to USING pairs and inherits all of this.
|
|
704
|
+
*
|
|
705
|
+
* Column references are built **from attributes**, not by resolving a synthesized
|
|
706
|
+
* qualified `AST.ColumnExpr` through the join scope: a USING column can be ambiguous
|
|
707
|
+
* by name within one side (`a join b using (k) join c using (k)` — the left side of
|
|
708
|
+
* the second join has two `k` columns). First-match-per-side by name is the pairing
|
|
709
|
+
* rule USING has always used here.
|
|
710
|
+
*
|
|
711
|
+
* NOTE: the nested-loop USING path used to resolve one comparator per column at emit
|
|
712
|
+
* time; it now evaluates a condition sub-program per row pair, like every ON join.
|
|
713
|
+
* Only USING joins that fall back to nested loop (cross-type pairs, existence-flag
|
|
714
|
+
* joins) pay this, and it is not measured. If a USING-heavy workload ever profiles
|
|
715
|
+
* slower, the fix belongs in the shared ON-condition evaluation path — not in a
|
|
716
|
+
* restored USING special case.
|
|
600
717
|
*/
|
|
601
|
-
function
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
718
|
+
export function buildUsingCondition(usingColumns, leftAttrs, rightAttrs, scope) {
|
|
719
|
+
if (usingColumns.length === 0) {
|
|
720
|
+
throw new QuereusError('USING clause requires at least one column', StatusCode.ERROR);
|
|
721
|
+
}
|
|
722
|
+
const conjuncts = usingColumns.map(colName => buildUsingColumnEquality(colName, leftAttrs, rightAttrs, scope));
|
|
723
|
+
return conjuncts.reduce((acc, cur) => new BinaryOpNode(acc.scope, { type: 'binary', operator: 'AND', left: acc.expression, right: cur.expression }, acc, cur));
|
|
724
|
+
}
|
|
725
|
+
/** One USING column's `l.c = r.c` conjunct, built exactly as the ON spelling builds it. */
|
|
726
|
+
function buildUsingColumnEquality(colName, leftAttrs, rightAttrs, scope) {
|
|
727
|
+
const left = buildUsingOperand(colName, leftAttrs, 'left', scope);
|
|
728
|
+
const right = buildUsingOperand(colName, rightAttrs, 'right', scope);
|
|
729
|
+
return buildComparison(scope, { type: 'binary', operator: '=', left: left.expression, right: right.expression }, left, right);
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* One side's operand for a USING column: a reference to the FIRST attribute of that
|
|
733
|
+
* name on that side (see the pairing rule on {@link buildUsingCondition}), qualified
|
|
734
|
+
* by its relation so the synthesized AST reads like the ON spelling.
|
|
735
|
+
*/
|
|
736
|
+
function buildUsingOperand(colName, attrs, side, scope) {
|
|
737
|
+
const lower = colName.toLowerCase();
|
|
738
|
+
const index = attrs.findIndex(a => a.name.toLowerCase() === lower);
|
|
739
|
+
if (index === -1) {
|
|
740
|
+
throw new QuereusError(`USING column not found on ${side} side of join: ${colName}`, StatusCode.ERROR);
|
|
615
741
|
}
|
|
742
|
+
const attr = attrs[index];
|
|
743
|
+
const expr = attr.relationName
|
|
744
|
+
? { type: 'column', name: attr.name, table: attr.relationName }
|
|
745
|
+
: { type: 'column', name: attr.name };
|
|
746
|
+
return new ColumnReferenceNode(scope, expr, attr.type, attr.id, index);
|
|
616
747
|
}
|
|
617
748
|
//# sourceMappingURL=select.js.map
|