Skip to content

Commit 8b2530e

Browse files
committed
Polishing.
See #2555.
1 parent 1dfe3fa commit 8b2530e

File tree

3 files changed

+20
-13
lines changed

3 files changed

+20
-13
lines changed

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

+18-13
Original file line numberDiff line numberDiff line change
@@ -63,16 +63,18 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer {
6363
* @param query the query we want to enhance. Must not be {@literal null}.
6464
*/
6565
public JSqlParserQueryEnhancer(DeclaredQuery query) {
66+
6667
this.query = query;
6768
this.parsedType = detectParsedType();
6869
}
6970

7071
/**
7172
* Detects what type of query is provided.
72-
*
73+
*
7374
* @return the parsed type
7475
*/
7576
private ParsedType detectParsedType() {
77+
7678
try {
7779
Statement statement = CCJSqlParserUtil.parse(this.query.getQueryString());
7880

@@ -85,14 +87,14 @@ private ParsedType detectParsedType() {
8587
} else {
8688
return ParsedType.SELECT;
8789
}
88-
8990
} catch (JSQLParserException e) {
9091
throw new IllegalArgumentException("The query you provided is not a valid SQL Query!", e);
9192
}
9293
}
9394

9495
@Override
9596
public String applySorting(Sort sort, @Nullable String alias) {
97+
9698
String queryString = query.getQueryString();
9799
Assert.hasText(queryString, "Query must not be null or empty!");
98100

@@ -168,9 +170,11 @@ Set<String> getSelectionAliases() {
168170
* @return a {@literal Set} of aliases used in the query. Guaranteed to be not {@literal null}.
169171
*/
170172
private Set<String> getJoinAliases(String query) {
173+
171174
if (this.parsedType != ParsedType.SELECT) {
172175
return new HashSet<>();
173176
}
177+
174178
return getJoinAliases((PlainSelect) parseSelectStatement(query).getSelectBody());
175179
}
176180

@@ -377,16 +381,17 @@ private boolean onlyASingleColumnProjection(List<SelectItem> projection) {
377381
public DeclaredQuery getQuery() {
378382
return this.query;
379383
}
380-
}
381384

382-
/**
383-
* An enum to represent the top level parsed statement of the provided query.
384-
* <ul>
385-
* <li>{@code ParsedType.DELETE}: means the top level statement is {@link Delete}</li>
386-
* <li>{@code ParsedType.UPDATE}: means the top level statement is {@link Update}</li>
387-
* <li>{@code ParsedType.SELECT}: means the top level statement is {@link Select}</li>
388-
* </ul>
389-
*/
390-
enum ParsedType {
391-
DELETE, UPDATE, SELECT;
385+
/**
386+
* An enum to represent the top level parsed statement of the provided query.
387+
* <ul>
388+
* <li>{@code ParsedType.DELETE}: means the top level statement is {@link Delete}</li>
389+
* <li>{@code ParsedType.UPDATE}: means the top level statement is {@link Update}</li>
390+
* <li>{@code ParsedType.SELECT}: means the top level statement is {@link Select}</li>
391+
* </ul>
392+
*/
393+
enum ParsedType {
394+
DELETE, UPDATE, SELECT;
395+
}
396+
392397
}

src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java

+1
Original file line numberDiff line numberDiff line change
@@ -2680,6 +2680,7 @@ void existsWithSpec() {
26802680

26812681
@Test // GH-2555
26822682
void modifyingUpdateNativeQueryWorksWithJSQLParser() {
2683+
26832684
flushTestUsers();
26842685

26852686
Optional<User> byIdUser = repository.findById(firstUser.getId());

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

+1
Original file line numberDiff line numberDiff line change
@@ -733,6 +733,7 @@ void countQueryUsesCorrectVariable() {
733733

734734
@Test // GH-2555
735735
void modifyingQueriesAreDetectedCorrectly() {
736+
736737
String modifyingQuery = "update userinfo user set user.is_in_treatment = false where user.id = :userId";
737738

738739
String aliasNotConsideringQueryType = QueryUtils.detectAlias(modifyingQuery);

0 commit comments

Comments
 (0)