From 61a827c6820dd46fdbc910cf166162600d1332a6 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 1 Jun 2021 11:35:24 +0200 Subject: [PATCH] [jOOQ/jOOQ#11938] Support parsing Snowflake style DATEADD() function with date part as string literal --- .../main/java/org/jooq/impl/ParserImpl.java | 20 +++++++++++++++---- 1 file changed, 16 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 547cee3b5e..3a7404f89a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -8019,7 +8019,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return bitNot((Field) x); } - else if (parseKeywordIf("BIN_SHL")) { + else if (parseKeywordIf("BIN_SHL", "BITSHIFTLEFT")) { parse('('); Field x = toField(parseNumericOp(N)); parse(','); @@ -8028,7 +8028,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return shl((Field) x, (Field) y); } - else if (parseKeywordIf("BIN_SHR")) { + else if (parseKeywordIf("BIN_SHR", "BITSHIFTRIGHT")) { parse('('); Field x = toField(parseNumericOp(N)); parse(','); @@ -9141,9 +9141,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { default: - parse('\''); part = parseDatePart(); - parse('\''); parse(','); field = parseField(D); break; @@ -9266,6 +9264,20 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } private final DatePart parseDatePartIf() { + int p = position(); + boolean string = parseIf('\''); + + DatePart result = parseDatePartIf0(); + + if (result == null) + position(p); + else if (string) + parse('\''); + + return result; + } + + private final DatePart parseDatePartIf0() { char character = characterUpper(); switch (character) {