From d1db74fc4bf3dd9f76253bb043ce36650539f6a5 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 4 Dec 2020 09:07:43 +0100 Subject: [PATCH] [jOOQ/jOOQ#11089] Add parser support for COERCE(x AS ) --- jOOQ/src/main/java/org/jooq/impl/ParserImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index db549c8396..95d221387f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -87,6 +87,7 @@ import static org.jooq.impl.DSL.characterSet; import static org.jooq.impl.DSL.check; import static org.jooq.impl.DSL.choose; import static org.jooq.impl.DSL.coalesce; +import static org.jooq.impl.DSL.coerce; import static org.jooq.impl.DSL.collation; import static org.jooq.impl.DSL.concat; import static org.jooq.impl.DSL.condition; @@ -9438,14 +9439,17 @@ final class ParserImpl implements Parser { } private static final Field parseFieldCastIf(ParserContext ctx) { - if (parseFunctionNameIf(ctx, "CAST")) { + boolean cast = parseFunctionNameIf(ctx, "CAST"); + boolean coerce = !cast && parseFunctionNameIf(ctx, "COERCE"); + + if (cast || coerce) { parse(ctx, '('); Field field = parseField(ctx); parseKeyword(ctx, "AS"); DataType type = parseCastDataType(ctx); parse(ctx, ')'); - return cast(field, type); + return cast ? cast(field, type) : coerce(field, type); } return null;