[jOOQ/jOOQ#11485] Add support for Trino DB - WIP
This commit is contained in:
parent
73df9474ef
commit
3116f0e64a
@ -281,7 +281,7 @@ implements
|
||||
}
|
||||
|
||||
final void acceptArguments2(Context<?> ctx, QueryPartCollectionView<Field<?>> args) {
|
||||
acceptArguments3(ctx, args, identity());
|
||||
acceptArguments3(ctx, args, f -> applyMap(ctx, f));
|
||||
}
|
||||
|
||||
final void acceptArguments3(Context<?> ctx, QueryPartCollectionView<Field<?>> args, Function<? super Field<?>, ? extends Field<?>> fun) {
|
||||
@ -295,6 +295,10 @@ implements
|
||||
ctx.visit(wrap(args).map((arg, i) -> applyFilter(ctx, arg, i) ? DSL.when(filter, arg == ASTERISK ? one() : arg) : arg).map(fun));
|
||||
}
|
||||
|
||||
Field<?> applyMap(Context<?> ctx, Field<?> arg) {
|
||||
return arg;
|
||||
}
|
||||
|
||||
boolean applyFilter(Context<?> ctx, Field<?> arg, int i) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -83,6 +83,7 @@ import static org.jooq.SQLDialect.SQLITE;
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.TRINO;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.conf.ParamType.INLINED;
|
||||
@ -703,7 +704,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
|
||||
*/
|
||||
abstract static class InternalBinding<T, U> implements org.jooq.Binding<T, U> {
|
||||
static final Set<SQLDialect> NEEDS_PRECISION_SCALE_ON_BIGDECIMAL = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
|
||||
static final Set<SQLDialect> REQUIRES_JSON_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> REQUIRES_JSON_CAST = SQLDialect.supportedBy(POSTGRES, TRINO, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_ENUM_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_NVARCHAR = SQLDialect.supportedBy(DERBY, FIREBIRD, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
@ -814,6 +815,13 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
|
||||
}
|
||||
}
|
||||
|
||||
if (dataType.isUUID()) {
|
||||
switch (ctx.family()) {
|
||||
case TRINO:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -64,6 +64,7 @@ import static org.jooq.SQLDialect.SQLITE;
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.TRINO;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.conf.WriteIfReadonly.IGNORE;
|
||||
@ -111,7 +112,6 @@ import org.jooq.SQLDialect;
|
||||
import org.jooq.Select;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.exception.DataTypeException;
|
||||
import org.jooq.impl.QOM.UNotYetImplemented;
|
||||
|
||||
/**
|
||||
* @author Lukas Eder
|
||||
@ -121,7 +121,7 @@ extends
|
||||
AbstractQueryPartMap<FieldOrRow, FieldOrRowOrSelect>
|
||||
{
|
||||
|
||||
static final Set<SQLDialect> CASTS_NEEDED = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> CASTS_NEEDED = SQLDialect.supportedBy(POSTGRES, TRINO, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_QUALIFY = SQLDialect.supportedBy(POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> EMULATE_RVE_SET_QUERY = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, IGNITE, MARIADB, MYSQL, SQLITE);
|
||||
|
||||
|
||||
@ -46,6 +46,7 @@ import static org.jooq.Clause.INSERT_VALUES;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.POSTGRES;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.TRINO;
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.conf.WriteIfReadonly.IGNORE;
|
||||
import static org.jooq.conf.WriteIfReadonly.THROW;
|
||||
@ -103,7 +104,7 @@ import org.jooq.impl.Tools.BooleanDataKey;
|
||||
* @author Lukas Eder
|
||||
*/
|
||||
final class FieldMapsForInsert extends AbstractQueryPart implements UNotYetImplemented {
|
||||
static final Set<SQLDialect> CASTS_NEEDED = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> CASTS_NEEDED = SQLDialect.supportedBy(POSTGRES, TRINO, YUGABYTEDB);
|
||||
|
||||
final Table<?> table;
|
||||
final Map<Field<?>, Field<?>> empty;
|
||||
|
||||
@ -268,10 +268,10 @@ implements
|
||||
}
|
||||
}
|
||||
|
||||
static final <T> Field<T[]> absentOnNullIf(
|
||||
static final Field<?> absentOnNullIf(
|
||||
BooleanSupplier test,
|
||||
Function<Field<T[]>, Field<T[]>> e,
|
||||
Field<T[]> array
|
||||
Function<Field<?>, Field<?>> e,
|
||||
Field<?> array
|
||||
) {
|
||||
if (test.getAsBoolean())
|
||||
return function(N_FILTER, array.getDataType(),
|
||||
|
||||
@ -166,7 +166,17 @@ final class ListAgg extends AbstractAggregateFunction<String> implements UNotYet
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean applyFilter(Context<?> ctx, Field<?> arg, int i) {
|
||||
final Field<?> applyMap(Context<?> ctx, Field<?> arg) {
|
||||
switch (ctx.family()) {
|
||||
case TRINO:
|
||||
return arg.getDataType().isString() ? arg : arg.cast(VARCHAR);
|
||||
default:
|
||||
return arg;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
final boolean applyFilter(Context<?> ctx, Field<?> arg, int i) {
|
||||
return i == 0;
|
||||
}
|
||||
|
||||
|
||||
@ -129,7 +129,7 @@ final class Multiset<R extends Record> extends AbstractField<Result<R>> implemen
|
||||
static final Set<SQLDialect> NO_SUPPORT_JSON_COMPARE = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_JSONB_COMPARE = SQLDialect.supportedBy();
|
||||
static final Set<SQLDialect> NO_SUPPORT_XML_COMPARE = SQLDialect.supportedBy(POSTGRES);
|
||||
static final Set<SQLDialect> FORCE_LIMIT_IN_DERIVED_TABLE = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
static final Set<SQLDialect> FORCE_LIMIT_IN_DERIVED_TABLE = SQLDialect.supportedBy(MARIADB, MYSQL, TRINO);
|
||||
|
||||
final TableLike<R> table;
|
||||
final Select<R> select;
|
||||
|
||||
@ -3261,7 +3261,16 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
// [#13509] Force a LIMIT clause to prevent optimisation of "unnecessary" ORDER BY
|
||||
else if (!actualOrderBy.isEmpty() && TRUE.equals(ctx.data(DATA_FORCE_LIMIT_WITH_ORDER_BY))) {
|
||||
Limit l = new Limit();
|
||||
l.setLimit(Long.MAX_VALUE);
|
||||
|
||||
switch (ctx.family()) {
|
||||
case TRINO:
|
||||
l.setLimit(Integer.MAX_VALUE);
|
||||
break;
|
||||
default:
|
||||
l.setLimit(Long.MAX_VALUE);
|
||||
break;
|
||||
}
|
||||
|
||||
ctx.visit(l);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user