diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/GroupByTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/GroupByTests.java
index 1326dc3911..330d3c1ce4 100644
--- a/jOOQ-test/src/org/jooq/test/_/testcases/GroupByTests.java
+++ b/jOOQ-test/src/org/jooq/test/_/testcases/GroupByTests.java
@@ -47,6 +47,7 @@ import static org.jooq.impl.Factory.groupingId;
import static org.jooq.impl.Factory.groupingSets;
import static org.jooq.impl.Factory.one;
import static org.jooq.impl.Factory.rollup;
+import static org.jooq.impl.Factory.trueCondition;
import java.util.Arrays;
@@ -90,6 +91,19 @@ extends BaseTest count = count().as("c");
Result
+ jOOQ supports empty GROUP BY () clauses as well. This will result in
Some databases support the SQL standard grouping functions and some extensions thereof. See the manual's section about GROUP BY clause to the query
+ *
+ * Calling this with an empty argument list will result in an empty
+ * GROUP BY () clause being rendered.
*/
@Support
SelectHavingStep groupBy(Field>... fields);
/**
* Add a GROUP BY clause to the query
+ *
+ * Calling this with an empty argument list will result in an empty
+ *
+ * Calling this with an empty argument list will result in an empty
+ *
+ * Calling this with an empty argument list will result in an empty
+ * GROUP BY () clause being rendered.
*/
@Support
SelectHavingStep groupBy(Collection extends Field>> fields);
diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java
index 21e55bf7f8..06d1f807d4 100644
--- a/jOOQ/src/main/java/org/jooq/SelectQuery.java
+++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java
@@ -187,6 +187,9 @@ public interface SelectQuery extends SelectGROUP BY () clause being rendered.
*
* @param fields The grouping fields
*/
@@ -195,6 +198,9 @@ public interface SelectQuery extends SelectGROUP BY () clause being rendered.
*
* @param fields The grouping fields
*/
diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java
index 969b4596ab..37f78c28ba 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AbstractSubSelect.java
@@ -96,14 +96,13 @@ implements
private final ConditionProviderImpl connectBy;
private boolean connectByNoCycle;
private final ConditionProviderImpl connectByStartWith;
+ private boolean grouping;
private final FieldList groupBy;
private final ConditionProviderImpl having;
private final SortFieldList orderBy;
private boolean orderBySiblings;
private final Limit limit;
-
-
AbstractSubSelect(Configuration configuration) {
this(configuration, null);
}
@@ -506,10 +505,17 @@ implements
// GROUP BY and HAVING clause
// --------------------------
- if (!getGroupBy().isEmpty()) {
+ if (grouping) {
context.formatSeparator()
- .keyword("group by ")
- .sql(getGroupBy());
+ .keyword("group by ");
+
+ // [#1665] Empty GROUP BY () clauses need parentheses
+ if (getGroupBy().isEmpty()) {
+ context.sql("()");
+ }
+ else {
+ context.sql(getGroupBy());
+ }
}
if (!(getHaving().getWhere() instanceof TrueCondition)) {
@@ -724,6 +730,10 @@ implements
return from;
}
+ final void setGrouping() {
+ grouping = true;
+ }
+
final FieldList getGroupBy() {
return groupBy;
}
diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
index 81578e57fa..c2dad3041e 100644
--- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java
@@ -105,6 +105,7 @@ class SelectQueryImpl extends AbstractSubSelect