[jOOQ/jOOQ#7539] Support for SQLDialect.CLICKHOUSE - WIP
This commit is contained in:
parent
0116bd8a11
commit
9e496d1e1d
@ -73,13 +73,16 @@ import static org.jooq.SQLDialect.TRINO;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.conf.ParamType.INDEXED;
|
||||
import static org.jooq.impl.DSL.array;
|
||||
import static org.jooq.impl.DSL.falseCondition;
|
||||
import static org.jooq.impl.DSL.row;
|
||||
import static org.jooq.impl.DSL.trueCondition;
|
||||
import static org.jooq.impl.Keywords.K_AND;
|
||||
import static org.jooq.impl.Keywords.K_IN;
|
||||
import static org.jooq.impl.Keywords.K_NOT;
|
||||
import static org.jooq.impl.Keywords.K_NOT_IN;
|
||||
import static org.jooq.impl.Keywords.K_OR;
|
||||
import static org.jooq.impl.Names.N_HAS;
|
||||
import static org.jooq.impl.QueryPartListView.wrap;
|
||||
import static org.jooq.impl.Tools.EMPTY_FIELD;
|
||||
import static org.jooq.impl.Tools.anyMatch;
|
||||
@ -154,10 +157,21 @@ abstract class AbstractInList<T> extends AbstractCondition {
|
||||
|
||||
|
||||
|
||||
|
||||
// [#7539] Work around https://github.com/ClickHouse/ClickHouse/issues/58242
|
||||
else if (ctx.family() == CLICKHOUSE && anyMatch(values, v -> !(v instanceof Val)))
|
||||
acceptClickHouse(ctx);
|
||||
else
|
||||
accept0(ctx);
|
||||
}
|
||||
|
||||
private final void acceptClickHouse(Context<?> ctx) {
|
||||
if (!(this instanceof InList))
|
||||
ctx.visit(K_NOT).sql(' ');
|
||||
|
||||
ctx.visit(N_HAS).sql('(').visit(array(values)).sql(", ").visit(field).sql(')');
|
||||
}
|
||||
|
||||
private final void accept0(Context<?> ctx) {
|
||||
accept1(ctx, this instanceof InList, field, values);
|
||||
}
|
||||
|
||||
@ -98,10 +98,9 @@ final class Array<T> extends AbstractField<T[]> implements QOM.Array<T> {
|
||||
c -> {
|
||||
switch (ctx.family()) {
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
case CLICKHOUSE:
|
||||
ctx.visit(K_ARRAY).sql('(').visit(fields).sql(')');
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx.visit(K_ARRAY).sql('[').visit(fields).sql(']');
|
||||
|
||||
@ -47,6 +47,7 @@ import static org.jooq.Clause.CONDITION_NOT_BETWEEN_SYMMETRIC;
|
||||
// ...
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.CLICKHOUSE;
|
||||
import static org.jooq.SQLDialect.CUBRID;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.DERBY;
|
||||
@ -103,7 +104,7 @@ final class BetweenCondition<T> extends AbstractCondition implements BetweenAndS
|
||||
private static final Clause[] CLAUSES_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_BETWEEN_SYMMETRIC };
|
||||
private static final Clause[] CLAUSES_NOT_BETWEEN = { CONDITION, CONDITION_NOT_BETWEEN };
|
||||
private static final Clause[] CLAUSES_NOT_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_NOT_BETWEEN_SYMMETRIC };
|
||||
private static final Set<SQLDialect> NO_SUPPORT_SYMMETRIC = SQLDialect.supportedBy(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_SYMMETRIC = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
private final boolean symmetric;
|
||||
private final boolean not;
|
||||
|
||||
@ -29201,7 +29201,7 @@ public class DSL {
|
||||
* Create an array literal.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
public static <T> Field<T[]> array(T... values) {
|
||||
return array(Tools.fields(values));
|
||||
}
|
||||
@ -29211,7 +29211,7 @@ public class DSL {
|
||||
*/
|
||||
@SafeVarargs
|
||||
@NotNull
|
||||
@Support({ H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
public static <T> Field<T[]> array(Field<T>... fields) {
|
||||
return array(Arrays.asList(fields));
|
||||
}
|
||||
@ -29220,7 +29220,7 @@ public class DSL {
|
||||
* Create an array literal.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
public static <T> Field<T[]> array(Collection<? extends Field<T>> fields) {
|
||||
return new Array<>(fields);
|
||||
}
|
||||
|
||||
@ -144,6 +144,7 @@ final class Names {
|
||||
static final Name N_groupBitOr = systemName("groupBitOr");
|
||||
static final Name N_groupBitXnor = systemName("groupBitXnor");
|
||||
static final Name N_groupBitXor = systemName("groupBitXor");
|
||||
static final Name N_HAS = systemName("has");
|
||||
static final Name N_HASHBYTES = systemName("hashbytes");
|
||||
static final Name N_HASH_MD5 = systemName("hash_md5");
|
||||
static final Name N_HEX_TO_BINARY = systemName("hex_to_binary");
|
||||
|
||||
@ -169,7 +169,7 @@ implements
|
||||
private static final Clause[] CLAUSES_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_BETWEEN_SYMMETRIC };
|
||||
private static final Clause[] CLAUSES_NOT_BETWEEN = { CONDITION, CONDITION_NOT_BETWEEN };
|
||||
private static final Clause[] CLAUSES_NOT_BETWEEN_SYMMETRIC = { CONDITION, CONDITION_NOT_BETWEEN_SYMMETRIC };
|
||||
private static final Set<SQLDialect> NO_SUPPORT_SYMMETRIC = SQLDialect.supportedBy(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_SYMMETRIC = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> EMULATE_BETWEEN = SQLDialect.supportedBy(CUBRID, DERBY, DUCKDB, FIREBIRD, MARIADB, MYSQL);
|
||||
|
||||
private final boolean symmetric;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user