@quereus/quereus 4.15.2 → 4.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/core/database-auto-analyze.d.ts +258 -0
- package/dist/src/core/database-auto-analyze.d.ts.map +1 -0
- package/dist/src/core/database-auto-analyze.js +616 -0
- package/dist/src/core/database-auto-analyze.js.map +1 -0
- package/dist/src/core/database-materialized-views.d.ts +42 -1
- package/dist/src/core/database-materialized-views.d.ts.map +1 -1
- package/dist/src/core/database-materialized-views.js +76 -3
- package/dist/src/core/database-materialized-views.js.map +1 -1
- package/dist/src/core/database-transaction.d.ts +17 -0
- package/dist/src/core/database-transaction.d.ts.map +1 -1
- package/dist/src/core/database-transaction.js +37 -0
- package/dist/src/core/database-transaction.js.map +1 -1
- package/dist/src/core/database.d.ts +8 -1
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +135 -5
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/planner/analysis/change-scope.d.ts.map +1 -1
- package/dist/src/planner/analysis/change-scope.js +8 -8
- package/dist/src/planner/analysis/change-scope.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +27 -14
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.d.ts.map +1 -1
- package/dist/src/planner/analysis/expression-fingerprint.js +23 -2
- package/dist/src/planner/analysis/expression-fingerprint.js.map +1 -1
- package/dist/src/planner/analysis/mv-body-functions.d.ts +46 -0
- package/dist/src/planner/analysis/mv-body-functions.d.ts.map +1 -0
- package/dist/src/planner/analysis/mv-body-functions.js +65 -0
- package/dist/src/planner/analysis/mv-body-functions.js.map +1 -0
- package/dist/src/planner/analysis/predicate-shape.d.ts +32 -4
- package/dist/src/planner/analysis/predicate-shape.d.ts.map +1 -1
- package/dist/src/planner/analysis/predicate-shape.js +37 -5
- package/dist/src/planner/analysis/predicate-shape.js.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts +2 -2
- package/dist/src/planner/analysis/query-rewrite-matcher.d.ts.map +1 -1
- package/dist/src/planner/analysis/query-rewrite-matcher.js +46 -6
- package/dist/src/planner/analysis/query-rewrite-matcher.js.map +1 -1
- package/dist/src/planner/analysis/sat-checker.js +2 -5
- package/dist/src/planner/analysis/sat-checker.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +17 -5
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +122 -79
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +73 -55
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/cost/index.d.ts +14 -0
- package/dist/src/planner/cost/index.d.ts.map +1 -1
- package/dist/src/planner/cost/index.js +19 -0
- package/dist/src/planner/cost/index.js.map +1 -1
- package/dist/src/planner/nodes/limit-offset.d.ts.map +1 -1
- package/dist/src/planner/nodes/limit-offset.js +3 -2
- package/dist/src/planner/nodes/limit-offset.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 +31 -7
- package/dist/src/planner/nodes/table-access-nodes.js.map +1 -1
- package/dist/src/planner/optimizer-tuning.d.ts +10 -6
- package/dist/src/planner/optimizer-tuning.d.ts.map +1 -1
- package/dist/src/planner/optimizer-tuning.js.map +1 -1
- package/dist/src/planner/optimizer.d.ts.map +1 -1
- package/dist/src/planner/optimizer.js +24 -0
- package/dist/src/planner/optimizer.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 +8 -4
- 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 +14 -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 +5 -1
- 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 +3 -1
- 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 +8 -3
- package/dist/src/planner/rules/aggregate/rule-groupby-fd-simplification.js.map +1 -1
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts +47 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.d.ts.map +1 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js +200 -0
- package/dist/src/planner/rules/aggregate/rule-minmax-index-boundary.js.map +1 -0
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.d.ts +29 -0
- 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 +55 -16
- package/dist/src/planner/rules/cache/rule-nested-loop-right-cache.js.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.d.ts +96 -22
- package/dist/src/planner/rules/join/index-nested-loop.d.ts.map +1 -1
- package/dist/src/planner/rules/join/index-nested-loop.js +401 -82
- package/dist/src/planner/rules/join/index-nested-loop.js.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts +20 -0
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js +23 -4
- package/dist/src/planner/rules/join/rule-fanout-batched-outer.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js +7 -0
- package/dist/src/planner/rules/join/rule-join-greedy-commute.js.map +1 -1
- package/dist/src/planner/rules/join/rule-join-physical-selection.d.ts +19 -2
- 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 +262 -40
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.d.ts.map +1 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js +2 -1
- package/dist/src/planner/rules/predicate/rule-sargable-range-rewrite.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts +21 -0
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +24 -6
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.d.ts +12 -12
- package/dist/src/planner/rules/shared/access-leaf.d.ts.map +1 -1
- package/dist/src/planner/rules/shared/access-leaf.js +3 -14
- package/dist/src/planner/rules/shared/access-leaf.js.map +1 -1
- package/dist/src/planner/stats/analyze.d.ts.map +1 -1
- package/dist/src/planner/stats/analyze.js +9 -3
- package/dist/src/planner/stats/analyze.js.map +1 -1
- package/dist/src/planner/stats/catalog-stats.d.ts.map +1 -1
- package/dist/src/planner/stats/catalog-stats.js +6 -10
- package/dist/src/planner/stats/catalog-stats.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +3 -5
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/planner/util/fd-utils.d.ts.map +1 -1
- package/dist/src/planner/util/fd-utils.js +4 -7
- package/dist/src/planner/util/fd-utils.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +58 -4
- 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 +1 -2
- package/dist/src/runtime/emit/analyze.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +5 -3
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.d.ts.map +1 -1
- package/dist/src/runtime/emit/fanout-lookup-join.js +9 -1
- package/dist/src/runtime/emit/fanout-lookup-join.js.map +1 -1
- package/dist/src/runtime/emit/limit-offset.d.ts.map +1 -1
- package/dist/src/runtime/emit/limit-offset.js +50 -24
- package/dist/src/runtime/emit/limit-offset.js.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts +33 -2
- package/dist/src/runtime/emit/materialized-view-helpers.d.ts.map +1 -1
- package/dist/src/runtime/emit/materialized-view-helpers.js +61 -5
- 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 +6 -1
- package/dist/src/runtime/emit/materialized-view.js.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.d.ts.map +1 -1
- package/dist/src/runtime/emit/ordinal-slice.js +8 -0
- package/dist/src/runtime/emit/ordinal-slice.js.map +1 -1
- package/dist/src/schema/derivation.d.ts +15 -1
- package/dist/src/schema/derivation.d.ts.map +1 -1
- package/dist/src/schema/derivation.js.map +1 -1
- package/dist/src/schema/function.d.ts +9 -4
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js +11 -9
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/schema.d.ts +14 -3
- package/dist/src/schema/schema.d.ts.map +1 -1
- package/dist/src/schema/schema.js +20 -2
- package/dist/src/schema/schema.js.map +1 -1
- package/dist/src/schema/table.d.ts +27 -0
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +55 -0
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/schema/unique-enforcement.d.ts +6 -13
- package/dist/src/schema/unique-enforcement.d.ts.map +1 -1
- package/dist/src/schema/unique-enforcement.js +8 -17
- package/dist/src/schema/unique-enforcement.js.map +1 -1
- package/dist/src/util/comparison.d.ts +19 -0
- package/dist/src/util/comparison.d.ts.map +1 -1
- package/dist/src/util/comparison.js +22 -0
- package/dist/src/util/comparison.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +34 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js +64 -0
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/index-descriptor.d.ts +9 -0
- package/dist/src/vtab/index-descriptor.d.ts.map +1 -1
- package/dist/src/vtab/index-descriptor.js +15 -0
- package/dist/src/vtab/index-descriptor.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +11 -9
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +12 -43
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +18 -0
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +176 -24
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/table.d.ts +27 -3
- package/dist/src/vtab/memory/table.d.ts.map +1 -1
- package/dist/src/vtab/memory/table.js +28 -59
- package/dist/src/vtab/memory/table.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sat-checker.js","sourceRoot":"","sources":["../../../../src/planner/analysis/sat-checker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sat-checker.js","sourceRoot":"","sources":["../../../../src/planner/analysis/sat-checker.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,9 +20,11 @@ export declare function buildAggregatePhase(input: RelationalPlanNode, stmt: AST
|
|
|
20
20
|
groupByExpressions?: ScalarPlanNode[];
|
|
21
21
|
hasHavingOnlyAggregates?: boolean;
|
|
22
22
|
hasOrderByOnlyAggregates?: boolean;
|
|
23
|
-
orderByNeedsPostAggregateSort?: boolean;
|
|
24
23
|
aggregatesContext?: PlanningContext['aggregates'];
|
|
24
|
+
/** Grouping-key rewrite target — set only for a query WITH GROUP BY. */
|
|
25
25
|
groupedRedirectContext?: GroupedRedirectContext;
|
|
26
|
+
/** What an aggregated row carries — set for EVERY aggregate query, grouped or not. */
|
|
27
|
+
groupedCoverageContext?: GroupedRedirectContext;
|
|
26
28
|
};
|
|
27
29
|
/**
|
|
28
30
|
* What a GROUPED query's post-aggregate builders need in order to run their
|
|
@@ -105,14 +107,22 @@ export interface GroupKeyIndex {
|
|
|
105
107
|
*/
|
|
106
108
|
export declare function redirectPostAggregate(expr: ScalarPlanNode, context: GroupedRedirectContext | undefined, scope: Scope): ScalarPlanNode;
|
|
107
109
|
/**
|
|
108
|
-
* Boundary check over
|
|
110
|
+
* Boundary check over an AGGREGATE query's finished plan: no node ABOVE the
|
|
109
111
|
* AggregateNode may reference an aggregate-input attribute id that is absent from
|
|
110
|
-
* the aggregate's output. Called once per
|
|
112
|
+
* the aggregate's output. Called once per aggregate query, from the end of
|
|
111
113
|
* `buildSelectStmt`, walking the operator spine from the query root down to — and
|
|
112
114
|
* stopping at — the AggregateNode itself (whose own input subtree legally reads
|
|
113
115
|
* pre-grouping columns). Each scalar expression hanging off a spine operator gets
|
|
114
116
|
* the subquery-aware per-expression check ({@link assertPostAggregateCoverage}).
|
|
115
117
|
*
|
|
118
|
+
* "Aggregate", not "grouped": a query with no GROUP BY has exactly one implicit group,
|
|
119
|
+
* whose row carries the aggregate results and nothing else, so the same rule applies to
|
|
120
|
+
* everything above it (`having`, `order by` when it is forced above the aggregate,
|
|
121
|
+
* `limit`, `offset`). `context` is therefore built for every aggregate query — see the
|
|
122
|
+
* `groupedCoverageContext` / `groupedRedirectContext` split in
|
|
123
|
+
* {@link buildAggregatePhase}. An ungrouped query's `groupKeys` maps are empty, which is
|
|
124
|
+
* correct: it has no grouping key any post-aggregate reference could be covered by.
|
|
125
|
+
*
|
|
116
126
|
* This is what turns "a builder forgot to call {@link redirectPostAggregate}" from a
|
|
117
127
|
* runtime `No row context found for column …` internal error into the user-facing
|
|
118
128
|
* GROUP BY message at plan time — the SELECT-list and ORDER BY escapes both shipped
|
|
@@ -127,11 +137,13 @@ export declare function redirectPostAggregate(expr: ScalarPlanNode, context: Gro
|
|
|
127
137
|
* rejected with a user-facing GROUP BY error. If such a step is ever added, locate
|
|
128
138
|
* the aggregate by node id instead of by reference.
|
|
129
139
|
*
|
|
130
|
-
* NOTE: one extra walk of the post-aggregate plan per
|
|
140
|
+
* NOTE: one extra walk of the post-aggregate plan per aggregate query per prepare, on
|
|
131
141
|
* top of the redirect's own walk (see {@link redirectNode}). Measured end-to-end, not
|
|
132
142
|
* isolated: compiling a six-column grouped query costs ~0.6-0.8 ms against ~0.5 ms for
|
|
133
143
|
* a comparable ungrouped one, so this walk is bounded well below the surrounding
|
|
134
|
-
* planning cost.
|
|
144
|
+
* planning cost. An ungrouped aggregate query now pays the same walk plus the
|
|
145
|
+
* `collectDefinedAttrIds` pass that builds its context. Revisit if preparing aggregate
|
|
146
|
+
* queries ever shows up as slow.
|
|
135
147
|
*/
|
|
136
148
|
export declare function assertGroupedPlanCoverage(node: PlanNode, aggregateNode: PlanNode, context: GroupedRedirectContext): void;
|
|
137
149
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-aggregates.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACtI,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAwD,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKjH;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,UAAU,EAAE;IAAE,UAAU,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,EAC3D,aAAa,EAAE,OAAO,EACtB,WAAW,EAAE,UAAU,EAAE,EACzB,oBAAoB,GAAE,OAAe,EACrC,UAAU,GAAE,SAAS,eAAe,EAAO,EAC3C,uBAAuB,GAAE,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,UAAU,EAAE,CAAa,GACvF;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC;IACtC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,
|
|
1
|
+
{"version":3,"file":"select-aggregates.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,34 +51,34 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
51
51
|
hasOrderByOnlyAggregates = true;
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (!hasAggregates && !hasGroupBy) {
|
|
54
|
+
// A `having` clause makes this an aggregate query on its own, exactly as SQLite and
|
|
55
|
+
// PostgreSQL define it: with no `group by` the query has ONE implicit group over all
|
|
56
|
+
// input rows, and `having` filters that single group. So a query with a `having` and
|
|
57
|
+
// neither aggregates nor `group by` still goes through the aggregate pipeline below —
|
|
58
|
+
// it builds an AggregateNode with no grouping keys and no aggregates, which yields
|
|
59
|
+
// exactly one (empty) row, and every clause above it is subject to the usual coverage
|
|
60
|
+
// rule. Returning early here instead is what silently dropped the predicate.
|
|
61
|
+
const isAggregateQuery = hasAggregates || hasGroupBy || Boolean(stmt.having);
|
|
62
|
+
if (!isAggregateQuery) {
|
|
64
63
|
return { output: input, needsFinalProjection: false, preAggregateSort: false };
|
|
65
64
|
}
|
|
66
|
-
// ---------------------------------------------------------------------------
|
|
67
|
-
// Build HAVING predicate as *pre-aggregate* filter when appropriate
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
65
|
let currentInput = input;
|
|
70
|
-
if (shouldPushHavingBelowAggregate) {
|
|
71
|
-
// Build the predicate using the *pre-aggregate* scope because all columns
|
|
72
|
-
// are still available here.
|
|
73
|
-
const havingExpr = buildExpression(selectContext, stmt.having, true);
|
|
74
|
-
currentInput = new FilterNode(selectContext.scope, currentInput, havingExpr);
|
|
75
|
-
}
|
|
76
|
-
// After (optional) early HAVING filter we continue with the existing pipeline
|
|
77
|
-
// ----------------------------------------------------------------------------
|
|
78
66
|
// Handle pre-aggregate sorting for ORDER BY without GROUP BY. Skip when the
|
|
79
67
|
// ORDER BY names an aggregate or a SELECT-list alias — neither can be evaluated
|
|
80
68
|
// against the per-input rows; they need the post-aggregate row(s).
|
|
81
|
-
|
|
69
|
+
// Inside the guard above, "not grouped" already means "one implicit group", so this
|
|
70
|
+
// does not test `hasAggregates`: the documented extension (an ungrouped aggregate
|
|
71
|
+
// query's ORDER BY sorts the *input* rows below the aggregation) must read the same
|
|
72
|
+
// whether or not the query happens to name an aggregate, or `select 1 from t having
|
|
73
|
+
// 1 = 1 order by a` would instead push the sort above the aggregation and be rejected
|
|
74
|
+
// by the coverage check while `select group_concat(b) from t order by a` is allowed.
|
|
75
|
+
// NOTE: for the having-only shape the aggregate list is empty, so nothing observes
|
|
76
|
+
// input order and the sort it emits cannot change the single output row — verified
|
|
77
|
+
// by dumping the program for `select 1 from hn having 1 = 1 order by val`, which
|
|
78
|
+
// carries one `sort(1 keys)` instruction. Harmless and rare; if an ungrouped
|
|
79
|
+
// aggregate query with an empty aggregate list ever shows up sorting a large input,
|
|
80
|
+
// elide the sort when `aggregates.length === 0 && groupByExpressions.length === 0`.
|
|
81
|
+
const preAggregateSort = Boolean(!hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0 && !needsPostAggregateSort);
|
|
82
82
|
currentInput = handlePreAggregateSort(currentInput, stmt, selectContext, preAggregateSort, selectList);
|
|
83
83
|
// Build GROUP BY expressions, resolving 1-based positional references against the SELECT list.
|
|
84
84
|
const groupByExpressions = stmt.groupBy ?
|
|
@@ -89,18 +89,26 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
89
89
|
// Create AggregateNode
|
|
90
90
|
const aggregateNode = new AggregateNode(selectContext.scope, currentInput, groupByExpressions, aggregates);
|
|
91
91
|
currentInput = aggregateNode;
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
96
|
-
//
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
92
|
+
// Two questions, two bindings — they used to be one value, and conflating them is
|
|
93
|
+
// what let an ungrouped aggregate query skip the coverage check entirely.
|
|
94
|
+
//
|
|
95
|
+
// "What does an aggregated row of this query carry?" — every aggregate query has an
|
|
96
|
+
// answer, GROUP BY or not: an ungrouped one has exactly one implicit group whose row
|
|
97
|
+
// carries only the aggregate results. That is what the finished-plan boundary check
|
|
98
|
+
// ({@link assertGroupedPlanCoverage}) and HAVING's own coverage check need, so this
|
|
99
|
+
// binding is built unconditionally.
|
|
100
|
+
const groupedCoverageContext = buildGroupedRedirectContext(groupByExpressions, aggregateNode.getAttributes(), aggregateNode.getRelations()[0]);
|
|
101
|
+
// "Are there grouping keys to rewrite post-aggregate expressions onto?" — only a
|
|
102
|
+
// query WITH GROUP BY has any. A GROUPED query's post-aggregate expressions — HAVING
|
|
103
|
+
// below, the rebuilt SELECT list, a window phase's specifications and function
|
|
104
|
+
// arguments, the sort keys — are all built against scopes that fall through to the
|
|
105
|
+
// pre-aggregate select scope, so a legal spelling of a grouping key can bind to a
|
|
106
|
+
// base-table attribute the grouped row does not carry. Every such expression reaches
|
|
107
|
+
// the fix through ONE entry point, {@link redirectPostAggregate}, off this one
|
|
108
|
+
// context — built here, the moment the AggregateNode exists, so no post-aggregate
|
|
109
|
+
// site can run before it does. `undefined` here means exactly one thing: no grouping
|
|
110
|
+
// keys, so nothing to rewrite onto and the redirect takes its pass-through branch.
|
|
111
|
+
const groupedRedirectContext = groupByExpressions.length > 0 ? groupedCoverageContext : undefined;
|
|
104
112
|
// Create aggregate output scope
|
|
105
113
|
const aggregateOutputScope = createAggregateOutputScope(selectContext.scope, currentInput, groupByExpressions, aggregates, projections);
|
|
106
114
|
// Build the aggregates planning context entries so downstream builders
|
|
@@ -117,10 +125,9 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
117
125
|
attributeId: attr.id,
|
|
118
126
|
};
|
|
119
127
|
});
|
|
120
|
-
// Handle HAVING clause *after* aggregation
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedRedirectContext);
|
|
128
|
+
// Handle HAVING clause *after* aggregation.
|
|
129
|
+
if (stmt.having) {
|
|
130
|
+
currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedCoverageContext, groupedRedirectContext);
|
|
124
131
|
}
|
|
125
132
|
// Determine if final projection is needed.
|
|
126
133
|
// Force a final projection when HAVING-only or ORDER-BY-only aggregates were
|
|
@@ -150,9 +157,9 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
150
157
|
groupByExpressions,
|
|
151
158
|
hasHavingOnlyAggregates,
|
|
152
159
|
hasOrderByOnlyAggregates,
|
|
153
|
-
orderByNeedsPostAggregateSort: needsPostAggregateSort,
|
|
154
160
|
aggregatesContext,
|
|
155
161
|
groupedRedirectContext,
|
|
162
|
+
groupedCoverageContext,
|
|
156
163
|
};
|
|
157
164
|
}
|
|
158
165
|
/**
|
|
@@ -173,12 +180,14 @@ function handlePreAggregateSort(input, stmt, selectContext, preAggregateSort, se
|
|
|
173
180
|
return new SortNode(selectContext.scope, input, sortKeys);
|
|
174
181
|
}
|
|
175
182
|
/**
|
|
176
|
-
* Builds the coverage test for a grouped query
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
183
|
+
* Builds the coverage test for a grouped query, from the GROUP BY expressions as
|
|
184
|
+
* built against the PRE-aggregate scope. Its one caller is the SELECT-list check
|
|
185
|
+
* ({@link validateAggregateProjections}), whose projections are built against that
|
|
186
|
+
* same scope. HAVING deliberately does NOT use this: its predicate lives above the
|
|
187
|
+
* AggregateNode and is checked with {@link isPreGroupingReference} instead, which
|
|
188
|
+
* can tell this query's own ungrouped columns from an enclosing query's.
|
|
180
189
|
*/
|
|
181
|
-
function buildGroupByCoverage(groupByExpressions
|
|
190
|
+
function buildGroupByCoverage(groupByExpressions) {
|
|
182
191
|
const attrIds = new Set();
|
|
183
192
|
const fingerprints = new Set();
|
|
184
193
|
for (const expr of groupByExpressions) {
|
|
@@ -187,9 +196,6 @@ function buildGroupByCoverage(groupByExpressions, groupedOutputAttributes = [])
|
|
|
187
196
|
}
|
|
188
197
|
fingerprints.add(expressionToIdentityString(expr.expression));
|
|
189
198
|
}
|
|
190
|
-
for (const attr of groupedOutputAttributes) {
|
|
191
|
-
attrIds.add(attr.id);
|
|
192
|
-
}
|
|
193
199
|
return { attrIds, fingerprints };
|
|
194
200
|
}
|
|
195
201
|
/**
|
|
@@ -447,14 +453,22 @@ function referencesAggregateInput(node, context) {
|
|
|
447
453
|
return false;
|
|
448
454
|
}
|
|
449
455
|
/**
|
|
450
|
-
* Boundary check over
|
|
456
|
+
* Boundary check over an AGGREGATE query's finished plan: no node ABOVE the
|
|
451
457
|
* AggregateNode may reference an aggregate-input attribute id that is absent from
|
|
452
|
-
* the aggregate's output. Called once per
|
|
458
|
+
* the aggregate's output. Called once per aggregate query, from the end of
|
|
453
459
|
* `buildSelectStmt`, walking the operator spine from the query root down to — and
|
|
454
460
|
* stopping at — the AggregateNode itself (whose own input subtree legally reads
|
|
455
461
|
* pre-grouping columns). Each scalar expression hanging off a spine operator gets
|
|
456
462
|
* the subquery-aware per-expression check ({@link assertPostAggregateCoverage}).
|
|
457
463
|
*
|
|
464
|
+
* "Aggregate", not "grouped": a query with no GROUP BY has exactly one implicit group,
|
|
465
|
+
* whose row carries the aggregate results and nothing else, so the same rule applies to
|
|
466
|
+
* everything above it (`having`, `order by` when it is forced above the aggregate,
|
|
467
|
+
* `limit`, `offset`). `context` is therefore built for every aggregate query — see the
|
|
468
|
+
* `groupedCoverageContext` / `groupedRedirectContext` split in
|
|
469
|
+
* {@link buildAggregatePhase}. An ungrouped query's `groupKeys` maps are empty, which is
|
|
470
|
+
* correct: it has no grouping key any post-aggregate reference could be covered by.
|
|
471
|
+
*
|
|
458
472
|
* This is what turns "a builder forgot to call {@link redirectPostAggregate}" from a
|
|
459
473
|
* runtime `No row context found for column …` internal error into the user-facing
|
|
460
474
|
* GROUP BY message at plan time — the SELECT-list and ORDER BY escapes both shipped
|
|
@@ -469,11 +483,13 @@ function referencesAggregateInput(node, context) {
|
|
|
469
483
|
* rejected with a user-facing GROUP BY error. If such a step is ever added, locate
|
|
470
484
|
* the aggregate by node id instead of by reference.
|
|
471
485
|
*
|
|
472
|
-
* NOTE: one extra walk of the post-aggregate plan per
|
|
486
|
+
* NOTE: one extra walk of the post-aggregate plan per aggregate query per prepare, on
|
|
473
487
|
* top of the redirect's own walk (see {@link redirectNode}). Measured end-to-end, not
|
|
474
488
|
* isolated: compiling a six-column grouped query costs ~0.6-0.8 ms against ~0.5 ms for
|
|
475
489
|
* a comparable ungrouped one, so this walk is bounded well below the surrounding
|
|
476
|
-
* planning cost.
|
|
490
|
+
* planning cost. An ungrouped aggregate query now pays the same walk plus the
|
|
491
|
+
* `collectDefinedAttrIds` pass that builds its context. Revisit if preparing aggregate
|
|
492
|
+
* queries ever shows up as slow.
|
|
477
493
|
*/
|
|
478
494
|
export function assertGroupedPlanCoverage(node, aggregateNode, context) {
|
|
479
495
|
if (node === aggregateNode)
|
|
@@ -522,8 +538,15 @@ function assertPostAggregateCoverage(node, context) {
|
|
|
522
538
|
* belongs to the subquery, and its arguments may correlate back out — `over (order by
|
|
523
539
|
* (select max(wg.b) from wg t))` reads an ungrouped column of this query and must say
|
|
524
540
|
* so at plan time, not die at runtime with "No row context found for column b".
|
|
541
|
+
*
|
|
542
|
+
* `skipSubqueries` stops the walk at a relational child instead of descending into it,
|
|
543
|
+
* and exists for the HAVING check ({@link buildHavingFilter}). An ungrouped reference
|
|
544
|
+
* to this query's column buried inside a HAVING subquery is already rejected by the
|
|
545
|
+
* finished-plan check ({@link assertGroupedPlanCoverage}) with the general "must appear
|
|
546
|
+
* in the GROUP BY clause" wording, which is the message that shape has always raised;
|
|
547
|
+
* descending here would pre-empt it with HAVING's own dedicated message instead.
|
|
525
548
|
*/
|
|
526
|
-
function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
|
|
549
|
+
function findUngroupedPostAggregateRef(node, context, skipSubqueries = false, insideSubquery = false) {
|
|
527
550
|
if (!insideSubquery && CapabilityDetectors.isAggregateFunction(node)) {
|
|
528
551
|
return null;
|
|
529
552
|
}
|
|
@@ -533,7 +556,9 @@ function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
|
|
|
533
556
|
for (const child of node.getChildren()) {
|
|
534
557
|
if (isCteDefinition(child))
|
|
535
558
|
continue;
|
|
536
|
-
|
|
559
|
+
if (skipSubqueries && isRelationalNode(child))
|
|
560
|
+
continue;
|
|
561
|
+
const found = findUngroupedPostAggregateRef(child, context, skipSubqueries, insideSubquery || isRelationalNode(child));
|
|
537
562
|
if (found)
|
|
538
563
|
return found;
|
|
539
564
|
}
|
|
@@ -541,11 +566,16 @@ function findUngroupedPostAggregateRef(node, context, insideSubquery = false) {
|
|
|
541
566
|
}
|
|
542
567
|
/**
|
|
543
568
|
* Validates that aggregate and non-aggregate projections don't mix inappropriately.
|
|
544
|
-
*
|
|
545
|
-
*
|
|
546
|
-
*
|
|
547
|
-
*
|
|
548
|
-
*
|
|
569
|
+
* Every non-aggregate column reference in the SELECT list must either (a) match a
|
|
570
|
+
* GROUP BY column by attribute id, or (b) appear inside a subtree whose AST matches
|
|
571
|
+
* a GROUP BY expression. This is intentionally stricter than full functional-dependency
|
|
572
|
+
* coverage — it matches SQL-92 and the corpus assertions, without importing SQLite's
|
|
573
|
+
* permissive "bare columns" rule.
|
|
574
|
+
*
|
|
575
|
+
* Only {@link buildAggregatePhase} calls this, and only from inside its
|
|
576
|
+
* `isAggregateQuery` guard, so "no GROUP BY" here means "one implicit group with an
|
|
577
|
+
* EMPTY set of grouping keys" — not "no grouping at all". The coverage walk therefore
|
|
578
|
+
* runs for it too, and rejects every bare select-list column.
|
|
549
579
|
*/
|
|
550
580
|
function validateAggregateProjections(projections, hasAggregates, hasGroupBy, groupByExpressions) {
|
|
551
581
|
if (projections.length === 0)
|
|
@@ -553,10 +583,13 @@ function validateAggregateProjections(projections, hasAggregates, hasGroupBy, gr
|
|
|
553
583
|
if (hasAggregates && !hasGroupBy) {
|
|
554
584
|
throw new QuereusError('Cannot mix aggregate and non-aggregate columns in SELECT list without GROUP BY', StatusCode.ERROR);
|
|
555
585
|
}
|
|
556
|
-
if (!hasGroupBy)
|
|
557
|
-
return;
|
|
558
586
|
// The SELECT list is built against the pre-aggregate scope, so no aggregate
|
|
559
|
-
// output attributes participate.
|
|
587
|
+
// output attributes participate. With no GROUP BY the coverage set is empty, which
|
|
588
|
+
// is exactly right for the one implicit group: it carries no base-table column, so
|
|
589
|
+
// any bare column here is rejected. Skipping the walk for that shape is what let
|
|
590
|
+
// `select * from t having 1 = 1` fall through to buildFinalAggregateProjections and
|
|
591
|
+
// raise its internal-consistency assert ("Internal: SELECT * column 'id' is not a
|
|
592
|
+
// GROUP BY key", StatusCode.INTERNAL) at the user instead of this message.
|
|
560
593
|
const coverage = buildGroupByCoverage(groupByExpressions);
|
|
561
594
|
for (const proj of projections) {
|
|
562
595
|
assertGroupByCoverage(proj.node, coverage);
|
|
@@ -801,16 +834,21 @@ function groupKeyIndexOf(node, groupKeys) {
|
|
|
801
834
|
/**
|
|
802
835
|
* Builds HAVING filter clause.
|
|
803
836
|
*
|
|
804
|
-
* `
|
|
805
|
-
*
|
|
806
|
-
*
|
|
807
|
-
*
|
|
808
|
-
*
|
|
809
|
-
*
|
|
810
|
-
*
|
|
811
|
-
*
|
|
837
|
+
* `groupedCoverageContext` describes what an aggregated row of this query carries and
|
|
838
|
+
* is supplied for EVERY aggregate query; it drives the coverage check below.
|
|
839
|
+
*
|
|
840
|
+
* `groupedRedirectContext` is the rewrite target and is supplied only for a GROUPED
|
|
841
|
+
* query. A HAVING reference to a grouping key under a spelling the hybrid scope does
|
|
842
|
+
* not hold (`having wg.a = 'x'` against `group by a`, the key nested in `upper(wg.a)`,
|
|
843
|
+
* a computed key written out again) falls through to a base-table attribute, which
|
|
844
|
+
* happened to read correctly only because this FilterNode sits directly on the
|
|
845
|
+
* AggregateNode's yield where the representative source row is still published.
|
|
846
|
+
* {@link redirectPostAggregate} lands it on the aggregate's own output column instead,
|
|
847
|
+
* so the predicate stays correct wherever the filter ends up relative to a buffering
|
|
848
|
+
* operator. A query with no GROUP BY has no keys to land anything on and passes
|
|
849
|
+
* `undefined`, so the redirect takes its pass-through branch.
|
|
812
850
|
*/
|
|
813
|
-
function buildHavingFilter(input, havingClause, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedRedirectContext) {
|
|
851
|
+
function buildHavingFilter(input, havingClause, selectContext, aggregateOutputScope, aggregates, groupByExpressions, groupedCoverageContext, groupedRedirectContext) {
|
|
814
852
|
const aggregateAttributes = input.getAttributes();
|
|
815
853
|
// Create a hybrid scope that first tries the aggregate output scope,
|
|
816
854
|
// then falls back to the original source scope for column resolution.
|
|
@@ -854,17 +892,22 @@ function buildHavingFilter(input, havingClause, selectContext, aggregateOutputSc
|
|
|
854
892
|
})
|
|
855
893
|
};
|
|
856
894
|
const havingExpression = redirectPostAggregate(buildExpression(havingContext, havingClause, true), groupedRedirectContext, hybridScope);
|
|
857
|
-
// Reject HAVING references to non-grouped, non-aggregated columns
|
|
895
|
+
// Reject HAVING references to non-grouped, non-aggregated columns — and ONLY
|
|
896
|
+
// those. The test is {@link isPreGroupingReference}: true just for a column of
|
|
897
|
+
// THIS query's pre-grouping input that the grouped row no longer carries. A
|
|
898
|
+
// column of an ENCLOSING query (a correlated reference from a subquery's HAVING,
|
|
899
|
+
// legal in SQL exactly as it is in WHERE) belongs to neither set and passes, as
|
|
900
|
+
// does a subquery's own column. An allow-list of grouping keys is unnecessary
|
|
901
|
+
// here: `redirectPostAggregate` has already rewritten every spelling of a
|
|
902
|
+
// grouping key it handles into an AggregateNode-OUTPUT reference, which
|
|
903
|
+
// `isPreGroupingReference` returns false for.
|
|
904
|
+
//
|
|
858
905
|
// With GROUP BY: only GROUP BY columns/expressions and aggregates are allowed.
|
|
859
906
|
// Without GROUP BY (implicit single group, only reachable here when aggregates
|
|
860
|
-
// are present): only aggregates are allowed.
|
|
861
|
-
//
|
|
862
|
-
//
|
|
863
|
-
|
|
864
|
-
// We accept both flavors of "grouped" attribute, plus any subtree whose AST
|
|
865
|
-
// fingerprint matches a GROUP BY expression.
|
|
866
|
-
const coverage = buildGroupByCoverage(groupByExpressions, aggregateAttributes.slice(0, groupByExpressions.length + aggregates.length));
|
|
867
|
-
const ungrouped = findUngroupedColumnRef(havingExpression, coverage);
|
|
907
|
+
// are present): only aggregates are allowed. Both cases are described by
|
|
908
|
+
// `groupedCoverageContext`, which is why it is a separate parameter from the
|
|
909
|
+
// rewrite target above.
|
|
910
|
+
const ungrouped = findUngroupedPostAggregateRef(havingExpression, groupedCoverageContext, /* skipSubqueries */ true);
|
|
868
911
|
if (ungrouped) {
|
|
869
912
|
throw new QuereusError(`HAVING references non-grouped column '${ungrouped.expression.name}'; ` +
|
|
870
913
|
`HAVING may only reference GROUP BY columns or aggregate expressions`, StatusCode.ERROR, undefined, ungrouped.expression.loc?.start.line, ungrouped.expression.loc?.start.column);
|