64
64
public class JSqlParserQueryEnhancer implements QueryEnhancer {
65
65
66
66
private final DeclaredQuery query ;
67
+ private final Statement statement ;
67
68
private final ParsedType parsedType ;
68
69
69
70
/**
@@ -72,34 +73,34 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer {
72
73
public JSqlParserQueryEnhancer (DeclaredQuery query ) {
73
74
74
75
this .query = query ;
75
- this .parsedType = detectParsedType ();
76
+ try {
77
+ this .statement = CCJSqlParserUtil .parse (this .query .getQueryString ());
78
+ } catch (JSQLParserException e ) {
79
+ throw new IllegalArgumentException ("The query is not a valid SQL Query" , e );
80
+ }
81
+
82
+ this .parsedType = detectParsedType (statement );
76
83
}
77
84
78
85
/**
79
86
* Detects what type of query is provided.
80
87
*
81
88
* @return the parsed type
82
89
*/
83
- private ParsedType detectParsedType () {
84
-
85
- try {
86
- Statement statement = CCJSqlParserUtil .parse (this .query .getQueryString ());
87
-
88
- if (statement instanceof Insert ) {
89
- return ParsedType .INSERT ;
90
- } else if (statement instanceof Update ) {
91
- return ParsedType .UPDATE ;
92
- } else if (statement instanceof Delete ) {
93
- return ParsedType .DELETE ;
94
- } else if (statement instanceof Select ) {
95
- return ParsedType .SELECT ;
96
- } else if (statement instanceof Merge ) {
97
- return ParsedType .MERGE ;
98
- } else {
99
- return ParsedType .OTHER ;
100
- }
101
- } catch (JSQLParserException e ) {
102
- throw new IllegalArgumentException ("The query you provided is not a valid SQL Query!" , e );
90
+ private static ParsedType detectParsedType (Statement statement ) {
91
+
92
+ if (statement instanceof Insert ) {
93
+ return ParsedType .INSERT ;
94
+ } else if (statement instanceof Update ) {
95
+ return ParsedType .UPDATE ;
96
+ } else if (statement instanceof Delete ) {
97
+ return ParsedType .DELETE ;
98
+ } else if (statement instanceof Select ) {
99
+ return ParsedType .SELECT ;
100
+ } else if (statement instanceof Merge ) {
101
+ return ParsedType .MERGE ;
102
+ } else {
103
+ return ParsedType .OTHER ;
103
104
}
104
105
}
105
106
@@ -127,9 +128,8 @@ public String applySorting(Sort sort, @Nullable String alias) {
127
128
128
129
PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
129
130
130
- final Set <String > joinAliases = getJoinAliases (selectBody );
131
-
132
- final Set <String > selectionAliases = getSelectionAliases (selectBody );
131
+ Set <String > joinAliases = getJoinAliases (selectBody );
132
+ Set <String > selectionAliases = getSelectionAliases (selectBody );
133
133
134
134
List <OrderByElement > orderByElements = sort .stream () //
135
135
.map (order -> getOrderClause (joinAliases , selectionAliases , alias , order )) //
@@ -203,7 +203,7 @@ Set<String> getSelectionAliases() {
203
203
return new HashSet <>();
204
204
}
205
205
206
- Select selectStatement = parseSelectStatement ( this . query . getQueryString ()) ;
206
+ Select selectStatement = ( Select ) statement ;
207
207
PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
208
208
return this .getSelectionAliases (selectBody );
209
209
}
@@ -220,7 +220,7 @@ private Set<String> getJoinAliases(String query) {
220
220
return new HashSet <>();
221
221
}
222
222
223
- Select selectStatement = parseSelectStatement ( query ) ;
223
+ Select selectStatement = ( Select ) statement ;
224
224
if (selectStatement .getSelectBody ()instanceof PlainSelect selectBody ) {
225
225
return getJoinAliases (selectBody );
226
226
}
@@ -306,24 +306,23 @@ private String detectAlias(String query) {
306
306
307
307
if (ParsedType .MERGE .equals (this .parsedType )) {
308
308
309
- Merge mergeStatement = parseSelectStatement ( query , Merge . class ) ;
309
+ Merge mergeStatement = ( Merge ) statement ;
310
310
return detectAlias (mergeStatement );
311
311
312
312
} else if (ParsedType .SELECT .equals (this .parsedType )) {
313
313
314
- Select selectStatement = parseSelectStatement ( query ) ;
314
+ Select selectStatement = ( Select ) statement ;
315
315
316
316
/*
317
317
* For all the other types ({@link ValuesStatement} and {@link SetOperationList}) it does not make sense to provide
318
318
* alias since:
319
319
* ValuesStatement has no alias
320
320
* SetOperation can have multiple alias for each operation item
321
321
*/
322
- if (!(selectStatement .getSelectBody () instanceof PlainSelect )) {
322
+ if (!(selectStatement .getSelectBody ()instanceof PlainSelect selectBody )) {
323
323
return null ;
324
324
}
325
325
326
- PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
327
326
return detectAlias (selectBody );
328
327
}
329
328
@@ -375,12 +374,10 @@ public String createCountQueryFor(@Nullable String countProjection) {
375
374
/*
376
375
We only support count queries for {@link PlainSelect}.
377
376
*/
378
- if (!(selectStatement .getSelectBody () instanceof PlainSelect )) {
377
+ if (!(selectStatement .getSelectBody ()instanceof PlainSelect selectBody )) {
379
378
return this .query .getQueryString ();
380
379
}
381
380
382
- PlainSelect selectBody = (PlainSelect ) selectStatement .getSelectBody ();
383
-
384
381
// remove order by
385
382
selectBody .setOrderByElements (null );
386
383
@@ -436,7 +433,7 @@ public String getProjection() {
436
433
437
434
Assert .hasText (query .getQueryString (), "Query must not be null or empty" );
438
435
439
- Select selectStatement = parseSelectStatement ( query . getQueryString ()) ;
436
+ Select selectStatement = ( Select ) statement ;
440
437
441
438
if (selectStatement .getSelectBody () instanceof ValuesStatement ) {
442
439
return "" ;
0 commit comments