diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 6bb7756bbf..5a43438249 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -28974,18 +28974,6 @@ public class DSL { /** * Get the aggregated concatenation for a field. - *

- * This is natively supported by {@link SQLDialect#ORACLE11G} upwards. It is - * emulated by the following dialects: - *

* * @see #groupConcat(Field) */ @@ -28997,18 +28985,6 @@ public class DSL { /** * Get the aggregated concatenation for a field. - *

- * This is natively supported by {@link SQLDialect#ORACLE11G} upwards. It is - * emulated by the following dialects: - *

* * @see #groupConcat(Field) */ @@ -29018,6 +28994,28 @@ public class DSL { return new ListAgg(false, Tools.nullSafe(field), inline(separator)); } + /** + * Get the aggregated concatenation for a field. + * + * @see #groupConcatDistinct(Field) + */ + @NotNull + @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + public static OrderedAggregateFunction listAggDistinct(Field field) { + return new ListAgg(true, Tools.nullSafe(field)); + } + + /** + * Get the aggregated concatenation for a field. + * + * @see #groupConcatDistinct(Field) + */ + @NotNull + @Support({ CUBRID, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + public static OrderedAggregateFunction listAggDistinct(Field field, String separator) { + return new ListAgg(true, Tools.nullSafe(field), inline(separator)); + } + /** * Get the aggregated concatenation for a field. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 310b2d4a30..7e97b9fbcb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -231,6 +231,7 @@ import static org.jooq.impl.DSL.length; // ... import static org.jooq.impl.DSL.list; import static org.jooq.impl.DSL.listAgg; +import static org.jooq.impl.DSL.listAggDistinct; import static org.jooq.impl.DSL.ln; import static org.jooq.impl.DSL.log; import static org.jooq.impl.DSL.log10; @@ -11885,13 +11886,13 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { if (parseFunctionNameIf("LISTAGG")) { parse('('); - parseKeywordIf("ALL"); + boolean distinct = parseSetQuantifier(); Field field = parseField(); if (parseIf(',')) - ordered = listAgg(field, parseStringLiteral()); + ordered = distinct ? listAggDistinct(field, parseStringLiteral()) : listAgg(field, parseStringLiteral()); else - ordered = listAgg(field); + ordered = distinct ? listAggDistinct(field) : listAgg(field); parse(')'); }