[#7320] Support parsing Oracle TO_DATE() and TO_TIMESTAMP() functions

This commit is contained in:
lukaseder 2018-03-19 12:07:13 +01:00
parent cc6ed7f861
commit f8314b6b7b

View File

@ -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<String> f1 = (Field) parseField(ctx, S);
parse(ctx, ',');
Field<String> 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<String> f1 = (Field) parseField(ctx, S);
parse(ctx, ',');
Field<String> 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, '(');