From c0be23d7c599d9d3e780c2dbb8103d70a987403f Mon Sep 17 00:00:00 2001
From: Lukas Eder
+ 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