Skip to content

Commit a5ab192

Browse files
Render entire statement after applying sort.
This commit makes sure to render the entire statement after applying the sort expression via the QueryEnhancer. Previously only parts, the actual statement body, had been considered. Closes: #3263 Original Pull Request: #3264
1 parent b5d747d commit a5ab192

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ public String applySorting(Sort sort, @Nullable String alias) {
141141

142142
selectBody.getOrderByElements().addAll(orderByElements);
143143

144-
return selectBody.toString();
144+
return selectStatement.toString();
145145

146146
}
147147

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

+11
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,17 @@ void findsExistingOrderByIndependentOfCase() {
179179
assertThat(query).endsWithIgnoringCase("ORDER BY p.firstname, p.lastname asc");
180180
}
181181

182+
@Test // GH-3263
183+
void preserveSourceQueryWhenAddingSort() {
184+
185+
StringQuery query = new StringQuery("WITH all_projects AS (SELECT * FROM projects) SELECT * FROM all_projects p",
186+
true);
187+
188+
assertThat(getEnhancer(query).applySorting(Sort.by("name"), "p")) //
189+
.startsWithIgnoringCase(query.getQueryString())
190+
.endsWithIgnoringCase("ORDER BY p.name ASC");
191+
}
192+
182193
@Test // GH-2812
183194
void createCountQueryFromDeleteQuery() {
184195

0 commit comments

Comments
 (0)