, ConditionProvi
*
* This also sets the distinct flag to true
*/
- @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 extends Select, ConditionProvi
*
* This also sets the distinct flag to true
*/
- @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);
/**
diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterViewImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterViewImpl.java
index 31acbf6216..bdbe813d59 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AlterViewImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AlterViewImpl.java
@@ -183,7 +183,7 @@ implements
private static final Clause[] CLAUSES = { Clause.ALTER_VIEW };
private static final Set NO_SUPPORT_RENAME_IF_EXISTS = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD);
private static final Set NO_SUPPORT_IF_EXISTS = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD);
- private static final Set SUPPORT_ALTER_TABLE_RENAME = SQLDialect.supportedBy(HSQLDB, YUGABYTEDB);
+ private static final Set 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);
diff --git a/jOOQ/src/main/java/org/jooq/impl/Array.java b/jOOQ/src/main/java/org/jooq/impl/Array.java
index 4833bb7bee..a5803d5b01 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Array.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Array.java
@@ -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 extends AbstractField implements QOM.Array {
- private static final Set REQUIRES_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
+ static final Set REQUIRES_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
+ static final Set NO_SUPPORT_SQUARE_BRACKETS = SQLDialect.supportedBy(CLICKHOUSE);
- final FieldsImpl fields;
+ final FieldsImpl fields;
Array(Collection extends Field> fields) {
super(N_ARRAY, type(fields));
@@ -96,16 +99,10 @@ final class Array extends AbstractField implements QOM.Array {
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);
diff --git a/jOOQ/src/main/java/org/jooq/impl/Cast.java b/jOOQ/src/main/java/org/jooq/impl/Cast.java
index 7ea6e30e1a..2ddd0a2ae1 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Cast.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Cast.java
@@ -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 extends AbstractField implements QOM.Cast {
+ case CLICKHOUSE:
+ ctx.visit(N_accurateCastOrNull);
+ break;
+
default:
ctx.visit(N_TRY_CAST);
break;
@@ -397,7 +409,12 @@ final class Cast extends AbstractField implements QOM.Cast {
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 extends AbstractField implements QOM.Cast {
break;
}
+ if (tryCast)
+ if (ctx.family() == CLICKHOUSE)
+ ctx.stringLiteral(false).sql('\'');
diff --git a/jOOQ/src/main/java/org/jooq/impl/Convert.java b/jOOQ/src/main/java/org/jooq/impl/Convert.java
index 7147796bd0..15a8fde8eb 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Convert.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Convert.java
@@ -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) {
diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java
index ca0d4b4c95..82347ca95c 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DSL.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java
@@ -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 Field tryCast(Object value, DataType 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 Field tryCast(Field> value, DataType dataType) {
return new TryCast<>(value, dataType);
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
index 2e333c91d9..922780adcf 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java
@@ -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 implements Binding {
// 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 implements Binding {
ctx.statement().setString(ctx.index(), toPGArrayString(value));
break;
}
+
case HSQLDB: {
Object[] a = value;
Class> t = dataType.getType();
@@ -1397,10 +1399,13 @@ public class DefaultBinding implements Binding {
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());
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java
index 967083773d..70fccebbcc 100644
--- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java
@@ -138,18 +138,18 @@ implements
QOM.Delete
{
- private static final Clause[] CLAUSES = { DELETE };
- private static final Set SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
+ private static final Clause[] CLAUSES = { DELETE };
+ static final Set SPECIAL_DELETE_AS_SYNTAX = SQLDialect.supportedBy(MARIADB, MYSQL);
// LIMIT is not supported at all
- private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
+ static final Set 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 NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
- private static final Set SUPPORT_MULTITABLE_DELETE = SQLDialect.supportedBy(MARIADB, MYSQL);
- private static final Set REQUIRE_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(MARIADB, MYSQL);
- private static final Set NO_SUPPORT_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
- private static final Set REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
+ static final Set NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
+ static final Set SUPPORT_MULTITABLE_DELETE = SQLDialect.supportedBy(MARIADB, MYSQL);
+ static final Set REQUIRE_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(MARIADB, MYSQL);
+ static final Set NO_SUPPORT_REPEAT_FROM_IN_USING = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB);
+ static final Set REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
@@ -158,12 +158,12 @@ implements
// https://github.com/ClickHouse/ClickHouse/issues/61020
- static final Set NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
+ static final Set 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 table) {
super(configuration, with, table);
diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java
index 7e1652344c..eea1e04746 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Names.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Names.java
@@ -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");
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrAvgX.java b/jOOQ/src/main/java/org/jooq/impl/RegrAvgX.java
index a6ebca9f55..6714ac544e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrAvgX.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrAvgX.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrAvgY.java b/jOOQ/src/main/java/org/jooq/impl/RegrAvgY.java
index b87906d0b1..9f3daf54b2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrAvgY.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrAvgY.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrCount.java b/jOOQ/src/main/java/org/jooq/impl/RegrCount.java
index 9cefb7ca49..892fa702f8 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrCount.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrCount.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java b/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java
index 7d797db7a6..839f6ac37d 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrIntercept.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrR2.java b/jOOQ/src/main/java/org/jooq/impl/RegrR2.java
index 02a394cbbd..0e544444d9 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrR2.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrR2.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrSlope.java b/jOOQ/src/main/java/org/jooq/impl/RegrSlope.java
index 46820693ae..9f998a6f54 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrSlope.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrSlope.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrSxx.java b/jOOQ/src/main/java/org/jooq/impl/RegrSxx.java
index 6372cf3ef9..b82951e5a4 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrSxx.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrSxx.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java b/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java
index 2c24c8e27a..4754c92811 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrSxy.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/RegrSyy.java b/jOOQ/src/main/java/org/jooq/impl/RegrSyy.java
index 5268c84432..b1f01dc819 100644
--- a/jOOQ/src/main/java/org/jooq/impl/RegrSyy.java
+++ b/jOOQ/src/main/java/org/jooq/impl/RegrSyy.java
@@ -92,7 +92,7 @@ implements
- private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
+ private static final Set NO_SUPPORT_NATIVE = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, HSQLDB, IGNITE, MARIADB, MYSQL, SQLITE, TRINO);
diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
index 4f33b61211..ed827ace75 100644
--- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
@@ -343,17 +343,17 @@ import org.jooq.tools.StringUtils;
* @author Lukas Eder
*/
final class SelectQueryImpl extends AbstractResultQuery implements SelectQuery {
- private static final JooqLogger log = JooqLogger.getLogger(SelectQueryImpl.class);
- private static final Clause[] CLAUSES = { SELECT };
- static final Set EMULATE_SELECT_INTO_AS_CTAS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
- private static final Set 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 EMULATE_SELECT_INTO_AS_CTAS = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
+ private static final Set SUPPORT_SELECT_INTO_TABLE = SQLDialect.supportedBy(HSQLDB, POSTGRES, YUGABYTEDB);
- static final Set NO_SUPPORT_WINDOW_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB);
- private static final Set REQUIRES_FROM_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB);
- private static final Set REQUIRES_DERIVED_TABLE_DML = SQLDialect.supportedUntil(MYSQL);
- private static final Set NO_IMPLICIT_GROUP_BY_ON_HAVING = SQLDialect.supportedBy(SQLITE);
+ static final Set NO_SUPPORT_WINDOW_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, HSQLDB, IGNITE, MARIADB);
+ private static final Set REQUIRES_FROM_CLAUSE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, HSQLDB);
+ private static final Set REQUIRES_DERIVED_TABLE_DML = SQLDialect.supportedUntil(MYSQL);
+ private static final Set NO_IMPLICIT_GROUP_BY_ON_HAVING = SQLDialect.supportedBy(SQLITE);
@@ -369,14 +369,14 @@ final class SelectQueryImpl extends AbstractResultQuery imp
- static final Set SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(CLICKHOUSE, H2, MARIADB, POSTGRES, TRINO);
- static final Set EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
- static final Set NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES, YUGABYTEDB);
- static final Set NO_SUPPORT_UNION_ORDER_BY_ALIAS = SQLDialect.supportedBy(FIREBIRD);
- static final Set NO_SUPPORT_WITH_READ_ONLY = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
- static final Set NO_SUPPORT_LIMIT_ZERO = SQLDialect.supportedBy(DERBY, HSQLDB);
-
-
+ static final Set SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(CLICKHOUSE, H2, MARIADB, POSTGRES, TRINO);
+ static final Set EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE, TRINO);
+ static final Set NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES, YUGABYTEDB);
+ static final Set NO_SUPPORT_UNION_ORDER_BY_ALIAS = SQLDialect.supportedBy(FIREBIRD);
+ static final Set NO_SUPPORT_WITH_READ_ONLY = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB);
+ static final Set NO_SUPPORT_LIMIT_ZERO = SQLDialect.supportedBy(DERBY, HSQLDB);
+ static final Set WRAP_EXP_BODY_IN_DERIVED_TABLE_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE);
+ static final Set WRAP_EXP_BODY_IN_DERIVED_TABLE_ORDER_BY = SQLDialect.supportedBy(CLICKHOUSE);
@@ -3514,14 +3514,12 @@ final class SelectQueryImpl extends AbstractResultQuery 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()
+ );
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/Square.java b/jOOQ/src/main/java/org/jooq/impl/Square.java
index 83c5c47d86..0c3e0c7f2a 100644
--- a/jOOQ/src/main/java/org/jooq/impl/Square.java
+++ b/jOOQ/src/main/java/org/jooq/impl/Square.java
@@ -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:
diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java
index cd8c591e0a..e31fc61924 100644
--- a/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/UpdateQueryImpl.java
@@ -197,7 +197,7 @@ implements
QOM.Update
{
- private static final Clause[] CLAUSES = { UPDATE };
+ private static final Clause[] CLAUSES = { UPDATE };
@@ -205,25 +205,25 @@ implements
- private static final Set REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
- private static final Set EMULATE_FROM_WITH_MERGE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
- private static final Set EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB);
+ static final Set REQUIRES_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
+ static final Set EMULATE_FROM_WITH_MERGE = SQLDialect.supportedUntil(CUBRID, DERBY, FIREBIRD, H2, HSQLDB);
+ static final Set EMULATE_RETURNING_WITH_UPSERT = SQLDialect.supportedBy(MARIADB);
// LIMIT is not supported at all
- private static final Set NO_SUPPORT_LIMIT = SQLDialect.supportedUntil(CLICKHOUSE, CUBRID, DERBY, DUCKDB, H2, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB);
+ static final Set 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 NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
- static final Set NO_SUPPORT_UPDATE_JOIN = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, IGNITE, POSTGRES, SQLITE, YUGABYTEDB);
+ static final Set NO_SUPPORT_ORDER_BY_LIMIT = SQLDialect.supportedBy(IGNITE);
+ static final Set 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 NO_SUPPORT_QUALIFY_IN_WHERE = SQLDialect.supportedBy(CLICKHOUSE);
+ static final Set 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 table) {
super(configuration, with, table);