From f8314b6b7b9555b02a8adfb61709a1bca122b710 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 19 Mar 2018 12:07:13 +0100 Subject: [PATCH] [#7320] Support parsing Oracle TO_DATE() and TO_TIMESTAMP() functions --- .../main/java/org/jooq/impl/ParserImpl.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 414ff79626..d0724c47a7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -204,6 +204,8 @@ import static org.jooq.impl.DSL.tan; import static org.jooq.impl.DSL.tanh; import static org.jooq.impl.DSL.time; import static org.jooq.impl.DSL.timestamp; +import static org.jooq.impl.DSL.toDate; +import static org.jooq.impl.DSL.toTimestamp; import static org.jooq.impl.DSL.translate; import static org.jooq.impl.DSL.trim; import static org.jooq.impl.DSL.trunc; @@ -4356,6 +4358,10 @@ final class ParserImpl implements Parser { return field; else if ((field = parseFieldTimeLiteralIf(ctx)) != null) return field; + else if ((field = parseFieldToDateIf(ctx)) != null) + return field; + else if ((field = parseFieldToTimestampIf(ctx)) != null) + return field; if (N.is(type) || D.is(type)) if ((field = parseFieldTruncIf(ctx)) != null) @@ -5088,6 +5094,34 @@ final class ParserImpl implements Parser { return null; } + private static final Field parseFieldToDateIf(ParserContext ctx) { + if (parseFunctionNameIf(ctx, "TO_DATE")) { + parse(ctx, '('); + Field f1 = (Field) parseField(ctx, S); + parse(ctx, ','); + Field f2 = (Field) parseField(ctx, S); + parse(ctx, ')'); + + return toDate(f1, f2); + } + + return null; + } + + private static final Field parseFieldToTimestampIf(ParserContext ctx) { + if (parseFunctionNameIf(ctx, "TO_TIMESTAMP")) { + parse(ctx, '('); + Field f1 = (Field) parseField(ctx, S); + parse(ctx, ','); + Field f2 = (Field) parseField(ctx, S); + parse(ctx, ')'); + + return toTimestamp(f1, f2); + } + + return null; + } + private static final Field parseFieldRtrimIf(ParserContext ctx) { if (parseFunctionNameIf(ctx, "RTRIM")) { parse(ctx, '(');