diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 360d053dee..24b1a1a879 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -16622,6 +16622,14 @@ public class DSL { return new org.jooq.impl.Function("count", SQLDataType.INTEGER, nullSafe(field)); } + /** + * Get the count(field) function. + */ + @Support + public static AggregateFunction count(SelectFieldOrAsterisk field) { + return new org.jooq.impl.Function("count", SQLDataType.INTEGER, field("{0}", field)); + } + /** * Get the count(table) function. *

@@ -16642,6 +16650,14 @@ public class DSL { return new org.jooq.impl.Function("count", true, SQLDataType.INTEGER, nullSafe(field)); } + /** + * Get the count(distinct field) function. + */ + @Support({ CUBRID, DERBY, H2, HSQLDB, FIREBIRD, MARIADB, MYSQL, POSTGRES, SQLITE }) + public static AggregateFunction countDistinct(SelectFieldOrAsterisk field) { + return new org.jooq.impl.Function("count", true, SQLDataType.INTEGER, field("{0}", field)); + } + /** * Get the count(distinct table) function. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 37282e2eab..5cc0e90c16 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -5999,22 +5999,31 @@ final class ParserImpl implements Parser { private static final AggregateFunction parseCountIf(ParserContext ctx) { if (parseFunctionNameIf(ctx, "COUNT")) { parse(ctx, '('); - if (parseIf(ctx, '*')) { - parse(ctx, ')'); - return count(); - } - boolean distinct = parseSetQuantifier(ctx); - List> fields = distinct - ? parseFields(ctx) - : Collections.>singletonList(parseField(ctx)); + + if (parseIf(ctx, '*') && parse(ctx, ')')) + if (distinct) + return countDistinct(); + else + return count(); + + QualifiedAsterisk asterisk = parseQualifiedAsteriskIf(ctx); + List> fields = (asterisk == null) + ? distinct + ? parseFields(ctx) + : Collections.>singletonList(parseField(ctx)) + : null; parse(ctx, ')'); if (distinct) - if (fields.size() > 0) + if (fields == null) + return countDistinct(asterisk); + else if (fields.size() > 0) return countDistinct(fields.toArray(EMPTY_FIELD)); else return countDistinct(fields.get(0)); + else if (fields == null) + return count(asterisk); else return count(fields.get(0)); }