From 02ab3c6f9efc784245dbf8b9e23f6fa82de20445 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 9 Mar 2018 13:52:43 +0100 Subject: [PATCH] [#7171] Allow JOIN keywords as columns in SELECT --- .../main/java/org/jooq/impl/ParserImpl.java | 33 ++++++++++++++++--- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 6f2cfd200f..1868098120 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3167,7 +3167,7 @@ final class ParserImpl implements Parser { if (parseKeywordIf(ctx, "AS")) alias = parseIdentifier(ctx); - else if (!peekKeyword(ctx, SELECT_KEYWORDS)) + else if (!peekKeyword(ctx, KEYWORDS_IN_FROM)) alias = parseIdentifierIf(ctx); if (alias != null) { @@ -3373,7 +3373,7 @@ final class ParserImpl implements Parser { List result = new ArrayList(); do { - if (peekKeyword(ctx, SELECT_KEYWORDS)) + if (peekKeyword(ctx, KEYWORDS_IN_SELECT)) throw ctx.exception("Select keywords must be quoted"); QualifiedAsterisk qa; @@ -3389,7 +3389,7 @@ final class ParserImpl implements Parser { if (parseKeywordIf(ctx, "AS")) alias = parseIdentifier(ctx, true); - else if (!peekKeyword(ctx, SELECT_KEYWORDS)) + else if (!peekKeyword(ctx, KEYWORDS_IN_SELECT)) alias = parseIdentifierIf(ctx, true); result.add(alias == null ? field : field.as(alias)); @@ -7562,7 +7562,32 @@ final class ParserImpl implements Parser { REGR_SXY, } - private static final String[] SELECT_KEYWORDS = { + private static final String[] KEYWORDS_IN_SELECT = { + "CONNECT", + "EXCEPT", + "FETCH", + "FOR", + "FROM", + "FULL", + "GO", // The T-SQL statement batch delimiter, not a SELECT keyword + "GROUP BY", + "HAVING", + "INTERSECT", + "INTO", + "LIMIT", + "MINUS", + "OFFSET", + "ORDER BY", + "PARTITION", + "RETURNING", + "SELECT", + "START", + "UNION", + "WHERE", + "WITH", + }; + + private static final String[] KEYWORDS_IN_FROM = { "CONNECT", "CROSS", "EXCEPT",