@quereus/quereus 2.6.0 → 2.8.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 +222 -439
- package/dist/src/common/errors.d.ts +21 -0
- package/dist/src/common/errors.d.ts.map +1 -1
- package/dist/src/common/errors.js +29 -0
- package/dist/src/common/errors.js.map +1 -1
- package/dist/src/core/database.d.ts +10 -4
- package/dist/src/core/database.d.ts.map +1 -1
- package/dist/src/core/database.js +58 -18
- package/dist/src/core/database.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.map +1 -1
- package/dist/src/emit/ast-stringify.js +0 -1
- package/dist/src/emit/ast-stringify.js.map +1 -1
- package/dist/src/func/builtins/explain.d.ts.map +1 -1
- package/dist/src/func/builtins/explain.js +39 -36
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +3 -2
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json-helpers.d.ts +1 -1
- package/dist/src/func/builtins/json-helpers.d.ts.map +1 -1
- package/dist/src/func/builtins/json-helpers.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +2 -2
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/json.d.ts.map +1 -1
- package/dist/src/func/builtins/json.js +5 -7
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts +2 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +33 -16
- 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 +14 -21
- 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/parser/ast.d.ts +1 -1
- package/dist/src/parser/ast.d.ts.map +1 -1
- package/dist/src/parser/lexer.d.ts.map +1 -1
- package/dist/src/parser/lexer.js +8 -48
- package/dist/src/parser/lexer.js.map +1 -1
- package/dist/src/parser/parser.d.ts.map +1 -1
- package/dist/src/parser/parser.js +30 -7
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/parser/utils.d.ts +10 -1
- package/dist/src/parser/utils.d.ts.map +1 -1
- package/dist/src/parser/utils.js +23 -0
- package/dist/src/parser/utils.js.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.d.ts.map +1 -1
- package/dist/src/planner/analysis/constraint-extractor.js +0 -1
- package/dist/src/planner/analysis/constraint-extractor.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.d.ts +12 -1
- package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +60 -1
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/create-view.d.ts.map +1 -1
- package/dist/src/planner/building/create-view.js +16 -0
- package/dist/src/planner/building/create-view.js.map +1 -1
- package/dist/src/planner/building/delete.d.ts.map +1 -1
- package/dist/src/planner/building/delete.js +17 -7
- package/dist/src/planner/building/delete.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 +24 -15
- package/dist/src/planner/building/foreign-key-builder.js.map +1 -1
- package/dist/src/planner/building/insert.d.ts.map +1 -1
- package/dist/src/planner/building/insert.js +55 -104
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select-aggregates.d.ts +5 -2
- package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
- package/dist/src/planner/building/select-aggregates.js +184 -26
- package/dist/src/planner/building/select-aggregates.js.map +1 -1
- package/dist/src/planner/building/select-modifiers.d.ts +6 -2
- package/dist/src/planner/building/select-modifiers.d.ts.map +1 -1
- package/dist/src/planner/building/select-modifiers.js +20 -5
- package/dist/src/planner/building/select-modifiers.js.map +1 -1
- package/dist/src/planner/building/select-ordinal.d.ts +20 -0
- package/dist/src/planner/building/select-ordinal.d.ts.map +1 -0
- package/dist/src/planner/building/select-ordinal.js +62 -0
- package/dist/src/planner/building/select-ordinal.js.map +1 -0
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +64 -17
- 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 +34 -27
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/building/with.d.ts.map +1 -1
- package/dist/src/planner/building/with.js +25 -2
- package/dist/src/planner/building/with.js.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts +22 -1
- package/dist/src/planner/nodes/constraint-check-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/constraint-check-node.js +36 -6
- package/dist/src/planner/nodes/constraint-check-node.js.map +1 -1
- package/dist/src/planner/nodes/filter.d.ts.map +1 -1
- package/dist/src/planner/nodes/filter.js +6 -2
- package/dist/src/planner/nodes/filter.js.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.d.ts +5 -3
- package/dist/src/planner/nodes/recursive-cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/recursive-cte-node.js +24 -8
- package/dist/src/planner/nodes/recursive-cte-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 +5 -12
- package/dist/src/planner/nodes/returning-node.js.map +1 -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 +22 -26
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- 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 +2 -2
- package/dist/src/planner/rules/join/rule-join-physical-selection.js.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.d.ts.map +1 -1
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js +7 -3
- package/dist/src/planner/rules/join/rule-quickpick-enumeration.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-filter-merge.js.map +1 -1
- package/dist/src/planner/rules/predicate/rule-predicate-pushdown.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.d.ts.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +161 -9
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.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 +32 -2
- package/dist/src/planner/rules/subquery/rule-subquery-decorrelation.js.map +1 -1
- package/dist/src/planner/validation/returning-qualifier-validator.d.ts +8 -0
- package/dist/src/planner/validation/returning-qualifier-validator.d.ts.map +1 -0
- package/dist/src/planner/validation/returning-qualifier-validator.js +63 -0
- package/dist/src/planner/validation/returning-qualifier-validator.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 -0
- package/dist/src/runtime/deferred-constraint-queue.js.map +1 -1
- package/dist/src/runtime/emit/alter-table.d.ts.map +1 -1
- package/dist/src/runtime/emit/alter-table.js +286 -7
- package/dist/src/runtime/emit/alter-table.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +12 -7
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
- package/dist/src/runtime/emit/constraint-check.js +125 -62
- 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 +6 -6
- package/dist/src/runtime/emit/create-assertion.js.map +1 -1
- package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
- package/dist/src/runtime/emit/dml-executor.js +133 -76
- package/dist/src/runtime/emit/dml-executor.js.map +1 -1
- package/dist/src/runtime/emit/pragma.d.ts.map +1 -1
- package/dist/src/runtime/emit/pragma.js +3 -4
- package/dist/src/runtime/emit/pragma.js.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.d.ts.map +1 -1
- package/dist/src/runtime/emit/recursive-cte.js +61 -10
- package/dist/src/runtime/emit/recursive-cte.js.map +1 -1
- package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/scalar-function.js +2 -1
- package/dist/src/runtime/emit/scalar-function.js.map +1 -1
- package/dist/src/runtime/emit/scan.d.ts.map +1 -1
- package/dist/src/runtime/emit/scan.js.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.d.ts.map +1 -1
- package/dist/src/runtime/emit/table-valued-function.js +6 -4
- package/dist/src/runtime/emit/table-valued-function.js.map +1 -1
- package/dist/src/runtime/emit/update.d.ts.map +1 -1
- package/dist/src/runtime/emit/update.js +8 -5
- package/dist/src/runtime/emit/update.js.map +1 -1
- package/dist/src/runtime/foreign-key-actions.js +2 -2
- package/dist/src/runtime/foreign-key-actions.js.map +1 -1
- package/dist/src/schema/catalog.d.ts +2 -0
- package/dist/src/schema/catalog.d.ts.map +1 -1
- package/dist/src/schema/catalog.js +18 -0
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column.d.ts +7 -0
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/function.d.ts +4 -3
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/manager.d.ts +39 -3
- package/dist/src/schema/manager.d.ts.map +1 -1
- package/dist/src/schema/manager.js +219 -20
- package/dist/src/schema/manager.js.map +1 -1
- package/dist/src/schema/rename-rewriter.d.ts +4 -0
- package/dist/src/schema/rename-rewriter.d.ts.map +1 -0
- package/dist/src/schema/rename-rewriter.js +506 -0
- package/dist/src/schema/rename-rewriter.js.map +1 -0
- package/dist/src/schema/schema-differ.d.ts.map +1 -1
- package/dist/src/schema/schema-differ.js +41 -4
- package/dist/src/schema/schema-differ.js.map +1 -1
- package/dist/src/schema/table.d.ts +67 -2
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +144 -0
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/util/async-iterator.d.ts +2 -1
- package/dist/src/util/async-iterator.d.ts.map +1 -1
- package/dist/src/util/async-iterator.js +4 -4
- package/dist/src/util/async-iterator.js.map +1 -1
- package/dist/src/util/key-serializer.d.ts +3 -0
- package/dist/src/util/key-serializer.d.ts.map +1 -1
- package/dist/src/util/key-serializer.js +19 -2
- package/dist/src/util/key-serializer.js.map +1 -1
- package/dist/src/util/patterns.d.ts.map +1 -1
- package/dist/src/util/patterns.js +58 -10
- package/dist/src/util/patterns.js.map +1 -1
- package/dist/src/util/plugin-helper.js +1 -1
- package/dist/src/util/plugin-helper.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +7 -0
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/connection.d.ts +7 -0
- package/dist/src/vtab/connection.d.ts.map +1 -1
- package/dist/src/vtab/manifest.d.ts +4 -0
- package/dist/src/vtab/manifest.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.d.ts +8 -0
- package/dist/src/vtab/memory/index.d.ts.map +1 -1
- package/dist/src/vtab/memory/index.js +11 -0
- package/dist/src/vtab/memory/index.js.map +1 -1
- package/dist/src/vtab/memory/layer/base.d.ts +8 -1
- package/dist/src/vtab/memory/layer/base.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/base.js +36 -2
- package/dist/src/vtab/memory/layer/base.js.map +1 -1
- package/dist/src/vtab/memory/layer/manager.d.ts +5 -1
- package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/manager.js +77 -14
- package/dist/src/vtab/memory/layer/manager.js.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.d.ts.map +1 -1
- package/dist/src/vtab/memory/layer/transaction.js +28 -3
- package/dist/src/vtab/memory/layer/transaction.js.map +1 -1
- package/dist/src/vtab/memory/module.d.ts +6 -1
- package/dist/src/vtab/memory/module.d.ts.map +1 -1
- package/dist/src/vtab/memory/module.js +93 -14
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/dist/src/vtab/memory/utils/predicate.d.ts +27 -0
- package/dist/src/vtab/memory/utils/predicate.d.ts.map +1 -0
- package/dist/src/vtab/memory/utils/predicate.js +182 -0
- package/dist/src/vtab/memory/utils/predicate.js.map +1 -0
- package/package.json +3 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isRelationalNode } from '../nodes/plan-node.js';
|
|
1
2
|
import { AggregateNode } from '../nodes/aggregate-node.js';
|
|
2
3
|
import { FilterNode } from '../nodes/filter.js';
|
|
3
4
|
import { SortNode } from '../nodes/sort.js';
|
|
@@ -11,10 +12,11 @@ import { CapabilityDetectors } from '../framework/characteristics.js';
|
|
|
11
12
|
import { resolveFunctionSchema } from './schema-resolution.js';
|
|
12
13
|
import { isAggregateFunctionSchema } from '../../schema/function.js';
|
|
13
14
|
import { expressionToString } from '../../emit/ast-stringify.js';
|
|
15
|
+
import { resolveOrdinalReference } from './select-ordinal.js';
|
|
14
16
|
/**
|
|
15
17
|
* Processes GROUP BY, aggregates, and HAVING clauses
|
|
16
18
|
*/
|
|
17
|
-
export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasAggregates, projections, hasWrappedAggregates = false) {
|
|
19
|
+
export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasAggregates, projections, hasWrappedAggregates = false, selectListAsts = []) {
|
|
18
20
|
const hasGroupBy = stmt.groupBy && stmt.groupBy.length > 0;
|
|
19
21
|
// Pre-collect aggregate functions from the HAVING clause that are not already
|
|
20
22
|
// present in the SELECT list. These need to be added to the AggregateNode so
|
|
@@ -28,6 +30,21 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
28
30
|
hasHavingOnlyAggregates = true;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
33
|
+
// Detect aggregate function references in ORDER BY. They are only legal when
|
|
34
|
+
// the query is otherwise an aggregate query (has aggregates in SELECT/HAVING
|
|
35
|
+
// or has a GROUP BY). When legal, any ORDER BY aggregate not already present
|
|
36
|
+
// in the SELECT or HAVING aggregate list must be added to the AggregateNode
|
|
37
|
+
// so it is computed and available to the post-aggregate sort.
|
|
38
|
+
const orderByHasAggregates = orderByContainsAggregates(stmt.orderBy, selectContext);
|
|
39
|
+
let hasOrderByOnlyAggregates = false;
|
|
40
|
+
if (orderByHasAggregates && (hasAggregates || hasGroupBy)) {
|
|
41
|
+
const orderByAggs = collectOrderByAggregates(stmt.orderBy, selectContext, aggregates);
|
|
42
|
+
if (orderByAggs.length > 0) {
|
|
43
|
+
aggregates.push(...orderByAggs);
|
|
44
|
+
hasAggregates = true;
|
|
45
|
+
hasOrderByOnlyAggregates = true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
31
48
|
// If there is a HAVING clause but the SELECT contains **no aggregate functions**
|
|
32
49
|
// AND **no GROUP BY**, we can safely treat the HAVING predicate as a regular filter
|
|
33
50
|
// that runs *before* the aggregation (i.e. between the source and the AggregateNode).
|
|
@@ -52,28 +69,48 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
52
69
|
}
|
|
53
70
|
// After (optional) early HAVING filter we continue with the existing pipeline
|
|
54
71
|
// ----------------------------------------------------------------------------
|
|
55
|
-
// Handle pre-aggregate sorting for ORDER BY without GROUP BY
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// Build GROUP BY expressions
|
|
72
|
+
// Handle pre-aggregate sorting for ORDER BY without GROUP BY. Skip when the
|
|
73
|
+
// ORDER BY contains aggregates — those need to run against the post-aggregate
|
|
74
|
+
// row(s), not the per-input rows.
|
|
75
|
+
const preAggregateSort = Boolean(hasAggregates && !hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0 && !orderByHasAggregates);
|
|
76
|
+
currentInput = handlePreAggregateSort(currentInput, stmt, selectContext, hasAggregates, !!hasGroupBy, orderByHasAggregates, selectListAsts);
|
|
77
|
+
// Build GROUP BY expressions, resolving 1-based positional references against the SELECT list.
|
|
61
78
|
const groupByExpressions = stmt.groupBy ?
|
|
62
|
-
stmt.groupBy.map(expr =>
|
|
79
|
+
stmt.groupBy.map(expr => {
|
|
80
|
+
const resolved = resolveOrdinalReference(expr, selectListAsts, 'GROUP BY');
|
|
81
|
+
return buildExpression(selectContext, resolved ?? expr, false);
|
|
82
|
+
}) : [];
|
|
83
|
+
// Validate aggregate/non-aggregate mixing (must run after groupByExpressions are built
|
|
84
|
+
// so we can check column-coverage of SELECT projections against GROUP BY)
|
|
85
|
+
validateAggregateProjections(projections, hasAggregates, !!hasGroupBy, groupByExpressions);
|
|
63
86
|
// Create AggregateNode
|
|
64
87
|
const aggregateNode = new AggregateNode(selectContext.scope, currentInput, groupByExpressions, aggregates);
|
|
65
88
|
currentInput = aggregateNode;
|
|
66
89
|
// Create aggregate output scope
|
|
67
90
|
const aggregateOutputScope = createAggregateOutputScope(selectContext.scope, currentInput, groupByExpressions, aggregates);
|
|
91
|
+
// Build the aggregates planning context entries so downstream builders
|
|
92
|
+
// (final projection, ORDER BY) can resolve aggregate function references
|
|
93
|
+
// to ColumnReferenceNodes against the AggregateNode output.
|
|
94
|
+
const aggregateAttributes = aggregateNode.getAttributes();
|
|
95
|
+
const aggregatesContext = aggregates.map((agg, index) => {
|
|
96
|
+
const columnIndex = groupByExpressions.length + index;
|
|
97
|
+
const attr = aggregateAttributes[columnIndex];
|
|
98
|
+
return {
|
|
99
|
+
expression: agg.expression,
|
|
100
|
+
alias: agg.alias,
|
|
101
|
+
columnIndex,
|
|
102
|
+
attributeId: attr.id,
|
|
103
|
+
};
|
|
104
|
+
});
|
|
68
105
|
// Handle HAVING clause *after* aggregation only when we did not already push
|
|
69
106
|
// it below the AggregateNode.
|
|
70
107
|
if (stmt.having && !shouldPushHavingBelowAggregate) {
|
|
71
108
|
currentInput = buildHavingFilter(currentInput, stmt.having, selectContext, aggregateOutputScope, aggregates, groupByExpressions);
|
|
72
109
|
}
|
|
73
110
|
// Determine if final projection is needed.
|
|
74
|
-
// Force a final projection when HAVING-only aggregates were
|
|
75
|
-
// strip them from the output (they exist only for
|
|
76
|
-
const needsFinalProjection = hasHavingOnlyAggregates || hasWrappedAggregates || checkNeedsFinalProjection(projections);
|
|
111
|
+
// Force a final projection when HAVING-only or ORDER-BY-only aggregates were
|
|
112
|
+
// added, to strip them from the output (they exist only for those clauses).
|
|
113
|
+
const needsFinalProjection = hasHavingOnlyAggregates || hasOrderByOnlyAggregates || hasWrappedAggregates || checkNeedsFinalProjection(projections);
|
|
77
114
|
return {
|
|
78
115
|
output: currentInput,
|
|
79
116
|
aggregateScope: aggregateOutputScope,
|
|
@@ -81,18 +118,24 @@ export function buildAggregatePhase(input, stmt, selectContext, aggregates, hasA
|
|
|
81
118
|
preAggregateSort,
|
|
82
119
|
aggregateNode,
|
|
83
120
|
groupByExpressions,
|
|
84
|
-
hasHavingOnlyAggregates
|
|
121
|
+
hasHavingOnlyAggregates,
|
|
122
|
+
hasOrderByOnlyAggregates,
|
|
123
|
+
orderByHasAggregates,
|
|
124
|
+
aggregatesContext,
|
|
85
125
|
};
|
|
86
126
|
}
|
|
87
127
|
/**
|
|
88
128
|
* Handles pre-aggregate sorting for special cases
|
|
89
129
|
*/
|
|
90
|
-
function handlePreAggregateSort(input, stmt, selectContext, hasAggregates, hasGroupBy) {
|
|
91
|
-
// Special handling for ORDER BY with aggregates but no GROUP BY
|
|
92
|
-
|
|
130
|
+
function handlePreAggregateSort(input, stmt, selectContext, hasAggregates, hasGroupBy, orderByHasAggregates, selectListAsts) {
|
|
131
|
+
// Special handling for ORDER BY with aggregates but no GROUP BY.
|
|
132
|
+
// Skip when ORDER BY itself references aggregates — those must run
|
|
133
|
+
// post-aggregation, not on the per-row input.
|
|
134
|
+
if (hasAggregates && !hasGroupBy && stmt.orderBy && stmt.orderBy.length > 0 && !orderByHasAggregates) {
|
|
93
135
|
// Apply ORDER BY before aggregation
|
|
94
136
|
const sortKeys = stmt.orderBy.map(orderByClause => {
|
|
95
|
-
const
|
|
137
|
+
const resolved = resolveOrdinalReference(orderByClause.expr, selectListAsts, 'ORDER BY');
|
|
138
|
+
const expression = buildExpression(selectContext, resolved ?? orderByClause.expr);
|
|
96
139
|
return {
|
|
97
140
|
expression,
|
|
98
141
|
direction: orderByClause.direction,
|
|
@@ -104,12 +147,67 @@ function handlePreAggregateSort(input, stmt, selectContext, hasAggregates, hasGr
|
|
|
104
147
|
return input;
|
|
105
148
|
}
|
|
106
149
|
/**
|
|
107
|
-
* Validates that aggregate and non-aggregate projections don't mix inappropriately
|
|
150
|
+
* Validates that aggregate and non-aggregate projections don't mix inappropriately.
|
|
151
|
+
* With GROUP BY, every non-aggregate column reference in the SELECT list must
|
|
152
|
+
* either (a) match a GROUP BY column by attribute id, or (b) appear inside a
|
|
153
|
+
* subtree whose AST matches a GROUP BY expression. This is intentionally
|
|
154
|
+
* stricter than full functional-dependency coverage — it matches SQL-92 and
|
|
155
|
+
* the corpus assertions, without importing SQLite's permissive "bare columns" rule.
|
|
108
156
|
*/
|
|
109
|
-
function validateAggregateProjections(projections, hasAggregates, hasGroupBy) {
|
|
110
|
-
if (projections.length
|
|
157
|
+
function validateAggregateProjections(projections, hasAggregates, hasGroupBy, groupByExpressions) {
|
|
158
|
+
if (projections.length === 0)
|
|
159
|
+
return;
|
|
160
|
+
if (hasAggregates && !hasGroupBy) {
|
|
111
161
|
throw new QuereusError('Cannot mix aggregate and non-aggregate columns in SELECT list without GROUP BY', StatusCode.ERROR);
|
|
112
162
|
}
|
|
163
|
+
if (!hasGroupBy)
|
|
164
|
+
return;
|
|
165
|
+
const groupByAttrIds = new Set();
|
|
166
|
+
const groupByExprFingerprints = new Set();
|
|
167
|
+
for (const expr of groupByExpressions) {
|
|
168
|
+
if (CapabilityDetectors.isColumnReference(expr)) {
|
|
169
|
+
groupByAttrIds.add(expr.attributeId);
|
|
170
|
+
}
|
|
171
|
+
groupByExprFingerprints.add(expressionToString(expr.expression));
|
|
172
|
+
}
|
|
173
|
+
for (const proj of projections) {
|
|
174
|
+
const ungrouped = findUngroupedColumnRef(proj.node, groupByAttrIds, groupByExprFingerprints);
|
|
175
|
+
if (ungrouped) {
|
|
176
|
+
throw new QuereusError('Cannot mix aggregate and non-aggregate columns in SELECT list without GROUP BY', StatusCode.ERROR);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Walks a scalar expression tree looking for a ColumnReferenceNode whose attribute
|
|
182
|
+
* id is not covered by GROUP BY. Stops descending when it hits an aggregate-function
|
|
183
|
+
* subtree (inner column refs are aggregated), a relational subtree (subqueries
|
|
184
|
+
* resolve their own scope), or any subtree whose AST fingerprint matches a GROUP BY
|
|
185
|
+
* expression (the whole subtree is grouped, e.g. SELECT id+1 ... GROUP BY id+1).
|
|
186
|
+
*/
|
|
187
|
+
function findUngroupedColumnRef(node, groupByAttrIds, groupByExprFingerprints) {
|
|
188
|
+
if (CapabilityDetectors.isAggregateFunction(node)) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
if ('expression' in node) {
|
|
192
|
+
const fp = expressionToString(node.expression);
|
|
193
|
+
if (groupByExprFingerprints.has(fp)) {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (CapabilityDetectors.isColumnReference(node)) {
|
|
198
|
+
if (!groupByAttrIds.has(node.attributeId)) {
|
|
199
|
+
return node;
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
for (const child of node.getChildren()) {
|
|
204
|
+
if (isRelationalNode(child))
|
|
205
|
+
continue;
|
|
206
|
+
const found = findUngroupedColumnRef(child, groupByAttrIds, groupByExprFingerprints);
|
|
207
|
+
if (found)
|
|
208
|
+
return found;
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
113
211
|
}
|
|
114
212
|
/**
|
|
115
213
|
* Creates a scope that includes the aggregate output columns
|
|
@@ -183,19 +281,49 @@ function buildHavingFilter(input, havingClause, selectContext, aggregateOutputSc
|
|
|
183
281
|
})
|
|
184
282
|
};
|
|
185
283
|
const havingExpression = buildExpression(havingContext, havingClause, true);
|
|
284
|
+
// Reject HAVING references to non-grouped, non-aggregated columns.
|
|
285
|
+
// With GROUP BY: only GROUP BY columns/expressions and aggregates are allowed.
|
|
286
|
+
// Without GROUP BY (implicit single group, only reachable here when aggregates
|
|
287
|
+
// are present): only aggregates are allowed.
|
|
288
|
+
// HAVING references resolve through `hybridScope`: GROUP BY columns and
|
|
289
|
+
// aggregate aliases land on AggregateNode-output attribute IDs, while bare
|
|
290
|
+
// source columns (registered as a fallback) land on source attribute IDs.
|
|
291
|
+
// We accept both flavors of "grouped" attribute, plus any subtree whose AST
|
|
292
|
+
// fingerprint matches a GROUP BY expression.
|
|
293
|
+
const allowedAttrIds = new Set();
|
|
294
|
+
const groupByExprFingerprints = new Set();
|
|
295
|
+
for (const expr of groupByExpressions) {
|
|
296
|
+
if (CapabilityDetectors.isColumnReference(expr)) {
|
|
297
|
+
allowedAttrIds.add(expr.attributeId);
|
|
298
|
+
}
|
|
299
|
+
groupByExprFingerprints.add(expressionToString(expr.expression));
|
|
300
|
+
}
|
|
301
|
+
for (let i = 0; i < groupByExpressions.length + aggregates.length; i++) {
|
|
302
|
+
allowedAttrIds.add(aggregateAttributes[i].id);
|
|
303
|
+
}
|
|
304
|
+
const ungrouped = findUngroupedColumnRef(havingExpression, allowedAttrIds, groupByExprFingerprints);
|
|
305
|
+
if (ungrouped) {
|
|
306
|
+
throw new QuereusError(`HAVING references non-grouped column '${ungrouped.expression.name}'; ` +
|
|
307
|
+
`HAVING may only reference GROUP BY columns or aggregate expressions`, StatusCode.ERROR, undefined, ungrouped.expression.loc?.start.line, ungrouped.expression.loc?.start.column);
|
|
308
|
+
}
|
|
186
309
|
return new FilterNode(hybridScope, input, havingExpression);
|
|
187
310
|
}
|
|
188
311
|
/**
|
|
189
|
-
* Checks if a final projection is needed for complex expressions
|
|
312
|
+
* Checks if a final projection is needed for complex expressions or for
|
|
313
|
+
* aliasing simple column refs whose alias differs from the underlying column.
|
|
190
314
|
*/
|
|
191
315
|
function checkNeedsFinalProjection(projections) {
|
|
192
316
|
if (projections.length === 0) {
|
|
193
317
|
return false;
|
|
194
318
|
}
|
|
195
|
-
// Check if any of the projections are complex expressions (not just column refs)
|
|
196
319
|
return projections.some(proj => {
|
|
197
|
-
//
|
|
198
|
-
|
|
320
|
+
// Non-trivial expression — always needs the projection.
|
|
321
|
+
if (!CapabilityDetectors.isColumnReference(proj.node))
|
|
322
|
+
return true;
|
|
323
|
+
// Simple column ref — needs projection if the alias renames it, so the
|
|
324
|
+
// SELECT-list alias survives to the output column name.
|
|
325
|
+
const underlyingName = proj.node.expression.name.toLowerCase();
|
|
326
|
+
return Boolean(proj.alias && proj.alias.toLowerCase() !== underlyingName);
|
|
199
327
|
});
|
|
200
328
|
}
|
|
201
329
|
/**
|
|
@@ -270,9 +398,41 @@ function findAggregateFunctionExprs(expr, ctx, results) {
|
|
|
270
398
|
function collectHavingAggregates(havingExpr, selectContext, existingAggregates) {
|
|
271
399
|
const funcExprs = [];
|
|
272
400
|
findAggregateFunctionExprs(havingExpr, selectContext, funcExprs);
|
|
401
|
+
return dedupeNewAggregates(funcExprs, selectContext, existingAggregates);
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* Collects aggregate functions from each ORDER BY clause expression that are not
|
|
405
|
+
* already present in the existing aggregates list. Returns new aggregates to add.
|
|
406
|
+
*/
|
|
407
|
+
function collectOrderByAggregates(orderBy, selectContext, existingAggregates) {
|
|
408
|
+
const funcExprs = [];
|
|
409
|
+
for (const clause of orderBy) {
|
|
410
|
+
findAggregateFunctionExprs(clause.expr, selectContext, funcExprs);
|
|
411
|
+
}
|
|
412
|
+
return dedupeNewAggregates(funcExprs, selectContext, existingAggregates);
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Returns true if any ORDER BY clause expression contains an aggregate function call.
|
|
416
|
+
*/
|
|
417
|
+
function orderByContainsAggregates(orderBy, selectContext) {
|
|
418
|
+
if (!orderBy || orderBy.length === 0)
|
|
419
|
+
return false;
|
|
420
|
+
const found = [];
|
|
421
|
+
for (const clause of orderBy) {
|
|
422
|
+
findAggregateFunctionExprs(clause.expr, selectContext, found);
|
|
423
|
+
if (found.length > 0)
|
|
424
|
+
return true;
|
|
425
|
+
}
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Given a list of aggregate function call AST nodes, builds aggregate plan nodes
|
|
430
|
+
* for the entries that are not already present in `existingAggregates` (matched by
|
|
431
|
+
* canonical AST string), de-duplicating against each other as well.
|
|
432
|
+
*/
|
|
433
|
+
function dedupeNewAggregates(funcExprs, selectContext, existingAggregates) {
|
|
273
434
|
if (funcExprs.length === 0)
|
|
274
435
|
return [];
|
|
275
|
-
// Build canonical keys from the AST expression stored in existing aggregate plan nodes
|
|
276
436
|
const existingKeys = new Set();
|
|
277
437
|
for (const agg of existingAggregates) {
|
|
278
438
|
if (CapabilityDetectors.isAggregateFunction(agg.expression)) {
|
|
@@ -283,12 +443,10 @@ function collectHavingAggregates(havingExpr, selectContext, existingAggregates)
|
|
|
283
443
|
const newAggregates = [];
|
|
284
444
|
for (const funcExpr of funcExprs) {
|
|
285
445
|
const key = expressionToString(funcExpr).toLowerCase();
|
|
286
|
-
// Skip if already in SELECT aggregates or already collected
|
|
287
446
|
if (existingKeys.has(key))
|
|
288
447
|
continue;
|
|
289
448
|
if (newAggregates.some(a => a.alias.toLowerCase() === key))
|
|
290
449
|
continue;
|
|
291
|
-
// Build the aggregate plan node in the pre-aggregate scope
|
|
292
450
|
const aggNode = buildFunctionCall(selectContext, funcExpr, true);
|
|
293
451
|
newAggregates.push({ expression: aggNode, alias: expressionToString(funcExpr) });
|
|
294
452
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-aggregates.js","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"select-aggregates.js","sourceRoot":"","sources":["../../../../src/planner/building/select-aggregates.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { RegisteredScope } from '../scopes/registered.js';
|
|
|
7
7
|
/**
|
|
8
8
|
* Creates final output projections and applies result column aliases
|
|
9
9
|
*/
|
|
10
|
-
export declare function buildFinalProjections(input: RelationalPlanNode, projections: Projection[], selectScope: Scope, stmt: AST.SelectStmt, selectContext: PlanningContext, preserveInputColumns?: boolean): {
|
|
10
|
+
export declare function buildFinalProjections(input: RelationalPlanNode, projections: Projection[], selectScope: Scope, stmt: AST.SelectStmt, selectContext: PlanningContext, preserveInputColumns?: boolean, selectListAsts?: AST.Expression[]): {
|
|
11
11
|
output: RelationalPlanNode;
|
|
12
12
|
finalContext: PlanningContext;
|
|
13
13
|
projectionScope?: RegisteredScope;
|
|
@@ -20,9 +20,13 @@ export declare function applyDistinct(input: RelationalPlanNode, stmt: AST.Selec
|
|
|
20
20
|
/**
|
|
21
21
|
* Applies ORDER BY clause if not already applied
|
|
22
22
|
*/
|
|
23
|
-
export declare function applyOrderBy(input: RelationalPlanNode, stmt: AST.SelectStmt, selectContext: PlanningContext, preAggregateSort: boolean, projectionScope?: RegisteredScope): RelationalPlanNode;
|
|
23
|
+
export declare function applyOrderBy(input: RelationalPlanNode, stmt: AST.SelectStmt, selectContext: PlanningContext, preAggregateSort: boolean, projectionScope?: RegisteredScope, allowAggregates?: boolean, selectListAsts?: AST.Expression[]): RelationalPlanNode;
|
|
24
24
|
/**
|
|
25
25
|
* Applies LIMIT and OFFSET clauses
|
|
26
26
|
*/
|
|
27
27
|
export declare function applyLimitOffset(input: RelationalPlanNode, stmt: AST.SelectStmt, selectContext: PlanningContext, projectionScope?: RegisteredScope): RelationalPlanNode;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a scope for projection output columns
|
|
30
|
+
*/
|
|
31
|
+
export declare function createProjectionOutputScope(projectionNode: RelationalPlanNode): RegisteredScope;
|
|
28
32
|
//# sourceMappingURL=select-modifiers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-modifiers.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"select-modifiers.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAMxE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAM1D;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,UAAU,EAAE,EACzB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,oBAAoB,GAAE,OAAc,EACpC,cAAc,GAAE,GAAG,CAAC,UAAU,EAAO,GACnC;IACF,MAAM,EAAE,kBAAkB,CAAC;IAC3B,YAAY,EAAE,eAAe,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,gBAAgB,EAAE,OAAO,CAAC;CAC1B,CA6CA;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,WAAW,EAAE,KAAK,GAChB,kBAAkB,CAKpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,gBAAgB,EAAE,OAAO,EACzB,eAAe,CAAC,EAAE,eAAe,EACjC,eAAe,GAAE,OAAe,EAChC,cAAc,GAAE,GAAG,CAAC,UAAU,EAAO,GACnC,kBAAkB,CAsBpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,aAAa,EAAE,eAAe,EAC9B,eAAe,CAAC,EAAE,eAAe,GAC/B,kBAAkB,CAepB;AA+BD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,kBAAkB,GAAG,eAAe,CAW/F"}
|
|
@@ -8,10 +8,11 @@ import { RegisteredScope } from '../scopes/registered.js';
|
|
|
8
8
|
import { ColumnReferenceNode } from '../nodes/reference.js';
|
|
9
9
|
import { buildExpression } from './expression.js';
|
|
10
10
|
import { CapabilityDetectors } from '../framework/characteristics.js';
|
|
11
|
+
import { resolveOrdinalReference } from './select-ordinal.js';
|
|
11
12
|
/**
|
|
12
13
|
* Creates final output projections and applies result column aliases
|
|
13
14
|
*/
|
|
14
|
-
export function buildFinalProjections(input, projections, selectScope, stmt, selectContext, preserveInputColumns = true) {
|
|
15
|
+
export function buildFinalProjections(input, projections, selectScope, stmt, selectContext, preserveInputColumns = true, selectListAsts = []) {
|
|
15
16
|
if (projections.length === 0) {
|
|
16
17
|
return { output: input, finalContext: selectContext, preAggregateSort: false };
|
|
17
18
|
}
|
|
@@ -27,7 +28,8 @@ export function buildFinalProjections(input, projections, selectScope, stmt, sel
|
|
|
27
28
|
// Apply ORDER BY before projection if needed (compile expressions against input scope)
|
|
28
29
|
if (needsPreProjectionSort && stmt.orderBy && stmt.orderBy.length > 0) {
|
|
29
30
|
const sortKeys = stmt.orderBy.map(orderByClause => {
|
|
30
|
-
const
|
|
31
|
+
const resolved = resolveOrdinalReference(orderByClause.expr, selectListAsts, 'ORDER BY');
|
|
32
|
+
const expression = buildExpression(selectContext, resolved ?? orderByClause.expr);
|
|
31
33
|
return {
|
|
32
34
|
expression,
|
|
33
35
|
direction: orderByClause.direction,
|
|
@@ -61,7 +63,7 @@ export function applyDistinct(input, stmt, selectScope) {
|
|
|
61
63
|
/**
|
|
62
64
|
* Applies ORDER BY clause if not already applied
|
|
63
65
|
*/
|
|
64
|
-
export function applyOrderBy(input, stmt, selectContext, preAggregateSort, projectionScope) {
|
|
66
|
+
export function applyOrderBy(input, stmt, selectContext, preAggregateSort, projectionScope, allowAggregates = false, selectListAsts = []) {
|
|
65
67
|
if (stmt.orderBy && stmt.orderBy.length > 0 && !preAggregateSort) {
|
|
66
68
|
// Merge projection scope if available so ORDER BY can reference output column aliases
|
|
67
69
|
let orderByContext = selectContext;
|
|
@@ -70,7 +72,8 @@ export function applyOrderBy(input, stmt, selectContext, preAggregateSort, proje
|
|
|
70
72
|
orderByContext = { ...selectContext, scope: combinedScope };
|
|
71
73
|
}
|
|
72
74
|
const sortKeys = stmt.orderBy.map(orderByClause => {
|
|
73
|
-
const
|
|
75
|
+
const resolved = resolveOrdinalReference(orderByClause.expr, selectListAsts, 'ORDER BY');
|
|
76
|
+
const expression = buildExpression(orderByContext, resolved ?? orderByClause.expr, allowAggregates);
|
|
74
77
|
return {
|
|
75
78
|
expression,
|
|
76
79
|
direction: orderByClause.direction,
|
|
@@ -123,7 +126,7 @@ function shouldApplyOrderByBeforeProjection(stmt, projections) {
|
|
|
123
126
|
/**
|
|
124
127
|
* Creates a scope for projection output columns
|
|
125
128
|
*/
|
|
126
|
-
function createProjectionOutputScope(projectionNode) {
|
|
129
|
+
export function createProjectionOutputScope(projectionNode) {
|
|
127
130
|
const projectionOutputScope = new RegisteredScope();
|
|
128
131
|
const projectionAttributes = projectionNode.getAttributes();
|
|
129
132
|
projectionNode.getType().columns.forEach((col, index) => {
|
|
@@ -144,6 +147,18 @@ function isIdentityProjection(projections, source) {
|
|
|
144
147
|
if (projections.length !== sourceAttrs.length) {
|
|
145
148
|
return false;
|
|
146
149
|
}
|
|
150
|
+
// If the source exposes duplicate column names (e.g., a JOIN with same-named
|
|
151
|
+
// columns on each side), a ProjectNode is required to disambiguate via
|
|
152
|
+
// `name:N` suffixes — otherwise downstream row→object conversion would
|
|
153
|
+
// collapse duplicate keys and silently drop columns.
|
|
154
|
+
const seenNames = new Set();
|
|
155
|
+
for (const attr of sourceAttrs) {
|
|
156
|
+
const lower = attr.name.toLowerCase();
|
|
157
|
+
if (seenNames.has(lower)) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
seenNames.add(lower);
|
|
161
|
+
}
|
|
147
162
|
for (let i = 0; i < projections.length; i++) {
|
|
148
163
|
const proj = projections[i];
|
|
149
164
|
const sourceAttr = sourceAttrs[i];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select-modifiers.js","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAmB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAgB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"select-modifiers.js","sourceRoot":"","sources":["../../../../src/planner/building/select-modifiers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type * as AST from '../../parser/ast.js';
|
|
2
|
+
import type { RelationalPlanNode } from '../nodes/plan-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds the source-order list of AST expressions for a SELECT list, with
|
|
5
|
+
* SELECT * / table.* expanded against the input relation's attributes.
|
|
6
|
+
* Each entry corresponds to one output column, in source order. Used so that
|
|
7
|
+
* GROUP BY / ORDER BY ordinal references (1-based) can resolve back to the
|
|
8
|
+
* AST expression that produced the Nth output column.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildSelectListAsts(columns: AST.ResultColumn[], input: RelationalPlanNode): AST.Expression[];
|
|
11
|
+
/**
|
|
12
|
+
* If `expr` is a bare integer literal (or a unary `-` applied to one), treats it
|
|
13
|
+
* as a 1-based positional reference into `selectListAsts` and returns the
|
|
14
|
+
* corresponding AST expression. Out-of-range / zero / negative ordinals raise
|
|
15
|
+
* an error. Any other expression shape returns null so the caller can fall
|
|
16
|
+
* through to normal expression building (e.g., `group by 1 + 0` keeps its
|
|
17
|
+
* constant-expression semantics).
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveOrdinalReference(expr: AST.Expression, selectListAsts: AST.Expression[], clauseName: 'GROUP BY' | 'ORDER BY'): AST.Expression | null;
|
|
20
|
+
//# sourceMappingURL=select-ordinal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-ordinal.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,GAAG,CAAC,YAAY,EAAE,EAC3B,KAAK,EAAE,kBAAkB,GACvB,GAAG,CAAC,UAAU,EAAE,CAiBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,EAChC,UAAU,EAAE,UAAU,GAAG,UAAU,GACjC,GAAG,CAAC,UAAU,GAAG,IAAI,CAavB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { QuereusError } from '../../common/errors.js';
|
|
2
|
+
import { StatusCode } from '../../common/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds the source-order list of AST expressions for a SELECT list, with
|
|
5
|
+
* SELECT * / table.* expanded against the input relation's attributes.
|
|
6
|
+
* Each entry corresponds to one output column, in source order. Used so that
|
|
7
|
+
* GROUP BY / ORDER BY ordinal references (1-based) can resolve back to the
|
|
8
|
+
* AST expression that produced the Nth output column.
|
|
9
|
+
*/
|
|
10
|
+
export function buildSelectListAsts(columns, input) {
|
|
11
|
+
const result = [];
|
|
12
|
+
for (const column of columns) {
|
|
13
|
+
if (column.type === 'all') {
|
|
14
|
+
const allAttrs = input.getAttributes();
|
|
15
|
+
const matching = column.table
|
|
16
|
+
? allAttrs.filter(attr => attr.relationName?.toLowerCase() === column.table.toLowerCase())
|
|
17
|
+
: allAttrs;
|
|
18
|
+
for (const attr of matching) {
|
|
19
|
+
const colExpr = { type: 'column', name: attr.name };
|
|
20
|
+
result.push(colExpr);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else if (column.type === 'column') {
|
|
24
|
+
result.push(column.expr);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* If `expr` is a bare integer literal (or a unary `-` applied to one), treats it
|
|
31
|
+
* as a 1-based positional reference into `selectListAsts` and returns the
|
|
32
|
+
* corresponding AST expression. Out-of-range / zero / negative ordinals raise
|
|
33
|
+
* an error. Any other expression shape returns null so the caller can fall
|
|
34
|
+
* through to normal expression building (e.g., `group by 1 + 0` keeps its
|
|
35
|
+
* constant-expression semantics).
|
|
36
|
+
*/
|
|
37
|
+
export function resolveOrdinalReference(expr, selectListAsts, clauseName) {
|
|
38
|
+
const value = extractOrdinalValue(expr);
|
|
39
|
+
if (value === null)
|
|
40
|
+
return null;
|
|
41
|
+
if (value < 1 || value > selectListAsts.length) {
|
|
42
|
+
throw new QuereusError(`${clauseName} position ${value} is not in the SELECT list (1..${selectListAsts.length})`, StatusCode.ERROR, undefined, expr.loc?.start.line, expr.loc?.start.column);
|
|
43
|
+
}
|
|
44
|
+
return selectListAsts[value - 1];
|
|
45
|
+
}
|
|
46
|
+
function extractOrdinalValue(expr) {
|
|
47
|
+
if (expr.type === 'literal') {
|
|
48
|
+
const v = expr.value;
|
|
49
|
+
if (typeof v === 'number' && Number.isInteger(v))
|
|
50
|
+
return v;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
// Unary `-N` parses as UnaryExpr(-, Literal(N)). Likewise `+N`.
|
|
54
|
+
if (expr.type === 'unary' && (expr.operator === '-' || expr.operator === '+') && expr.expr.type === 'literal') {
|
|
55
|
+
const v = expr.expr.value;
|
|
56
|
+
if (typeof v === 'number' && Number.isInteger(v)) {
|
|
57
|
+
return expr.operator === '-' ? -v : v;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=select-ordinal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-ordinal.js","sourceRoot":"","sources":["../../../../src/planner/building/select-ordinal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAA2B,EAC3B,KAAyB;IAEzB,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;gBAC5B,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,KAAM,CAAC,WAAW,EAAE,CAAC;gBAC3F,CAAC,CAAC,QAAQ,CAAC;YACZ,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACpE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC;QACF,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACtC,IAAoB,EACpB,cAAgC,EAChC,UAAmC;IAEnC,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,IAAI,YAAY,CACrB,GAAG,UAAU,aAAa,KAAK,kCAAkC,cAAc,CAAC,MAAM,GAAG,EACzF,UAAU,CAAC,KAAK,EAChB,SAAS,EACT,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,EACpB,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CACtB,CAAC;IACH,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAoB;IAChD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;IACb,CAAC;IACD,gEAAgE;IAChE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/G,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC1B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAG/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAc9D,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAItE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/planner/building/select.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,KAAK,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAG/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAc9D,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AAItE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAqBrD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,UAAU,GAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa;AACjD;;;;;GAKG;AACH,oBAAoB,GAAE,OAAc,GACnC,QAAQ,CA4NV;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC9B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,GAAG,CAAC,UAAU,GAClB,UAAU,CAQZ;AAsBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,GAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa,GAAG,kBAAkB,CAqNzJ"}
|