diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java
index fe8b2e0bd..923c2d48c 100644
--- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java
+++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java
@@ -68,6 +68,9 @@ class JpqlCountQueryTransformer extends JpqlQueryRenderer {
if (ctx.having_clause() != null) {
builder.appendExpression(visit(ctx.having_clause()));
}
+ if(ctx.set_fuction() != null) {
+ builder.appendExpression(visit(ctx.set_fuction()));
+ }
return builder;
}
diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java
index 2a63b7250..a3e9fddbf 100644
--- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java
+++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java
@@ -81,7 +81,11 @@ class JpqlSortedQueryTransformer extends JpqlQueryRenderer {
builder.appendExpression(visit(ctx.having_clause()));
}
- doVisitOrderBy(builder, ctx);
+ if(ctx.set_fuction() != null) {
+ builder.appendExpression(visit(ctx.set_fuction()));
+ } else {
+ doVisitOrderBy(builder, ctx);
+ }
return builder;
}
diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
index de9a81944..c0819dc92 100644
--- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
+++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java
@@ -26,9 +26,9 @@ import org.springframework.data.jpa.repository.query.QueryRenderer.TokenRenderer
/**
* Tests built around examples of EQL found in the EclipseLink's docs at
* https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL
- * With the exception of {@literal MOD} which is defined as {@literal MOD(arithmetic_expression , arithmetic_expression)},
- * but shown in tests as {@literal MOD(arithmetic_expression ? arithmetic_expression)}.
- *
+ * With the exception of {@literal MOD} which is defined as
+ * {@literal MOD(arithmetic_expression , arithmetic_expression)}, but shown in tests as
+ * {@literal MOD(arithmetic_expression ? arithmetic_expression)}.
* IMPORTANT: Purely verifies the parser without any transformations.
*
* @author Greg Turnquist
@@ -415,7 +415,6 @@ class EqlComplianceTests {
assertQuery("SELECT e FROM Employee e WHERE (e.active IS NOT NULL OR e.active = true)");
}
-
@Test // GH-3496
void lateralShouldBeAValidParameter() {
@@ -442,13 +441,13 @@ class EqlComplianceTests {
}
@ParameterizedTest // GH-3136
- @ValueSource(strings = {"STRING", "INTEGER", "FLOAT", "DOUBLE"})
+ @ValueSource(strings = { "STRING", "INTEGER", "FLOAT", "DOUBLE" })
void jpqlCast(String targetType) {
assertQuery("SELECT CAST(e.salary AS %s) FROM Employee e".formatted(targetType));
}
@ParameterizedTest // GH-3136
- @ValueSource(strings = {"LEFT", "RIGHT"})
+ @ValueSource(strings = { "LEFT", "RIGHT" })
void leftRightStringFunctions(String keyword) {
assertQuery("SELECT %s(e.name, 3) FROM Employee e".formatted(keyword));
}
diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java
index 147477fc2..660f3c9a7 100644
--- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java
+++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java
@@ -784,6 +784,15 @@ class JpqlQueryTransformerTests {
""");
}
+ @Test // GH-3427
+ void sortShouldBeAppendedToFullSelectOnlyInCaseOfSetOperator() {
+
+ String source = "SELECT tb FROM Test tb WHERE (tb.type='A') UNION SELECT tb FROM Test tb WHERE (tb.type='B')";
+ String target = createQueryFor(source, Sort.by("Type").ascending());
+
+ assertThat(target).isEqualTo("SELECT tb FROM Test tb WHERE (tb.type = 'A') UNION SELECT tb FROM Test tb WHERE (tb.type = 'B') order by tb.Type asc");
+ }
+
static Stream queriesWithReservedWordsAsIdentifiers() {
return Stream.of( //