@quereus/quereus 4.5.0 → 4.6.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 +4 -3
- package/dist/src/core/database-events.d.ts +99 -1
- package/dist/src/core/database-events.d.ts.map +1 -1
- package/dist/src/core/database-events.js +219 -3
- package/dist/src/core/database-events.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 +29 -2
- package/dist/src/core/database-materialized-views-plan-builders.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 +7 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +20 -5
- package/dist/src/core/database.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/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 +138 -71
- 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 +11 -3
- 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 +11 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -3
- package/dist/src/index.js.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 +160 -44
- package/dist/src/parser/parser.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/building/alter-table.d.ts.map +1 -1
- package/dist/src/planner/building/alter-table.js +65 -27
- 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/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/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +7 -2
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +53 -2
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-context.d.ts +7 -0
- package/dist/src/planner/building/select-context.d.ts.map +1 -1
- package/dist/src/planner/building/select-context.js +10 -40
- package/dist/src/planner/building/select-context.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 +112 -51
- package/dist/src/planner/building/select.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/nodes/aggregate-node.d.ts +6 -0
- package/dist/src/planner/nodes/aggregate-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-node.js +10 -2
- 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 +24 -8
- package/dist/src/planner/nodes/alter-table-node.d.ts.map +1 -1
- 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/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/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 +12 -5
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.d.ts +6 -0
- package/dist/src/planner/nodes/hash-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/hash-aggregate.js +10 -2
- package/dist/src/planner/nodes/hash-aggregate.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.map +1 -1
- package/dist/src/planner/nodes/key-set-semi-join-node.js +5 -1
- 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.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 +24 -0
- package/dist/src/planner/nodes/plan-node.d.ts.map +1 -1
- 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 +2 -1
- 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.map +1 -1
- package/dist/src/planner/nodes/retrieve-node.js +2 -1
- package/dist/src/planner/nodes/retrieve-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 +6 -0
- package/dist/src/planner/nodes/stream-aggregate.d.ts.map +1 -1
- package/dist/src/planner/nodes/stream-aggregate.js +10 -2
- package/dist/src/planner/nodes/stream-aggregate.js.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.d.ts.map +1 -1
- package/dist/src/planner/nodes/table-access-nodes.js +5 -0
- package/dist/src/planner/nodes/table-access-nodes.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 +9 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +77 -6
- package/dist/src/planner/optimizer.js.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 +3 -68
- package/dist/src/planner/rules/access/rule-key-set-seek.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts +19 -0
- package/dist/src/planner/rules/access/rule-select-access-path.d.ts.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +24 -3
- package/dist/src/planner/rules/access/rule-select-access-path.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 +9 -0
- package/dist/src/planner/rules/cache/rule-cte-optimization.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 +285 -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-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 +83 -27
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.js +4 -4
- package/dist/src/planner/rules/join/rule-monotonic-merge-join.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 +42 -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 +84 -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 +73 -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 +205 -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 +7 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +39 -0
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -0
- package/dist/src/planner/rules/shared/access-leaf.js +79 -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 +18 -8
- 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 +27 -10
- 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/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 +56 -17
- package/dist/src/planner/util/ind-utils.d.ts.map +1 -1
- package/dist/src/planner/util/ind-utils.js +82 -21
- package/dist/src/planner/util/ind-utils.js.map +1 -1
- package/dist/src/planner/util/key-utils.d.ts +20 -2
- package/dist/src/planner/util/key-utils.d.ts.map +1 -1
- package/dist/src/planner/util/key-utils.js +37 -3
- package/dist/src/planner/util/key-utils.js.map +1 -1
- package/dist/src/planner/util/row-estimates.d.ts +28 -0
- package/dist/src/planner/util/row-estimates.d.ts.map +1 -0
- package/dist/src/planner/util/row-estimates.js +40 -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/emit/add-constraint.d.ts.map +1 -1
- package/dist/src/runtime/emit/add-constraint.js +39 -1
- 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 +42 -0
- package/dist/src/runtime/emit/alter-schema-event.d.ts.map +1 -0
- package/dist/src/runtime/emit/alter-schema-event.js +28 -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 +380 -154
- 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 +35 -3
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- 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/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +64 -27
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- 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/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 +6 -0
- package/dist/src/runtime/emit/key-set-semi-join.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/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/window.js +36 -23
- package/dist/src/runtime/emit/window.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 +76 -20
- package/dist/src/schema/catalog-persistability.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +67 -2
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +194 -3
- package/dist/src/schema/catalog.js.map +1 -1
- 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/ddl-generator.d.ts.map +1 -1
- package/dist/src/schema/ddl-generator.js +19 -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/manager.d.ts +84 -7
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +153 -53
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +104 -28
- 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/types/builtin-types.d.ts +16 -0
- package/dist/src/types/builtin-types.d.ts.map +1 -1
- package/dist/src/types/builtin-types.js +46 -8
- 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/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 +5 -1
- package/dist/src/vtab/events.d.ts.map +1 -1
- package/dist/src/vtab/events.js.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 +572 -495
- 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.map +1 -1
- package/dist/src/vtab/memory/module.js +2 -1
- 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 +51 -21
- package/dist/src/vtab/module.d.ts.map +1 -1
- package/dist/src/vtab/table.d.ts +1 -1
- package/dist/src/vtab/table.js +1 -1
- package/package.json +3 -3
|
@@ -29,6 +29,19 @@ function _createLoc(startToken, endToken) {
|
|
|
29
29
|
},
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Leading keywords of a `declare schema { … }` item. Items carry no required
|
|
34
|
+
* separator, so these are barred from the bare-alias slot while an item body is
|
|
35
|
+
* parsed (see {@link Parser.withAliasBarrier}). The reserved ones are already safe
|
|
36
|
+
* — they lex to their own TokenType — but listing them keeps the set readable as
|
|
37
|
+
* "the item keywords". `DOMAIN` / `COLLATION` / `IMPORT` are the ignored kinds.
|
|
38
|
+
*/
|
|
39
|
+
const DECLARE_ITEM_KEYWORDS = new Set([
|
|
40
|
+
'TABLE', 'INDEX', 'UNIQUE', 'MATERIALIZED', 'VIEW', 'SEED', 'ASSERTION',
|
|
41
|
+
'DOMAIN', 'COLLATION', 'IMPORT',
|
|
42
|
+
]);
|
|
43
|
+
/** Leading keyword of a `declare lens { … }` override; same separator-less shape. */
|
|
44
|
+
const LENS_OVERRIDE_KEYWORDS = new Set(['VIEW']);
|
|
32
45
|
/**
|
|
33
46
|
* IMPORTANT: Any changes to parsed syntax must also be reflected in the corresponding emitters:
|
|
34
47
|
* - packages/quereus/src/emit/ast-stringify.ts (AST-to-SQL string conversion)
|
|
@@ -43,6 +56,15 @@ export class Parser {
|
|
|
43
56
|
parameterPosition = 1;
|
|
44
57
|
// Track opening parentheses for accurate error locations
|
|
45
58
|
parenStack = [];
|
|
59
|
+
/**
|
|
60
|
+
* Bare (no-`as`) alias barrier. While a declaration-block item body is being
|
|
61
|
+
* parsed, the leading keywords of a *sibling* item must not be absorbed as an
|
|
62
|
+
* implicit alias — block items carry no required separator, so the alias slot
|
|
63
|
+
* and the next item's first token compete for the same position. Scoped by a
|
|
64
|
+
* stack so it never leaks into ordinary statements, and by the paren depth the
|
|
65
|
+
* item started at, since a sibling item cannot begin inside an open `(`.
|
|
66
|
+
*/
|
|
67
|
+
aliasBarriers = [];
|
|
46
68
|
/**
|
|
47
69
|
* Initialize the parser with tokens from a SQL string
|
|
48
70
|
* @param sql SQL string to parse
|
|
@@ -54,6 +76,7 @@ export class Parser {
|
|
|
54
76
|
this.current = 0;
|
|
55
77
|
this.parameterPosition = 1; // Reset parameter counter
|
|
56
78
|
this.parenStack = [];
|
|
79
|
+
this.aliasBarriers = [];
|
|
57
80
|
// Check for errors from lexer
|
|
58
81
|
const errorToken = this.tokens.find(t => t.type === TokenType.ERROR);
|
|
59
82
|
if (errorToken) {
|
|
@@ -881,7 +904,8 @@ export class Parser {
|
|
|
881
904
|
else if (this.checkIdentifierLike([]) &&
|
|
882
905
|
!this.checkNext(1, TokenType.LPAREN) &&
|
|
883
906
|
!this.checkNext(1, TokenType.DOT) &&
|
|
884
|
-
!this.isEndOfClause()
|
|
907
|
+
!this.isEndOfClause() &&
|
|
908
|
+
!this.atAliasBarrier()) {
|
|
885
909
|
const aliasToken = this.advance();
|
|
886
910
|
alias = this.getIdentifierValue(aliasToken);
|
|
887
911
|
}
|
|
@@ -2119,11 +2143,43 @@ export class Parser {
|
|
|
2119
2143
|
if (!this.checkIdentifierLike([]) ||
|
|
2120
2144
|
this.checkNext(1, TokenType.DOT) ||
|
|
2121
2145
|
this.isJoinToken() ||
|
|
2122
|
-
this.isEndOfClause()
|
|
2146
|
+
this.isEndOfClause() ||
|
|
2147
|
+
this.atAliasBarrier()) {
|
|
2123
2148
|
return undefined;
|
|
2124
2149
|
}
|
|
2125
2150
|
return this.advance();
|
|
2126
2151
|
}
|
|
2152
|
+
/**
|
|
2153
|
+
* Runs `parse` with `words` (uppercase lexemes) barred from the bare-alias slot.
|
|
2154
|
+
* See {@link aliasBarriers}; nesting is supported and the barrier always pops.
|
|
2155
|
+
*/
|
|
2156
|
+
withAliasBarrier(words, parse) {
|
|
2157
|
+
this.aliasBarriers.push({ words, parenDepth: this.parenStack.length });
|
|
2158
|
+
try {
|
|
2159
|
+
return parse();
|
|
2160
|
+
}
|
|
2161
|
+
finally {
|
|
2162
|
+
this.aliasBarriers.pop();
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
/**
|
|
2166
|
+
* True when the cursor sits on a bare identifier an active barrier reserves.
|
|
2167
|
+
* Only fires at the paren depth the barrier was pushed at: an alias inside an
|
|
2168
|
+
* open `(` — a subquery source, a scalar subquery — cannot be confused with the
|
|
2169
|
+
* start of a sibling item, so `from t2 materialized` keeps working there.
|
|
2170
|
+
*/
|
|
2171
|
+
atAliasBarrier() {
|
|
2172
|
+
if (this.aliasBarriers.length === 0)
|
|
2173
|
+
return false;
|
|
2174
|
+
const token = this.peek();
|
|
2175
|
+
// A quoted identifier carries `literal`; only bare words are ambiguous, so
|
|
2176
|
+
// `"materialized"` stays usable as an alias.
|
|
2177
|
+
if (token.type !== TokenType.IDENTIFIER || token.literal !== undefined)
|
|
2178
|
+
return false;
|
|
2179
|
+
const upper = token.lexeme.toUpperCase();
|
|
2180
|
+
const depth = this.parenStack.length;
|
|
2181
|
+
return this.aliasBarriers.some(b => b.parenDepth === depth && b.words.has(upper));
|
|
2182
|
+
}
|
|
2127
2183
|
/**
|
|
2128
2184
|
* True when the current token starts a `QueryExpr` (SELECT, VALUES, WITH,
|
|
2129
2185
|
* INSERT, UPDATE, DELETE). Used by callers that have already consumed an
|
|
@@ -2140,6 +2196,9 @@ export class Parser {
|
|
|
2140
2196
|
// NOTE: this is also the stop set for bare (no-`as`) aliases. Any new clause keyword
|
|
2141
2197
|
// that can follow a select item or table source must be added here, or it will be
|
|
2142
2198
|
// swallowed as an alias — unless it lexes to its own TokenType, which keeps it safe.
|
|
2199
|
+
// A keyword that is only reserved *inside* an enclosing block (e.g. `materialized`
|
|
2200
|
+
// between `declare schema` items) does not belong here — that is a different idea,
|
|
2201
|
+
// handled by the scoped {@link atAliasBarrier} check at both bare-alias sites.
|
|
2143
2202
|
isEndOfClause() {
|
|
2144
2203
|
const token = this.peek().type;
|
|
2145
2204
|
return token === TokenType.FROM ||
|
|
@@ -3331,53 +3390,108 @@ export class Parser {
|
|
|
3331
3390
|
while (!this.check(TokenType.RBRACE)) {
|
|
3332
3391
|
if (this.isAtEnd())
|
|
3333
3392
|
break;
|
|
3334
|
-
//
|
|
3335
|
-
if (this.
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
items.push(this.declareIndexItem(false));
|
|
3342
|
-
}
|
|
3343
|
-
else if (this.peekKeyword('UNIQUE')) {
|
|
3344
|
-
this.advance();
|
|
3345
|
-
this.consumeKeyword('INDEX', "Expected 'INDEX' after 'UNIQUE'.");
|
|
3346
|
-
items.push(this.declareIndexItem(true));
|
|
3347
|
-
}
|
|
3348
|
-
else if (this.peekKeyword('MATERIALIZED')) {
|
|
3349
|
-
this.advance();
|
|
3350
|
-
this.consumeKeyword('VIEW', "Expected 'VIEW' after 'MATERIALIZED'.");
|
|
3351
|
-
items.push(this.declareMaterializedViewItem());
|
|
3352
|
-
}
|
|
3353
|
-
else if (this.peekKeyword('VIEW')) {
|
|
3354
|
-
this.advance();
|
|
3355
|
-
items.push(this.declareViewItem());
|
|
3356
|
-
}
|
|
3357
|
-
else if (this.peekKeyword('SEED')) {
|
|
3358
|
-
this.advance();
|
|
3359
|
-
items.push(this.declareSeedItem());
|
|
3360
|
-
}
|
|
3361
|
-
else if (this.peekKeyword('ASSERTION')) {
|
|
3362
|
-
this.advance();
|
|
3363
|
-
items.push(this.declareAssertionItem());
|
|
3364
|
-
}
|
|
3365
|
-
else {
|
|
3366
|
-
// Fallback: ignore unrecognized item (domain, collation, import)
|
|
3367
|
-
const start = this.peek();
|
|
3368
|
-
// consume until semicolon
|
|
3369
|
-
while (!this.isAtEnd() && !this.check(TokenType.SEMICOLON) && !(this.check(TokenType.IDENTIFIER) && this.peek().lexeme === '}')) {
|
|
3370
|
-
this.advance();
|
|
3371
|
-
}
|
|
3372
|
-
const endTok = this.previous();
|
|
3373
|
-
items.push({ type: 'declareIgnored', kind: 'domain', text: this.sourceSlice(start.startOffset, endTok.endOffset) });
|
|
3374
|
-
}
|
|
3393
|
+
// A stray separator is not an item — otherwise it lands as an empty ignored one.
|
|
3394
|
+
if (this.match(TokenType.SEMICOLON))
|
|
3395
|
+
continue;
|
|
3396
|
+
// Items need no separator, so a sibling item's leading keyword sits exactly
|
|
3397
|
+
// where the previous body's bare alias would go. Bar those keywords from the
|
|
3398
|
+
// alias slot for the duration of the item.
|
|
3399
|
+
items.push(this.withAliasBarrier(DECLARE_ITEM_KEYWORDS, () => this.declareBlockItem()));
|
|
3375
3400
|
this.match(TokenType.SEMICOLON);
|
|
3376
3401
|
}
|
|
3377
3402
|
this.consume(TokenType.RBRACE, "Expected '}' to close schema declaration block.");
|
|
3378
3403
|
const endTok = this.previous();
|
|
3379
3404
|
return { type: 'declareSchema', schemaName, version, using, items, ...(isLogical ? { isLogical: true } : {}), loc: _createLoc(startToken, endTok) };
|
|
3380
3405
|
}
|
|
3406
|
+
/** Parses one item of a `declare schema { … }` block, dispatched on its leading keyword. */
|
|
3407
|
+
declareBlockItem() {
|
|
3408
|
+
if (this.peekKeyword('TABLE')) {
|
|
3409
|
+
this.advance();
|
|
3410
|
+
return this.declareTableItem();
|
|
3411
|
+
}
|
|
3412
|
+
if (this.peekKeyword('INDEX')) {
|
|
3413
|
+
this.advance();
|
|
3414
|
+
return this.declareIndexItem(false);
|
|
3415
|
+
}
|
|
3416
|
+
if (this.peekKeyword('UNIQUE')) {
|
|
3417
|
+
this.advance();
|
|
3418
|
+
this.consumeKeyword('INDEX', "Expected 'INDEX' after 'UNIQUE'.");
|
|
3419
|
+
return this.declareIndexItem(true);
|
|
3420
|
+
}
|
|
3421
|
+
if (this.peekKeyword('MATERIALIZED')) {
|
|
3422
|
+
this.advance();
|
|
3423
|
+
this.consumeKeyword('VIEW', "Expected 'VIEW' after 'MATERIALIZED'.");
|
|
3424
|
+
return this.declareMaterializedViewItem();
|
|
3425
|
+
}
|
|
3426
|
+
if (this.peekKeyword('VIEW')) {
|
|
3427
|
+
this.advance();
|
|
3428
|
+
return this.declareViewItem();
|
|
3429
|
+
}
|
|
3430
|
+
if (this.peekKeyword('SEED')) {
|
|
3431
|
+
this.advance();
|
|
3432
|
+
return this.declareSeedItem();
|
|
3433
|
+
}
|
|
3434
|
+
if (this.peekKeyword('ASSERTION')) {
|
|
3435
|
+
this.advance();
|
|
3436
|
+
return this.declareAssertionItem();
|
|
3437
|
+
}
|
|
3438
|
+
return this.declareIgnoredItem();
|
|
3439
|
+
}
|
|
3440
|
+
/**
|
|
3441
|
+
* Fallback for an item kind the parser doesn't model yet (domain, collation, import):
|
|
3442
|
+
* skip its tokens and keep a placeholder so the surrounding block still parses.
|
|
3443
|
+
*
|
|
3444
|
+
* NOTE: an unrecognized item is retained only as opaque text — a typo'd item keyword
|
|
3445
|
+
* is therefore accepted and silently ignored rather than diagnosed. Diagnosing it
|
|
3446
|
+
* needs a real grammar for these kinds, not a tighter skip.
|
|
3447
|
+
*/
|
|
3448
|
+
declareIgnoredItem() {
|
|
3449
|
+
const start = this.peek();
|
|
3450
|
+
this.skipToDeclareItemBoundary();
|
|
3451
|
+
const endTok = this.previous();
|
|
3452
|
+
return { type: 'declareIgnored', kind: 'domain', text: this.sourceSlice(start.startOffset, endTok.endOffset) };
|
|
3453
|
+
}
|
|
3454
|
+
/**
|
|
3455
|
+
* Advances past the current declaration-block item, stopping at nesting depth 0 on
|
|
3456
|
+
* a `;`, the block's closing `}`, or the leading keyword of the next item. Brace and
|
|
3457
|
+
* paren depth is tracked so a braced column list or a parenthesized payload inside
|
|
3458
|
+
* the item doesn't end the scan early.
|
|
3459
|
+
*
|
|
3460
|
+
* NOTE: stopping on an item keyword is a heuristic — these kinds have no grammar
|
|
3461
|
+
* here, so the word `table` inside an unmodeled item would cut the skip short.
|
|
3462
|
+
* Separating the items with `;` is exact; if domain/collation/import ever gain real
|
|
3463
|
+
* bodies, give them a grammar rather than widening this scan.
|
|
3464
|
+
*/
|
|
3465
|
+
skipToDeclareItemBoundary() {
|
|
3466
|
+
// The item's own leading word may itself be an item keyword (`domain`, …), so
|
|
3467
|
+
// always consume one token before testing for the next item's start.
|
|
3468
|
+
this.advance();
|
|
3469
|
+
let depth = 0;
|
|
3470
|
+
while (!this.isAtEnd()) {
|
|
3471
|
+
const type = this.peek().type;
|
|
3472
|
+
if (depth === 0) {
|
|
3473
|
+
if (type === TokenType.SEMICOLON || type === TokenType.RBRACE)
|
|
3474
|
+
return;
|
|
3475
|
+
if (this.atDeclareItemStart())
|
|
3476
|
+
return;
|
|
3477
|
+
}
|
|
3478
|
+
if (type === TokenType.LBRACE || type === TokenType.LPAREN) {
|
|
3479
|
+
depth++;
|
|
3480
|
+
}
|
|
3481
|
+
else if (type === TokenType.RBRACE || type === TokenType.RPAREN) {
|
|
3482
|
+
depth--;
|
|
3483
|
+
}
|
|
3484
|
+
this.advance();
|
|
3485
|
+
}
|
|
3486
|
+
}
|
|
3487
|
+
/** True when the cursor sits on a keyword that can begin a declaration-block item. */
|
|
3488
|
+
atDeclareItemStart() {
|
|
3489
|
+
for (const keyword of DECLARE_ITEM_KEYWORDS) {
|
|
3490
|
+
if (this.peekKeyword(keyword))
|
|
3491
|
+
return true;
|
|
3492
|
+
}
|
|
3493
|
+
return false;
|
|
3494
|
+
}
|
|
3381
3495
|
/**
|
|
3382
3496
|
* Parses `declare lens for <X> over <Y> { ( view <T> as <select> ;? )* }`.
|
|
3383
3497
|
* The DECLARE token is already consumed by {@link statement}. `lens` and `for`
|
|
@@ -3398,7 +3512,9 @@ export class Parser {
|
|
|
3398
3512
|
this.consumeKeyword('VIEW', "Expected 'view' to begin a lens override.");
|
|
3399
3513
|
const table = this.consumeIdentifier(CONTEXTUAL_KEYWORDS, "Expected the logical table name after 'view'.");
|
|
3400
3514
|
this.consumeKeyword('AS', "Expected 'AS' after the logical table name.");
|
|
3401
|
-
|
|
3515
|
+
// Overrides need no separator either; bar `view` from the body's alias slot
|
|
3516
|
+
// (harmless today — `view` is reserved — but the shape is the same hazard).
|
|
3517
|
+
const body = this.withAliasBarrier(LENS_OVERRIDE_KEYWORDS, () => this.parseQueryExpr());
|
|
3402
3518
|
if (body.type !== 'select') {
|
|
3403
3519
|
throw this.error(this.previous(), `A lens override body must be a SELECT; got '${body.type}'.`);
|
|
3404
3520
|
}
|