15
15
*/
16
16
package org .springframework .data .jpa .repository .query ;
17
17
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 ;
18
+ import static org .springframework .data .jpa .repository .query .JSqlParserUtils .*;
19
+ import static org .springframework .data .jpa .repository .query .QueryUtils .*;
21
20
22
21
import net .sf .jsqlparser .JSQLParserException ;
23
22
import net .sf .jsqlparser .expression .Alias ;
29
28
import net .sf .jsqlparser .statement .delete .Delete ;
30
29
import net .sf .jsqlparser .statement .insert .Insert ;
31
30
import net .sf .jsqlparser .statement .merge .Merge ;
32
- import net .sf .jsqlparser .statement .select .*;
31
+ import net .sf .jsqlparser .statement .select .OrderByElement ;
32
+ import net .sf .jsqlparser .statement .select .PlainSelect ;
33
+ import net .sf .jsqlparser .statement .select .Select ;
34
+ import net .sf .jsqlparser .statement .select .SelectBody ;
35
+ import net .sf .jsqlparser .statement .select .SelectExpressionItem ;
36
+ import net .sf .jsqlparser .statement .select .SelectItem ;
37
+ import net .sf .jsqlparser .statement .select .SetOperationList ;
38
+ import net .sf .jsqlparser .statement .select .WithItem ;
33
39
import net .sf .jsqlparser .statement .update .Update ;
34
40
import net .sf .jsqlparser .statement .values .ValuesStatement ;
35
41
36
- import java .util .*;
42
+ import java .util .ArrayList ;
43
+ import java .util .Collections ;
44
+ import java .util .HashSet ;
45
+ import java .util .List ;
46
+ import java .util .Objects ;
47
+ import java .util .Set ;
37
48
import java .util .stream .Collectors ;
38
49
39
50
import org .springframework .data .domain .Sort ;
50
61
* @author Geoffrey Deremetz
51
62
* @since 2.7.0
52
63
*/
53
- public class JSqlParserQueryEnhancer implements QueryEnhancer {
64
+ public class JSqlParserQueryEnhancer extends QueryEnhancer {
54
65
55
- private final DeclaredQuery query ;
56
66
private final ParsedType parsedType ;
57
67
58
68
/**
59
69
* @param query the query we want to enhance. Must not be {@literal null}.
60
70
*/
61
71
public JSqlParserQueryEnhancer (DeclaredQuery query ) {
62
-
63
- this .query = query ;
72
+ super (query );
64
73
this .parsedType = detectParsedType ();
65
74
}
66
75
@@ -72,7 +81,7 @@ public JSqlParserQueryEnhancer(DeclaredQuery query) {
72
81
private ParsedType detectParsedType () {
73
82
74
83
try {
75
- Statement statement = CCJSqlParserUtil .parse (this .query .getQueryString ());
84
+ Statement statement = CCJSqlParserUtil .parse (this .getQuery () .getQueryString ());
76
85
77
86
if (statement instanceof Insert ) {
78
87
return ParsedType .INSERT ;
@@ -95,7 +104,7 @@ private ParsedType detectParsedType() {
95
104
@ Override
96
105
public String applySorting (Sort sort , @ Nullable String alias ) {
97
106
98
- String queryString = query .getQueryString ();
107
+ String queryString = this . getQuery () .getQueryString ();
99
108
Assert .hasText (queryString , "Query must not be null or empty" );
100
109
101
110
if (this .parsedType != ParsedType .SELECT ) {
@@ -192,7 +201,7 @@ Set<String> getSelectionAliases() {
192
201
return new HashSet <>();
193
202
}
194
203
195
- Select selectStatement = parseSelectStatement (this .query .getQueryString ());
204
+ Select selectStatement = parseSelectStatement (this .getQuery () .getQueryString ());
196
205
PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
197
206
return this .getSelectionAliases (selectBody );
198
207
}
@@ -280,7 +289,7 @@ private OrderByElement getOrderClause(final Set<String> joinAliases, final Set<S
280
289
281
290
@ Override
282
291
public String detectAlias () {
283
- return detectAlias (this .query .getQueryString ());
292
+ return detectAlias (this .getQuery () .getQueryString ());
284
293
}
285
294
286
295
/**
@@ -354,18 +363,18 @@ private String detectAlias(Merge mergeStatement) {
354
363
public String createCountQueryFor (@ Nullable String countProjection ) {
355
364
356
365
if (this .parsedType != ParsedType .SELECT ) {
357
- return this .query .getQueryString ();
366
+ return this .getQuery () .getQueryString ();
358
367
}
359
368
360
- Assert .hasText (this .query .getQueryString (), "OriginalQuery must not be null or empty" );
369
+ Assert .hasText (this .getQuery () .getQueryString (), "OriginalQuery must not be null or empty" );
361
370
362
- Select selectStatement = parseSelectStatement (this .query .getQueryString ());
371
+ Select selectStatement = parseSelectStatement (this .getQuery () .getQueryString ());
363
372
364
373
/*
365
374
We only support count queries for {@link PlainSelect}.
366
375
*/
367
376
if (!(selectStatement .getSelectBody () instanceof PlainSelect )) {
368
- return this .query .getQueryString ();
377
+ return this .getQuery () .getQueryString ();
369
378
}
370
379
371
380
PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
@@ -423,9 +432,9 @@ public String getProjection() {
423
432
return "" ;
424
433
}
425
434
426
- Assert .hasText (query .getQueryString (), "Query must not be null or empty" );
435
+ Assert .hasText (this . getQuery () .getQueryString (), "Query must not be null or empty" );
427
436
428
- Select selectStatement = parseSelectStatement (query .getQueryString ());
437
+ Select selectStatement = parseSelectStatement (this . getQuery () .getQueryString ());
429
438
430
439
if (selectStatement .getSelectBody () instanceof ValuesStatement ) {
431
440
return "" ;
@@ -451,7 +460,7 @@ public String getProjection() {
451
460
452
461
@ Override
453
462
public Set <String > getJoinAliases () {
454
- return this .getJoinAliases (this .query .getQueryString ());
463
+ return this .getJoinAliases (this .getQuery () .getQueryString ());
455
464
}
456
465
457
466
/**
@@ -492,11 +501,6 @@ private boolean onlyASingleColumnProjection(List<SelectItem> projection) {
492
501
&& (((SelectExpressionItem ) projection .get (0 )).getExpression ()) instanceof Column ;
493
502
}
494
503
495
- @ Override
496
- public DeclaredQuery getQuery () {
497
- return this .query ;
498
- }
499
-
500
504
/**
501
505
* An enum to represent the top level parsed statement of the provided query.
502
506
* <ul>
0 commit comments