diff --git a/jOOQ/src/main/java/org/jooq/impl/Decode.java b/jOOQ/src/main/java/org/jooq/impl/Decode.java index 2266a6ba42..3b77d11834 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Decode.java +++ b/jOOQ/src/main/java/org/jooq/impl/Decode.java @@ -51,6 +51,8 @@ import static org.jooq.SQLDialect.HSQLDB; // ... import static org.jooq.SQLDialect.MARIADB; // ... +// ... +// ... import static org.jooq.SQLDialect.MYSQL; import static org.jooq.SQLDialect.POSTGRES; // ... @@ -62,6 +64,7 @@ import static org.jooq.SQLDialect.SQLITE; import static org.jooq.SQLDialect.YUGABYTEDB; import static org.jooq.impl.DSL.function; import static org.jooq.impl.Names.N_DECODE; +import static org.jooq.impl.Names.N_DECODE_ORACLE; import static org.jooq.impl.Names.N_MAP; import static org.jooq.impl.Tools.EMPTY_FIELD; @@ -87,7 +90,8 @@ extends implements QOM.Decode { - private static final Set EMULATE_DISTINCT = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB); + private static final Set EMULATE_DECODE_ORACLE = SQLDialect.supportedBy(MARIADB); + private static final Set EMULATE_DISTINCT = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB); @@ -133,6 +137,8 @@ implements + else if (EMULATE_DECODE_ORACLE.contains(ctx.dialect())) + ctx.visit(function(N_DECODE_ORACLE, getDataType(), args())); else ctx.visit(function(N_DECODE, getDataType(), args())); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 7ea9b2ccab..08229a7a32 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -134,6 +134,7 @@ final class Names { static final Name N_DAYS_BETWEEN = systemName("days_between"); static final Name N_DB_NAME = systemName("db_name"); static final Name N_DECODE = systemName("decode"); + static final Name N_DECODE_ORACLE = systemName("decode_oracle"); static final Name N_DEFAULT = systemName("default"); static final Name N_DELETED = systemName("deleted"); static final Name N_DENSE_RANK = systemName("dense_rank"); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 7140f01e80..a5b7569894 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -11123,7 +11123,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { } private final Field parseFieldDecodeIf() { - if (parseFunctionNameIf("DECODE", "MAP")) { + if (parseFunctionNameIf("DECODE", "DECODE_ORACLE", "MAP")) { parse('('); List> fields = parseList(',', c -> c.parseField()); int size = fields.size();