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