[jOOQ/jOOQ#14457] Add support for MySQL style ELT() function (equivalent to CHOOSE())

This commit is contained in:
Lukas Eder 2023-01-09 10:39:25 +01:00
parent bf67ad6b8e
commit a2c7b01331
3 changed files with 13 additions and 8 deletions

View File

@ -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<T> extends AbstractField<T> implements QOM.Choose<T> {
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<T> extends AbstractField<T> implements QOM.Choose<T> {
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;

View File

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

View File

@ -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<Integer> index = (Field<Integer>) parseField();
parse(',');