[jOOQ/jOOQ#14458] Add native DECODE() support in MemSQL and DECODE_ORACLE() support in MariaDB

This commit is contained in:
Lukas Eder 2023-01-09 10:52:13 +01:00
parent a2c7b01331
commit 2bd55c87ca
3 changed files with 9 additions and 2 deletions

View File

@ -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<V, T>
{
private static final Set<SQLDialect> EMULATE_DISTINCT = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
private static final Set<SQLDialect> EMULATE_DECODE_ORACLE = SQLDialect.supportedBy(MARIADB);
private static final Set<SQLDialect> 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()));
}

View File

@ -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");

View File

@ -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<Field<?>> fields = parseList(',', c -> c.parseField());
int size = fields.size();