From 809286d325de24eaf6f20ab39c17714730f5d989 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 26 Sep 2018 11:42:10 +0200 Subject: [PATCH] [#7518] Add support for parsing DATEDIFF(d1, d2) --- .../main/resources/org/jooq/web/grammar-3.12.txt | 1 + jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt index 27f8514940..d7ab1707df 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt @@ -655,6 +655,7 @@ term = | 'CURTIME' '(' ')' | dateLiteral | 'DATEADD' '(' datePart ',' field ',' field ')' +| 'DATEDIFF' '(' [ datePart ',' ] field ',' field ')' | 'DATE_TRUNC' '(' stringLiteral ',' field ')' | 'DAY' '(' field ')' | 'DAYOFMONTH' '(' field ')' diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 93199d6c64..0fa6d6ada0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -4530,6 +4530,8 @@ final class ParserImpl implements Parser { return field; else if ((field = parseFieldDateAddIf(ctx)) != null) return field; + else if ((field = parseFieldDateDiffIf(ctx)) != null) + return field; if (N.is(type)) if ((field = parseFieldDenseRankIf(ctx)) != null) @@ -5504,6 +5506,20 @@ final class ParserImpl implements Parser { return null; } + private static final Field parseFieldDateDiffIf(ParserContext ctx) { + if (parseFunctionNameIf(ctx, "DATEDIFF")) { + parse(ctx, '('); + Field d1 = (Field) parseField(ctx, Type.D); + parse(ctx, ','); + Field d2 = (Field) parseField(ctx, Type.D); + parse(ctx, ')'); + + return DSL.dateDiff(d1, d2); + } + + return null; + } + private static final Date parseDateLiteral(ParserContext ctx) { try { return Date.valueOf(parseStringLiteral(ctx));