[jOOQ/jOOQ#14159] Add parser support for <grouping column reference list>

This commit is contained in:
Lukas Eder 2022-11-01 14:16:25 +01:00
parent 5ca35f80b0
commit 1f04775894

View File

@ -1924,7 +1924,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
result.addGroupBy(groupingSets(fieldSets.toArray((Collection[]) EMPTY_COLLECTION)));
}
else {
groupBy = parseList(',', c -> c.parseField());
groupBy = parseOrdinaryGroupingSets();
if (parseKeywordIf("WITH ROLLUP"))
result.addGroupBy(rollup(groupBy.toArray(EMPTY_FIELD)));
@ -1938,6 +1938,30 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
return false;
}
private final List<GroupField> parseOrdinaryGroupingSets() {
List<GroupField> result = new ArrayList<>();
do {
// [#14159] Explicit ROW expressions are actual RowAsFields.
// Other parenthesised expressions are grouping column reference lists
if (peekKeyword("ROW")) {
result.add(parseField());
}
else {
FieldOrRow fr = parseFieldOrRow();
if (fr instanceof Field<?> f)
result.add(f);
else
result.addAll(asList(((Row) fr).fields()));
}
}
while (parseIf(','));
return result;
}
private final boolean parseQueryPrimaryConnectBy(SelectQueryImpl<Record> result) {
if (!ignoreProEdition() && parseKeywordIf("CONNECT BY") && requireProEdition()) {