From d7c0fac926bd0128b79331260995178d2cf98076 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 4 Mar 2024 12:29:13 +0100 Subject: [PATCH] [jOOQ/jOOQ#16405] Parser doesn't support GROUPING SETS with specification --- .../main/java/org/jooq/impl/ParserImpl.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index d50e431e2f..d93b19e812 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -1986,7 +1986,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } else if (parseKeywordIf("GROUPING SETS")) { parse('('); - List>> fieldSets = parseList(',', c -> parseFieldsOrEmptyParenthesised()); + List>> fieldSets = parseList(',', c -> parseFieldsOrEmptyOptionallyParenthesised(false)); parse(')'); result.addGroupBy(groupingSets(fieldSets.toArray((Collection[]) EMPTY_COLLECTION))); } @@ -4198,16 +4198,6 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { - - - - - - - - - - @@ -7968,6 +7958,17 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } } + private final List> parseFieldsOrEmptyOptionallyParenthesised(boolean allowUnparenthesisedLists) { + if (peek('(')) + return parseFieldsOrEmptyParenthesised(); + else if (peekEndOfStatement()) + return emptyList(); + else if (allowUnparenthesisedLists) + return parseList(',', c -> c.parseField()); + else + return asList(parseField()); + } + private final SelectField parseSelectField() { return (SelectField) parseFieldOrRow(); }