[jOOQ/jOOQ#7539] Support for SQLDialect.CLICKHOUSE - WIP

This commit is contained in:
Lukas Eder 2024-03-15 17:01:29 +01:00
parent 7ec251ec87
commit 38a8a7d4cb
3 changed files with 26 additions and 9 deletions

View File

@ -28406,7 +28406,7 @@ public class DSL {
* @see #rollup(FieldOrRow...)
*/
@NotNull
@Support({ CUBRID, DUCKDB, MARIADB, MYSQL, POSTGRES, TRINO })
@Support({ CLICKHOUSE, CUBRID, DUCKDB, MARIADB, MYSQL, POSTGRES, TRINO })
public static GroupField rollup(Field<?>... fields) {
return rollup((FieldOrRow[]) Tools.nullSafe(fields));
}
@ -28425,7 +28425,7 @@ public class DSL {
* @return A field to be used in a <code>GROUP BY</code> clause
*/
@NotNull
@Support({ CUBRID, DUCKDB, MARIADB, MYSQL, POSTGRES, TRINO })
@Support({ CLICKHOUSE, CUBRID, DUCKDB, MARIADB, MYSQL, POSTGRES, TRINO })
public static GroupField rollup(FieldOrRow... fields) {
return new Rollup(fields);
}
@ -28436,7 +28436,7 @@ public class DSL {
* @see #cube(Field...)
*/
@NotNull
@Support({ DUCKDB, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, POSTGRES, TRINO })
public static GroupField cube(Field<?>... fields) {
return cube((FieldOrRow[]) Tools.nullSafe(fields));
}
@ -28455,7 +28455,7 @@ public class DSL {
* @return A field to be used in a <code>GROUP BY</code> clause
*/
@NotNull
@Support({ DUCKDB, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, POSTGRES, TRINO })
public static GroupField cube(FieldOrRow... fields) {
return new Cube(fields);
}
@ -28475,7 +28475,7 @@ public class DSL {
* @return A field to be used in a <code>GROUP BY</code> clause
*/
@NotNull
@Support({ DUCKDB, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, POSTGRES, TRINO })
public static GroupField groupingSets(Field<?>... fields) {
List<Field<?>>[] array = map(fields, f -> asList(f), List[]::new);
return groupingSets(array);
@ -28496,7 +28496,7 @@ public class DSL {
* @return A field to be used in a <code>GROUP BY</code> clause
*/
@NotNull
@Support({ DUCKDB, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, POSTGRES, TRINO })
public static GroupField groupingSets(Field<?>[]... fieldSets) {
List<Field<?>>[] array = map(fieldSets, f -> asList(f), List[]::new);
return groupingSets(array);
@ -28517,7 +28517,7 @@ public class DSL {
* @return A field to be used in a <code>GROUP BY</code> clause
*/
@NotNull
@Support({ DUCKDB, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, POSTGRES, TRINO })
@SafeVarargs
public static GroupField groupingSets(Collection<? extends Field<?>>... fieldSets) {
return new GroupingSets(fieldSets);
@ -28570,7 +28570,7 @@ public class DSL {
* @see #rollup(Field...)
*/
@NotNull
@Support({ DUCKDB, MYSQL, POSTGRES, TRINO })
@Support({ CLICKHOUSE, DUCKDB, MYSQL, POSTGRES, TRINO })
public static Field<Integer> grouping(Field<?> field) {
return function("grouping", INTEGER, field);
}

View File

@ -74,25 +74,36 @@ import static org.jooq.JoinType.RIGHT_OUTER_JOIN;
// ...
// ...
// ...
// ...
import static org.jooq.SQLDialect.CLICKHOUSE;
// ...
import static org.jooq.SQLDialect.CUBRID;
// ...
import static org.jooq.SQLDialect.DERBY;
import static org.jooq.SQLDialect.DUCKDB;
// ...
import static org.jooq.SQLDialect.FIREBIRD;
import static org.jooq.SQLDialect.H2;
// ...
import static org.jooq.SQLDialect.HSQLDB;
import static org.jooq.SQLDialect.IGNITE;
// ...
// ...
// ...
import static org.jooq.SQLDialect.MARIADB;
// ...
import static org.jooq.SQLDialect.MYSQL;
// ...
import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
// ...
import static org.jooq.SQLDialect.TRINO;
// ...
import static org.jooq.SQLDialect.YUGABYTEDB;
import static org.jooq.impl.ConditionProviderImpl.extractCondition;
import static org.jooq.impl.DSL.exists;
@ -166,6 +177,7 @@ abstract class JoinTable<J extends JoinTable<J>> extends AbstractJoinTable<J> {
static final Set<SQLDialect> EMULATE_NATURAL_OUTER_JOIN = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, H2, IGNITE, TRINO);
static final Set<SQLDialect> EMULATE_JOIN_USING = SQLDialect.supportedBy(CUBRID, IGNITE);
static final Set<SQLDialect> EMULATE_APPLY = SQLDialect.supportedBy(FIREBIRD, POSTGRES, TRINO, YUGABYTEDB);
static final Set<SQLDialect> EMUlATE_SEMI_ANTI_JOIN = SQLDialect.supportedBy(CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB);
final Table<?> lhs;
final Table<?> rhs;
@ -286,7 +298,9 @@ abstract class JoinTable<J extends JoinTable<J>> extends AbstractJoinTable<J> {
switch (translatedType) {
case LEFT_SEMI_JOIN:
case LEFT_ANTI_JOIN:
if (TRUE.equals(ctx.data(DATA_COLLECT_SEMI_ANTI_JOIN))) {
if (EMUlATE_SEMI_ANTI_JOIN.contains(ctx.dialect())
&& TRUE.equals(ctx.data(DATA_COLLECT_SEMI_ANTI_JOIN))
) {
@SuppressWarnings("unchecked")
List<Condition> semiAntiJoinPredicates = (List<Condition>) ctx.data(DATA_COLLECTED_SEMI_ANTI_JOIN);

View File

@ -12678,6 +12678,9 @@ final class DefaultParseContext extends AbstractScope implements ParseContext {
private final AggregateFunction<?> parseCountIf() {
if (parseFunctionNameIf("COUNT")) {
parse('(');
if (parseIf(')'))
return count();
boolean distinct = parseSetQuantifier();
if (parseIf('*') && parse(')'))