1515 */
1616package org .springframework .data .jpa .repository .query ;
1717
18- import static org .springframework .data .jpa .repository .query .JSqlParserUtils .*;
19- import static org .springframework .data .jpa .repository .query .QueryUtils .*;
20-
21- import java .util .ArrayList ;
22- import java .util .Collections ;
23- import java .util .HashSet ;
24- import java .util .List ;
25- import java .util .Objects ;
26- import java .util .Set ;
27- import java .util .stream .Collectors ;
28-
29- import org .springframework .data .domain .Sort ;
30- import org .springframework .lang .Nullable ;
31- import org .springframework .util .Assert ;
32- import org .springframework .util .CollectionUtils ;
33- import org .springframework .util .StringUtils ;
18+ import static org .springframework .data .jpa .repository .query .JSqlParserUtils .getJSqlCount ;
19+ import static org .springframework .data .jpa .repository .query .JSqlParserUtils .getJSqlLower ;
20+ import static org .springframework .data .jpa .repository .query .QueryUtils .checkSortExpression ;
3421
3522import net .sf .jsqlparser .JSQLParserException ;
3623import net .sf .jsqlparser .expression .Alias ;
4229import net .sf .jsqlparser .statement .delete .Delete ;
4330import net .sf .jsqlparser .statement .insert .Insert ;
4431import net .sf .jsqlparser .statement .merge .Merge ;
45- import net .sf .jsqlparser .statement .select .OrderByElement ;
46- import net .sf .jsqlparser .statement .select .PlainSelect ;
47- import net .sf .jsqlparser .statement .select .Select ;
48- import net .sf .jsqlparser .statement .select .SelectBody ;
49- import net .sf .jsqlparser .statement .select .SelectExpressionItem ;
50- import net .sf .jsqlparser .statement .select .SelectItem ;
51- import net .sf .jsqlparser .statement .select .SetOperationList ;
52- import net .sf .jsqlparser .statement .select .WithItem ;
32+ import net .sf .jsqlparser .statement .select .*;
5333import net .sf .jsqlparser .statement .update .Update ;
5434import net .sf .jsqlparser .statement .values .ValuesStatement ;
5535
36+ import java .util .*;
37+ import java .util .stream .Collectors ;
38+
39+ import org .springframework .data .domain .Sort ;
40+ import org .springframework .lang .Nullable ;
41+ import org .springframework .util .Assert ;
42+ import org .springframework .util .CollectionUtils ;
43+ import org .springframework .util .StringUtils ;
44+
5645/**
5746 * The implementation of {@link QueryEnhancer} using JSqlParser.
5847 *
@@ -147,7 +136,7 @@ public String applySorting(Sort sort, @Nullable String alias) {
147136
148137 /**
149138 * Returns the {@link SetOperationList} as a string query with {@link Sort}s applied in the right order.
150- *
139+ *
151140 * @param setOperationListStatement
152141 * @param sort
153142 * @return
@@ -305,14 +294,16 @@ public String detectAlias() {
305294 private String detectAlias (String query ) {
306295
307296 if (ParsedType .MERGE .equals (this .parsedType )) {
297+
308298 Merge mergeStatement = parseSelectStatement (query , Merge .class );
309299 return detectAlias (mergeStatement );
310300
311301 } else if (ParsedType .SELECT .equals (this .parsedType )) {
302+
312303 Select selectStatement = parseSelectStatement (query );
313304
314305 /*
315- For all the other types ({@link ValuesStatement} and {@link SetOperationList}) it does not make sense to provide
306+ For all the other types ({@link ValuesStatement} and {@link SetOperationList}) it does not make sense to provide
316307 alias since:
317308 * ValuesStatement has no alias
318309 * SetOperation can have multiple alias for each operation item
@@ -354,6 +345,7 @@ private String detectAlias(PlainSelect selectBody) {
354345 */
355346 @ Nullable
356347 private String detectAlias (Merge mergeStatement ) {
348+
357349 Alias alias = mergeStatement .getUsingAlias ();
358350 return alias == null ? null : alias .getName ();
359351 }
@@ -382,6 +374,7 @@ public String createCountQueryFor(@Nullable String countProjection) {
382374 selectBody .setOrderByElements (null );
383375
384376 if (StringUtils .hasText (countProjection )) {
377+
385378 Function jSqlCount = getJSqlCount (Collections .singletonList (countProjection ), false );
386379 selectBody .setSelectItems (Collections .singletonList (new SelectExpressionItem (jSqlCount )));
387380 return selectBody .toString ();
@@ -396,6 +389,7 @@ public String createCountQueryFor(@Nullable String countProjection) {
396389 List <SelectItem > selectItems = selectBody .getSelectItems ();
397390
398391 if (onlyASingleColumnProjection (selectItems )) {
392+
399393 SelectExpressionItem singleProjection = (SelectExpressionItem ) selectItems .get (0 );
400394
401395 Column column = (Column ) singleProjection .getExpression ();
@@ -440,6 +434,7 @@ public String getProjection() {
440434 SelectBody selectBody = selectStatement .getSelectBody ();
441435
442436 if (selectStatement .getSelectBody ()instanceof SetOperationList setOperationList ) {
437+
443438 // using the first one since for setoperations the projection has to be the same
444439 selectBody = setOperationList .getSelects ().get (0 );
445440
0 commit comments