From 7018e7a9eee191dc2cb4cb72d18a7f2c883adf12 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Thu, 1 Mar 2018 11:32:35 +0100 Subject: [PATCH] [#7171] [#7237] - [#7237] now() function - [#7171] current_timestamp(), current_time(), and current_date() can be functions, not just literals --- jOOQ/src/main/java/org/jooq/impl/DSL.java | 8 ++++++++ jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 13 +++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index cd1a081716..57134ccb80 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -13550,6 +13550,14 @@ public class DSL { return new CurrentTimestamp(SQLDataType.TIMESTAMP); } + /** + * Synonym for {@link #currentTimestamp()}. + */ + @Support + public static Field now() { + return currentTimestamp(); + } + /** * Get the current_date() function returning a SQL standard diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 3fc8217e5a..10f503e460 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -125,6 +125,7 @@ import static org.jooq.impl.DSL.minDistinct; import static org.jooq.impl.DSL.minute; import static org.jooq.impl.DSL.mode; import static org.jooq.impl.DSL.month; +import static org.jooq.impl.DSL.now; import static org.jooq.impl.DSL.nthValue; import static org.jooq.impl.DSL.ntile; import static org.jooq.impl.DSL.nullif; @@ -3706,11 +3707,11 @@ final class ParserImpl implements Parser { return field; if (D.is(type)) - if (parseKeywordIf(ctx, "CURRENT_TIMESTAMP")) + if (parseKeywordIf(ctx, "CURRENT_TIMESTAMP") && (parseIf(ctx, '(') && parse(ctx, ')') || true)) return currentTimestamp(); - else if (parseKeywordIf(ctx, "CURRENT_TIME")) + else if (parseKeywordIf(ctx, "CURRENT_TIME") && (parseIf(ctx, '(') && parse(ctx, ')') || true)) return currentTime(); - else if (parseKeywordIf(ctx, "CURRENT_DATE")) + else if (parseKeywordIf(ctx, "CURRENT_DATE") && (parseIf(ctx, '(') && parse(ctx, ')') || true)) return currentDate(); if ((field = parseFieldCaseIf(ctx)) != null) @@ -3869,6 +3870,8 @@ final class ParserImpl implements Parser { return field; else if ((field = parseNextvalCurrvalIf(ctx, SequenceMethod.NEXTVAL)) != null) return field; + else if (parseFunctionNameIf(ctx, "NOW") && parse(ctx, '(') && parse(ctx, ')')) + return now(); break; @@ -6917,9 +6920,11 @@ final class ParserImpl implements Parser { return true; } - private static final void parse(ParserContext ctx, char c) { + private static final boolean parse(ParserContext ctx, char c) { if (!parseIf(ctx, c)) throw ctx.unexpectedToken(); + + return true; } private static final boolean parseIf(ParserContext ctx, char c) {