Skip to content

Commit c239f73

Browse files
committed
Allow HQL HAVING without enforcing GROUP BY.
Closes #3840
1 parent 2a8e9a5 commit c239f73

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Hql.g4

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ orderedQuery
8989
;
9090

9191
query
92-
: selectClause fromClause? whereClause? (groupByClause havingClause?)? # SelectQuery
93-
| fromClause whereClause? (groupByClause havingClause?)? selectClause? # FromQuery
92+
: selectClause fromClause? whereClause? groupByClause? havingClause? # SelectQuery
93+
| fromClause whereClause? groupByClause? havingClause? selectClause? # FromQuery
9494
;
9595

9696
queryOrder

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,14 @@ SELECT c.country, COUNT(c)
624624
GROUP BY c.country
625625
HAVING COUNT(c) > 30
626626
""");
627+
628+
assertQuery("""
629+
SELECT COUNT(f)
630+
FROM FooEntity f
631+
WHERE f.name IN ('Y', 'Basic', 'Remit')
632+
AND f.size = 10
633+
HAVING COUNT(f) > 0
634+
""");
627635
}
628636

629637
@Test

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,18 @@ HAVING COUNT(o) >= 5
11441144
""");
11451145
}
11461146

1147+
@Test
1148+
void shouldRenderHavingWithFunction() {
1149+
1150+
assertQuery("""
1151+
SELECT COUNT(f)
1152+
FROM FooEntity f
1153+
WHERE f.name IN ('Y', 'Basic', 'Remit')
1154+
AND f.size = 10
1155+
HAVING COUNT(f) > 0
1156+
""");
1157+
}
1158+
11471159
@Test
11481160
void theRest8() {
11491161

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,14 @@ SELECT c.country, COUNT(c)
890890
GROUP BY c.country
891891
HAVING COUNT(c) > 30
892892
""");
893+
894+
assertQuery("""
895+
SELECT COUNT(f)
896+
FROM FooEntity f
897+
WHERE f.name IN ('Y', 'Basic', 'Remit')
898+
AND f.size = 10
899+
HAVING COUNT(f) > 0
900+
""");
893901
}
894902

895903
@Test

0 commit comments

Comments
 (0)