diff --git a/jOOQ/src/main/java/org/jooq/impl/Choose.java b/jOOQ/src/main/java/org/jooq/impl/Choose.java index 7b3b1e8372..5b7a1cf6b3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Choose.java +++ b/jOOQ/src/main/java/org/jooq/impl/Choose.java @@ -40,7 +40,7 @@ package org.jooq.impl; import static org.jooq.impl.DSL.choose; import static org.jooq.impl.DSL.function; import static org.jooq.impl.DSL.inline; -import static org.jooq.impl.Names.N_CHOOSE; +import static org.jooq.impl.Names.*; import static org.jooq.impl.Tools.EMPTY_FIELD; import static org.jooq.impl.Tools.nullSafeDataType; @@ -96,16 +96,12 @@ final class Choose extends AbstractField implements QOM.Choose { - - case CUBRID: case DERBY: case FIREBIRD: case H2: case HSQLDB: case IGNITE: - case MARIADB: - case MYSQL: case POSTGRES: case SQLITE: case YUGABYTEDB: { @@ -121,6 +117,14 @@ final class Choose extends AbstractField implements QOM.Choose { break; } + + + case MARIADB: + case MYSQL: { + ctx.visit(function(N_ELT, getDataType(), Tools.combine(index, values))); + break; + } + default: { ctx.visit(function(N_CHOOSE, getDataType(), Tools.combine(index, values))); break; diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 77852f8ee3..7ea9b2ccab 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -139,6 +139,7 @@ final class Names { static final Name N_DENSE_RANK = systemName("dense_rank"); static final Name N_DIV = systemName("div"); static final Name N_DUAL = systemName("dual"); + static final Name N_ELT = systemName("elt"); static final Name N_EVERY = systemName("every"); static final Name N_EXTRACT = systemName("extract"); static final Name N_FIRST_VALUE = systemName("first_value"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 1b7ff7782d..7140f01e80 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -8560,14 +8560,14 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { // [#6704] PostgreSQL E'...' escaped string literals if (characterNext() == '\'') return inline(parseStringLiteral()); - else if ((field = parseFieldExtractIf()) != null) return field; else if (parseFunctionNameIf("EXP")) return exp((Field) parseFieldNumericOpParenthesised()); - else if (parseFunctionNameIf("EPOCH")) return epoch(parseFieldParenthesised()); + else if ((field = parseFieldChooseIf()) != null) + return field; break; @@ -11143,7 +11143,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } private final Field parseFieldChooseIf() { - if (parseFunctionNameIf("CHOOSE")) { + if (parseFunctionNameIf("CHOOSE", "ELT")) { parse('('); Field index = (Field) parseField(); parse(',');