[jOOQ/jOOQ#7539] Support for SQLDialect.CLICKHOUSE - WIP
This commit is contained in:
parent
37a61f9cf4
commit
7e22b9818e
@ -117,7 +117,7 @@ public interface AlterTableStep {
|
||||
* @see DSLContext#commentOnTable(Table)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
AlterTableFinalStep comment(String comment);
|
||||
|
||||
/**
|
||||
@ -127,7 +127,7 @@ public interface AlterTableStep {
|
||||
* @see DSLContext#commentOnTable(Table)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
AlterTableFinalStep comment(Comment comment);
|
||||
|
||||
/**
|
||||
|
||||
@ -73,35 +73,35 @@ public interface AlterViewStep {
|
||||
/**
|
||||
* Add the <code>COMMENT</code> clause to the <code>ALTER VIEW</code> statement.
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
AlterViewFinalStep comment(@Stringly.Comment String comment);
|
||||
|
||||
/**
|
||||
* Add the <code>COMMENT</code> clause to the <code>ALTER VIEW</code> statement.
|
||||
*/
|
||||
@Support({ FIREBIRD, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
AlterViewFinalStep comment(Comment comment);
|
||||
|
||||
/**
|
||||
* Add the <code>RENAME TO</code> clause to the <code>ALTER VIEW</code> statement.
|
||||
*/
|
||||
@Support({ DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
AlterViewFinalStep renameTo(@Stringly.Name String renameTo);
|
||||
|
||||
/**
|
||||
* Add the <code>RENAME TO</code> clause to the <code>ALTER VIEW</code> statement.
|
||||
*/
|
||||
@Support({ DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
AlterViewFinalStep renameTo(Name renameTo);
|
||||
|
||||
/**
|
||||
* Add the <code>RENAME TO</code> clause to the <code>ALTER VIEW</code> statement.
|
||||
*/
|
||||
@Support({ DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
AlterViewFinalStep renameTo(Table<?> renameTo);
|
||||
|
||||
|
||||
@ -73,14 +73,14 @@ public interface CreateTableCommentStep extends CreateTableStorageStep {
|
||||
/**
|
||||
* Add the <code>COMMENT</code> clause to the <code>CREATE TABLE</code> statement.
|
||||
*/
|
||||
@Support({ FIREBIRD, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, FIREBIRD, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
CreateTableStorageStep comment(@Stringly.Comment String comment);
|
||||
|
||||
/**
|
||||
* Add the <code>COMMENT</code> clause to the <code>CREATE TABLE</code> statement.
|
||||
*/
|
||||
@Support({ FIREBIRD, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, FIREBIRD, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@NotNull @CheckReturnValue
|
||||
CreateTableStorageStep comment(Comment comment);
|
||||
}
|
||||
|
||||
@ -9708,7 +9708,7 @@ public interface DSLContext extends Scope {
|
||||
* @see DSL#alterView(Table, Field...)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
AlterViewStep alterView(Table<?> view, Field<?>... fields);
|
||||
|
||||
/**
|
||||
@ -9717,7 +9717,7 @@ public interface DSLContext extends Scope {
|
||||
* @see DSL#alterView(Table, Collection)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
AlterViewStep alterView(Table<?> view, Collection<? extends Field<?>> fields);
|
||||
|
||||
/**
|
||||
|
||||
@ -300,7 +300,7 @@ extends
|
||||
* as {@link DSLContext#createTable(Table)}.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
Field<T> comment(String comment);
|
||||
|
||||
/**
|
||||
@ -308,7 +308,7 @@ extends
|
||||
* as {@link DSLContext#createTable(Table)}.
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, YUGABYTEDB })
|
||||
Field<T> comment(Comment comment);
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
|
||||
@ -38,6 +38,7 @@
|
||||
package org.jooq;
|
||||
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.CLICKHOUSE;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.CUBRID;
|
||||
// ...
|
||||
@ -136,7 +137,7 @@ public interface SelectDistinctOnStep<R extends Record> extends SelectIntoStep<R
|
||||
* it is added explicitly via the jOOQ API.
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
SelectIntoStep<R> on(SelectFieldOrAsterisk... fields);
|
||||
|
||||
/**
|
||||
@ -147,7 +148,7 @@ public interface SelectDistinctOnStep<R extends Record> extends SelectIntoStep<R
|
||||
* it is added explicitly via the jOOQ API.
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
SelectIntoStep<R> on(Collection<? extends SelectFieldOrAsterisk> fields);
|
||||
|
||||
/**
|
||||
@ -155,7 +156,7 @@ public interface SelectDistinctOnStep<R extends Record> extends SelectIntoStep<R
|
||||
* <code>SELECT DISTINCT ON (…)</code> statement.
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
SelectIntoStep<R> distinctOn(SelectFieldOrAsterisk... fields);
|
||||
|
||||
/**
|
||||
@ -163,6 +164,6 @@ public interface SelectDistinctOnStep<R extends Record> extends SelectIntoStep<R
|
||||
* <code>SELECT DISTINCT ON (…)</code> statement.
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
SelectIntoStep<R> distinctOn(Collection<? extends SelectFieldOrAsterisk> fields);
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ public interface SelectQuery<R extends Record> extends Select<R>, ConditionProvi
|
||||
* <p>
|
||||
* This also sets the <code>distinct</code> flag to <code>true</code>
|
||||
*/
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
void addDistinctOn(SelectFieldOrAsterisk... fields);
|
||||
|
||||
/**
|
||||
@ -138,7 +138,7 @@ public interface SelectQuery<R extends Record> extends Select<R>, ConditionProvi
|
||||
* <p>
|
||||
* This also sets the <code>distinct</code> flag to <code>true</code>
|
||||
*/
|
||||
@Support({ CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, CUBRID, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB })
|
||||
void addDistinctOn(Collection<? extends SelectFieldOrAsterisk> fields);
|
||||
|
||||
/**
|
||||
|
||||
@ -183,7 +183,7 @@ implements
|
||||
private static final Clause[] CLAUSES = { Clause.ALTER_VIEW };
|
||||
private static final Set<SQLDialect> NO_SUPPORT_RENAME_IF_EXISTS = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_IF_EXISTS = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD);
|
||||
private static final Set<SQLDialect> SUPPORT_ALTER_TABLE_RENAME = SQLDialect.supportedBy(HSQLDB, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> SUPPORT_ALTER_TABLE_RENAME = SQLDialect.supportedBy(CLICKHOUSE, HSQLDB, YUGABYTEDB);
|
||||
|
||||
private final boolean supportsIfExists(Context<?> ctx) {
|
||||
if (renameTo != null)
|
||||
@ -263,6 +263,7 @@ implements
|
||||
return;
|
||||
}
|
||||
|
||||
if (renameTo != null) {
|
||||
|
||||
|
||||
|
||||
@ -280,7 +281,11 @@ implements
|
||||
|
||||
|
||||
|
||||
|
||||
if (SUPPORT_ALTER_TABLE_RENAME.contains(ctx.dialect())) {
|
||||
ctx.visit((ifExists ? alterTableIfExists(view) : alterTable(view)).renameTo(renameTo));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
accept1(ctx);
|
||||
}
|
||||
@ -337,12 +342,10 @@ implements
|
||||
ctx.start(Clause.ALTER_VIEW_VIEW)
|
||||
.visit(K_ALTER).sql(' ');
|
||||
|
||||
if (SUPPORT_ALTER_TABLE_RENAME.contains(ctx.dialect()))
|
||||
ctx.visit(K_TABLE).sql(' ');
|
||||
else if (materialized)
|
||||
ctx.visit(K_MATERIALIZED).sql(' ').visit(K_VIEW).sql(' ');
|
||||
if (materialized)
|
||||
ctx.visit(K_MATERIALIZED).sql(' ').visit(K_VIEW);
|
||||
else
|
||||
ctx.visit(K_VIEW).sql(' ');
|
||||
ctx.visit(K_VIEW);
|
||||
|
||||
if (ifExists && supportsIfExists(ctx))
|
||||
ctx.sql(' ').visit(K_IF_EXISTS);
|
||||
|
||||
@ -39,6 +39,8 @@ package org.jooq.impl;
|
||||
|
||||
import static java.util.Arrays.asList;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.CLICKHOUSE;
|
||||
// ...
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.POSTGRES;
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
@ -66,9 +68,10 @@ import org.jooq.impl.QOM.UnmodifiableList;
|
||||
*/
|
||||
final class Array<T> extends AbstractField<T[]> implements QOM.Array<T> {
|
||||
|
||||
private static final Set<SQLDialect> REQUIRES_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> REQUIRES_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_SQUARE_BRACKETS = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
|
||||
final FieldsImpl<Record> fields;
|
||||
final FieldsImpl<Record> fields;
|
||||
|
||||
Array(Collection<? extends Field<T>> fields) {
|
||||
super(N_ARRAY, type(fields));
|
||||
@ -96,16 +99,10 @@ final class Array<T> extends AbstractField<T[]> implements QOM.Array<T> {
|
||||
default:
|
||||
renderCastIf(ctx,
|
||||
c -> {
|
||||
switch (ctx.family()) {
|
||||
|
||||
case CLICKHOUSE:
|
||||
ctx.visit(K_ARRAY).sql('(').visit(fields).sql(')');
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx.visit(K_ARRAY).sql('[').visit(fields).sql(']');
|
||||
break;
|
||||
}
|
||||
if (NO_SUPPORT_SQUARE_BRACKETS.contains(ctx.dialect()))
|
||||
ctx.visit(K_ARRAY).sql('(').visit(fields).sql(')');
|
||||
else
|
||||
ctx.visit(K_ARRAY).sql('[').visit(fields).sql(']');
|
||||
},
|
||||
c -> {
|
||||
DataType<?> type = (DataType<?>) c.data(DATA_EMPTY_ARRAY_BASE_TYPE);
|
||||
|
||||
@ -37,10 +37,17 @@
|
||||
*/
|
||||
package org.jooq.impl;
|
||||
|
||||
import static org.jooq.SQLDialect.CLICKHOUSE;
|
||||
// ...
|
||||
import static org.jooq.impl.DSL.inline;
|
||||
import static org.jooq.impl.Keywords.K_AS;
|
||||
import static org.jooq.impl.Keywords.*;
|
||||
import static org.jooq.impl.Keywords.K_CAST;
|
||||
import static org.jooq.impl.Keywords.K_CONVERSION;
|
||||
import static org.jooq.impl.Keywords.K_DEFAULT;
|
||||
import static org.jooq.impl.Keywords.K_ERROR;
|
||||
import static org.jooq.impl.Keywords.K_NULL;
|
||||
import static org.jooq.impl.Keywords.K_ON;
|
||||
import static org.jooq.impl.Keywords.K_TRIM;
|
||||
import static org.jooq.impl.Names.N_CAST;
|
||||
import static org.jooq.impl.Names.N_SAFE_CAST;
|
||||
import static org.jooq.impl.Names.N_TO_CLOB;
|
||||
@ -48,6 +55,7 @@ import static org.jooq.impl.Names.N_TO_DATE;
|
||||
import static org.jooq.impl.Names.N_TO_TIMESTAMP;
|
||||
import static org.jooq.impl.Names.N_TRY_CAST;
|
||||
import static org.jooq.impl.Names.N_XMLTYPE;
|
||||
import static org.jooq.impl.Names.N_accurateCastOrNull;
|
||||
import static org.jooq.impl.SQLDataType.BOOLEAN;
|
||||
import static org.jooq.impl.SQLDataType.CHAR;
|
||||
import static org.jooq.impl.SQLDataType.DECIMAL;
|
||||
@ -387,6 +395,10 @@ final class Cast<T> extends AbstractField<T> implements QOM.Cast<T> {
|
||||
|
||||
|
||||
|
||||
case CLICKHOUSE:
|
||||
ctx.visit(N_accurateCastOrNull);
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx.visit(N_TRY_CAST);
|
||||
break;
|
||||
@ -397,7 +409,12 @@ final class Cast<T> extends AbstractField<T> implements QOM.Cast<T> {
|
||||
|
||||
ctx.sql('(').castMode(CastMode.NEVER);
|
||||
expression.accept(ctx);
|
||||
ctx.castMode(castMode).sql(' ').visit(K_AS).sql(' ');
|
||||
ctx.castMode(castMode);
|
||||
|
||||
if (tryCast && ctx.family() == CLICKHOUSE)
|
||||
ctx.sql(", '").stringLiteral(true);
|
||||
else
|
||||
ctx.sql(' ').visit(K_AS).sql(' ');
|
||||
|
||||
switch (ctx.family()) {
|
||||
case CLICKHOUSE:
|
||||
@ -411,6 +428,9 @@ final class Cast<T> extends AbstractField<T> implements QOM.Cast<T> {
|
||||
break;
|
||||
}
|
||||
|
||||
if (tryCast)
|
||||
if (ctx.family() == CLICKHOUSE)
|
||||
ctx.stringLiteral(false).sql('\'');
|
||||
|
||||
|
||||
|
||||
|
||||
@ -688,7 +688,7 @@ final class Convert {
|
||||
return from(((Optional) from).orElse(null), scope);
|
||||
|
||||
// Regular checks
|
||||
else if (fromClass == byte[].class) {
|
||||
else if (fromClass == byte[].class && !toClass.isArray()) {
|
||||
|
||||
// [#5824] UUID's most significant bits in byte[] are first
|
||||
if (toClass == UUID.class) {
|
||||
|
||||
@ -7842,7 +7842,7 @@ public class DSL {
|
||||
* @see DSLContext#alterView(Table, Field...)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
public static org.jooq.AlterViewStep alterView(Table<?> view, Field<?>... fields) {
|
||||
return dsl().alterView(view, fields);
|
||||
}
|
||||
@ -7857,7 +7857,7 @@ public class DSL {
|
||||
* @see DSLContext#alterView(Table, Collection)
|
||||
*/
|
||||
@NotNull @CheckReturnValue
|
||||
@Support({ DUCKDB, FIREBIRD, H2, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
@Support({ CLICKHOUSE, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO, YUGABYTEDB })
|
||||
public static org.jooq.AlterViewStep alterView(Table<?> view, Collection<? extends Field<?>> fields) {
|
||||
return dsl().alterView(view, fields);
|
||||
}
|
||||
@ -22621,7 +22621,7 @@ public class DSL {
|
||||
* @param dataType The data type to try to cast the value to
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ DUCKDB, TRINO })
|
||||
@Support({ CLICKHOUSE, DUCKDB, TRINO })
|
||||
public static <T> Field<T> tryCast(Object value, DataType<T> dataType) {
|
||||
return new TryCast<>(Tools.field(value), dataType);
|
||||
}
|
||||
@ -22633,7 +22633,7 @@ public class DSL {
|
||||
* @param dataType The data type to try to cast the value to
|
||||
*/
|
||||
@NotNull
|
||||
@Support({ DUCKDB, TRINO })
|
||||
@Support({ CLICKHOUSE, DUCKDB, TRINO })
|
||||
public static <T> Field<T> tryCast(Field<?> value, DataType<T> dataType) {
|
||||
return new TryCast<>(value, dataType);
|
||||
}
|
||||
|
||||
@ -90,6 +90,7 @@ import static org.jooq.SQLDialect.TRINO;
|
||||
// ...
|
||||
import static org.jooq.SQLDialect.YUGABYTEDB;
|
||||
import static org.jooq.conf.ParamType.INLINED;
|
||||
import static org.jooq.impl.Array.NO_SUPPORT_SQUARE_BRACKETS;
|
||||
import static org.jooq.impl.Convert.convert;
|
||||
import static org.jooq.impl.Convert.patchIso8601Timestamp;
|
||||
import static org.jooq.impl.DSL.cast;
|
||||
@ -1327,7 +1328,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
|
||||
|
||||
// By default, render HSQLDB syntax
|
||||
else {
|
||||
boolean squareBrackets = true;
|
||||
boolean squareBrackets = !NO_SUPPORT_SQUARE_BRACKETS.contains(ctx.dialect());
|
||||
|
||||
ctx.render().visit(K_ARRAY);
|
||||
ctx.render().sql(squareBrackets ? '[' : '(');
|
||||
@ -1383,6 +1384,7 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
|
||||
ctx.statement().setString(ctx.index(), toPGArrayString(value));
|
||||
break;
|
||||
}
|
||||
|
||||
case HSQLDB: {
|
||||
Object[] a = value;
|
||||
Class<?> t = dataType.getType();
|
||||
@ -1397,10 +1399,13 @@ public class DefaultBinding<T, U> implements Binding<T, U> {
|
||||
ctx.statement().setArray(ctx.index(), new MockArray(ctx.family(), a, t));
|
||||
break;
|
||||
}
|
||||
|
||||
case CLICKHOUSE:
|
||||
case H2: {
|
||||
ctx.statement().setObject(ctx.index(), value);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
throw new SQLDialectNotSupportedException("Cannot bind ARRAY types in dialect " + ctx.family());
|
||||
}
|
||||
|
||||
@ -138,18 +138,18 @@ implements
|
||||
QOM.Delete<R>
|
||||
{
|
||||
|
||||
private static final Clause[] CLAUSES = { DELETE };
|
||||
private static final Set<SQLDialect> SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
private static final Clause[] CLAUSES = { DELETE };
|
||||
static final Set<SQLDialect> SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
|
||||
// LIMIT is not supported at all
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
// LIMIT is supported but not ORDER BY
|
||||
private static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
private static final Set<SQLDialect> SUPPORT_MULTITABLE_DELETE = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
private static final Set<SQLDialect> REQUIRE_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
static final Set<SQLDialect> SUPPORT_MULTITABLE_DELETE = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
static final Set<SQLDialect> REQUIRE_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(MARIADB, MYSQL);
|
||||
static final Set<SQLDialect> NO_SUPPORT_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
|
||||
|
||||
|
||||
@ -158,12 +158,12 @@ implements
|
||||
|
||||
|
||||
// https://github.com/ClickHouse/ClickHouse/issues/61020
|
||||
static final Set<SQLDialect> NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
|
||||
private final TableList using;
|
||||
private final ConditionProviderImpl condition;
|
||||
private final SortFieldList orderBy;
|
||||
private Field<? extends Number> limit;
|
||||
private final TableList using;
|
||||
private final ConditionProviderImpl condition;
|
||||
private final SortFieldList orderBy;
|
||||
private Field<? extends Number> limit;
|
||||
|
||||
DeleteQueryImpl(Configuration configuration, WithImpl with, Table<R> table) {
|
||||
super(configuration, with, table);
|
||||
|
||||
@ -59,6 +59,7 @@ final class Names {
|
||||
static final Name N_ARRAY_TABLE = name("array_table");
|
||||
static final Name N_COLUMN_VALUE = name("COLUMN_VALUE");
|
||||
|
||||
static final Name N_accurateCastOrNull = systemName("accurateCastOrNull");
|
||||
static final Name N_ADD = systemName("add");
|
||||
static final Name N_ADD_DAYS = systemName("add_days");
|
||||
static final Name N_ADD_HOURS = systemName("add_hours");
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -92,7 +92,7 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
private static final Set<SQLDialect> NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -343,17 +343,17 @@ import org.jooq.tools.StringUtils;
|
||||
* @author Lukas Eder
|
||||
*/
|
||||
final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> implements SelectQuery<R> {
|
||||
private static final JooqLogger log = JooqLogger.getLogger(SelectQueryImpl.class);
|
||||
private static final Clause[] CLAUSES = { SELECT };
|
||||
static final Set<SQLDialect> EMULATE_SELECT_INTO_AS_CTAS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> SUPPORT_SELECT_INTO_TABLE = SQLDialect.supportedBy(HSQLDB, POSTGRES, YUGABYTEDB);
|
||||
private static final JooqLogger log = JooqLogger.getLogger(SelectQueryImpl.class);
|
||||
private static final Clause[] CLAUSES = { SELECT };
|
||||
static final Set<SQLDialect> EMULATE_SELECT_INTO_AS_CTAS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
private static final Set<SQLDialect> SUPPORT_SELECT_INTO_TABLE = SQLDialect.supportedBy(HSQLDB, POSTGRES, YUGABYTEDB);
|
||||
|
||||
|
||||
|
||||
static final Set<SQLDialect> NO_SUPPORT_WINDOW_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB);
|
||||
private static final Set<SQLDialect> REQUIRES_FROM_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB);
|
||||
private static final Set<SQLDialect> REQUIRES_DERIVED_TABLE_DML = SQLDialect.supportedUntil(MYSQL);
|
||||
private static final Set<SQLDialect> NO_IMPLICIT_GROUP_BY_ON_HAVING = SQLDialect.supportedBy(SQLITE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_WINDOW_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB);
|
||||
private static final Set<SQLDialect> REQUIRES_FROM_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB);
|
||||
private static final Set<SQLDialect> REQUIRES_DERIVED_TABLE_DML = SQLDialect.supportedUntil(MYSQL);
|
||||
private static final Set<SQLDialect> NO_IMPLICIT_GROUP_BY_ON_HAVING = SQLDialect.supportedBy(SQLITE);
|
||||
|
||||
|
||||
|
||||
@ -369,14 +369,14 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
|
||||
|
||||
|
||||
static final Set<SQLDialect> SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(CLICKHOUSE, H2, MARIADB, POSTGRES, TRINO);
|
||||
static final Set<SQLDialect> EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
static final Set<SQLDialect> NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_UNION_ORDER_BY_ALIAS = SQLDialect.supportedBy(FIREBIRD);
|
||||
static final Set<SQLDialect> NO_SUPPORT_WITH_READ_ONLY = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_LIMIT_ZERO = SQLDialect.supportedBy(DERBY, HSQLDB);
|
||||
|
||||
|
||||
static final Set<SQLDialect> SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(CLICKHOUSE, H2, MARIADB, POSTGRES, TRINO);
|
||||
static final Set<SQLDialect> EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
|
||||
static final Set<SQLDialect> NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_UNION_ORDER_BY_ALIAS = SQLDialect.supportedBy(FIREBIRD);
|
||||
static final Set<SQLDialect> NO_SUPPORT_WITH_READ_ONLY = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_LIMIT_ZERO = SQLDialect.supportedBy(DERBY, HSQLDB);
|
||||
static final Set<SQLDialect> WRAP_EXP_BODY_IN_DERIVED_TABLE_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE);
|
||||
static final Set<SQLDialect> WRAP_EXP_BODY_IN_DERIVED_TABLE_ORDER_BY = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
|
||||
|
||||
|
||||
@ -3514,14 +3514,12 @@ final class SelectQueryImpl<R extends Record> extends AbstractResultQuery<R> imp
|
||||
}
|
||||
|
||||
private final boolean wrapQueryExpressionBodyInDerivedTable(Context<?> ctx) {
|
||||
return false
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;
|
||||
// [#2059] [#7539] Some dialects require query in derived table when using ORDER BY
|
||||
return !unionOp.isEmpty() && (
|
||||
WRAP_EXP_BODY_IN_DERIVED_TABLE_LIMIT.contains(ctx.dialect()) && getLimit().isApplicable()
|
||||
|| WRAP_EXP_BODY_IN_DERIVED_TABLE_ORDER_BY.contains(ctx.dialect()) && !getOrderBy().isEmpty()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -112,6 +112,7 @@ implements
|
||||
|
||||
|
||||
|
||||
case CLICKHOUSE:
|
||||
case CUBRID:
|
||||
case DERBY:
|
||||
case DUCKDB:
|
||||
@ -161,6 +162,7 @@ implements
|
||||
|
||||
|
||||
|
||||
case CLICKHOUSE:
|
||||
case CUBRID:
|
||||
case DERBY:
|
||||
case DUCKDB:
|
||||
|
||||
@ -197,7 +197,7 @@ implements
|
||||
QOM.Update<R>
|
||||
{
|
||||
|
||||
private static final Clause[] CLAUSES = { UPDATE };
|
||||
private static final Clause[] CLAUSES = { UPDATE };
|
||||
|
||||
|
||||
|
||||
@ -205,25 +205,25 @@ implements
|
||||
|
||||
|
||||
|
||||
private static final Set<SQLDialect> REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
private static final Set<SQLDialect> EMULATE_FROM_WITH_MERGE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
|
||||
private static final Set<SQLDialect> EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB);
|
||||
static final Set<SQLDialect> REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
static final Set<SQLDialect> EMULATE_FROM_WITH_MERGE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
|
||||
static final Set<SQLDialect> EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB);
|
||||
|
||||
// LIMIT is not supported at all
|
||||
private static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
// LIMIT is supported but not ORDER BY
|
||||
private static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_UPDATE_JOIN = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, IGNITE, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
static final Set<SQLDialect> NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_UPDATE_JOIN = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, IGNITE, POSTGRES, SQLITE, YUGABYTEDB);
|
||||
|
||||
// https://github.com/ClickHouse/ClickHouse/issues/61020
|
||||
static final Set<SQLDialect> NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
static final Set<SQLDialect> NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
|
||||
|
||||
private final FieldMapForUpdate updateMap;
|
||||
private final TableList from;
|
||||
private final ConditionProviderImpl condition;
|
||||
private final SortFieldList orderBy;
|
||||
private Field<? extends Number> limit;
|
||||
private final FieldMapForUpdate updateMap;
|
||||
private final TableList from;
|
||||
private final ConditionProviderImpl condition;
|
||||
private final SortFieldList orderBy;
|
||||
private Field<? extends Number> limit;
|
||||
|
||||
UpdateQueryImpl(Configuration configuration, WithImpl with, Table<R> table) {
|
||||
super(configuration, with, table);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user