From ce1933de9e335626f695d53b14285e3d299c5d97 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 22 Mar 2024 11:59:07 +0100 Subject: [PATCH] [jOOQ/jOOQ#15732] Add ARRAY_AGG(), STRING_AGG(), and COUNT(DISTINCT Table..) support --- .../java/org/jooq/GroupConcatOrderByStep.java | 5 ++-- .../org/jooq/GroupConcatSeparatorStep.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/DSL.java | 24 +++++++++---------- jOOQ/src/main/java/org/jooq/impl/ListAgg.java | 3 ++- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/GroupConcatOrderByStep.java b/jOOQ/src/main/java/org/jooq/GroupConcatOrderByStep.java index 1e44594876..9247078fbb 100644 --- a/jOOQ/src/main/java/org/jooq/GroupConcatOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/GroupConcatOrderByStep.java @@ -46,6 +46,7 @@ import org.jetbrains.annotations.*; // ... import static org.jooq.SQLDialect.CUBRID; // ... +import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.H2; // ... @@ -74,13 +75,13 @@ public interface GroupConcatOrderByStep extends GroupConcatSeparatorStep { * Add an ORDER BY clause to the function. */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) GroupConcatSeparatorStep orderBy(OrderField... fields); /** * Add an ORDER BY clause to the function. */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) GroupConcatSeparatorStep orderBy(Collection> fields); } diff --git a/jOOQ/src/main/java/org/jooq/GroupConcatSeparatorStep.java b/jOOQ/src/main/java/org/jooq/GroupConcatSeparatorStep.java index e04aa22408..b2d3403d4f 100644 --- a/jOOQ/src/main/java/org/jooq/GroupConcatSeparatorStep.java +++ b/jOOQ/src/main/java/org/jooq/GroupConcatSeparatorStep.java @@ -46,6 +46,7 @@ import org.jetbrains.annotations.*; // ... import static org.jooq.SQLDialect.CUBRID; // ... +import static org.jooq.SQLDialect.DUCKDB; // ... import static org.jooq.SQLDialect.H2; // ... @@ -75,6 +76,6 @@ public interface GroupConcatSeparatorStep extends AggregateFunction { * Specify the separator on the GROUP_CONCAT function. */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) AggregateFunction separator(String separator); } diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index c5fff64095..a8162a332f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -29456,7 +29456,7 @@ public class DSL { * Get the count(distinct field) function. */ @NotNull - @Support({ CLICKHOUSE, CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) + @Support({ CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) public static AggregateFunction countDistinct(SelectFieldOrAsterisk field) { return countDistinct(field instanceof Field f ? f : field("{0}", field)); } @@ -29469,7 +29469,7 @@ public class DSL { * {@link #count(Field)}, instead. */ @NotNull - @Support({ CLICKHOUSE, CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) + @Support({ CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, YUGABYTEDB }) public static AggregateFunction countDistinct(Table table) { return new CountTable(table, true); } @@ -29484,7 +29484,7 @@ public class DSL { * COUNT(DISTINCT(expr1, expr2)). */ @NotNull - @Support({ CLICKHOUSE, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) public static AggregateFunction countDistinct(Field... fields) { fields = Tools.nullSafe(fields); return fields.length == 0 ? countDistinct(asterisk()) : new DefaultAggregateFunction<>(true, N_COUNT, SQLDataType.INTEGER, fields); @@ -29494,7 +29494,7 @@ public class DSL { * Get the array_agg() aggregate function. */ @NotNull - @Support({ CLICKHOUSE, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB }) + @Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB }) public static ArrayAggOrderByStep arrayAgg(Field field) { return new ArrayAgg(false, Tools.nullSafe(field)); } @@ -29503,7 +29503,7 @@ public class DSL { * Get the array_agg() aggregate function. */ @NotNull - @Support({ CLICKHOUSE, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB }) + @Support({ CLICKHOUSE, DUCKDB, H2, HSQLDB, POSTGRES, TRINO, YUGABYTEDB }) public static ArrayAggOrderByStep arrayAggDistinct(Field field) { return new ArrayAgg(true, Tools.nullSafe(field)); } @@ -31447,7 +31447,7 @@ public class DSL { * @see #groupConcat(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO }) public static OrderedAggregateFunction listAgg(Field field) { return new ListAgg(false, Tools.nullSafe(field)); } @@ -31458,7 +31458,7 @@ public class DSL { * @see #groupConcat(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, TRINO }) public static OrderedAggregateFunction listAgg(Field field, String separator) { return new ListAgg(false, Tools.nullSafe(field), inline(separator)); } @@ -31469,7 +31469,7 @@ public class DSL { * @see #groupConcatDistinct(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) public static OrderedAggregateFunction listAggDistinct(Field field) { return new ListAgg(true, Tools.nullSafe(field)); } @@ -31480,7 +31480,7 @@ public class DSL { * @see #groupConcatDistinct(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) public static OrderedAggregateFunction listAggDistinct(Field field, String separator) { return new ListAgg(true, Tools.nullSafe(field), inline(separator)); } @@ -31509,7 +31509,7 @@ public class DSL { * @see #listAgg(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) public static GroupConcatOrderByStep groupConcat(Field field) { return new GroupConcat(Tools.nullSafe(field)); } @@ -31541,7 +31541,7 @@ public class DSL { */ @Deprecated(forRemoval = true, since = "3.12") @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO }) public static AggregateFunction groupConcat(Field field, String separator) { return new GroupConcat(Tools.nullSafe(field)).separator(separator); } @@ -31566,7 +31566,7 @@ public class DSL { * @see #listAgg(Field) */ @NotNull - @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + @Support({ CUBRID, DUCKDB, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) public static GroupConcatOrderByStep groupConcatDistinct(Field field) { return new GroupConcat(Tools.nullSafe(field), true); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ListAgg.java b/jOOQ/src/main/java/org/jooq/impl/ListAgg.java index 8330202b14..b49fc06d65 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ListAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/ListAgg.java @@ -45,6 +45,7 @@ import static java.lang.Boolean.FALSE; import static org.jooq.SQLDialect.CUBRID; // ... // ... +import static org.jooq.SQLDialect.DUCKDB; import static org.jooq.SQLDialect.H2; // ... import static org.jooq.SQLDialect.HSQLDB; @@ -95,7 +96,7 @@ import org.jooq.impl.QOM.UNotYetImplemented; final class ListAgg extends AbstractAggregateFunction implements UNotYetImplemented { private static final Set SET_GROUP_CONCAT_MAX_LEN = SQLDialect.supportedBy(MARIADB, MYSQL); private static final Set SUPPORT_GROUP_CONCAT = SQLDialect.supportedBy(CUBRID, H2, HSQLDB, MARIADB, MYSQL, SQLITE); - private static final Set SUPPORT_STRING_AGG = SQLDialect.supportedBy(POSTGRES); + private static final Set SUPPORT_STRING_AGG = SQLDialect.supportedBy(DUCKDB, POSTGRES);