diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java index 6c328b1f36..aec9763fa0 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java @@ -15,9 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.QueryTokens.TOKEN_CLOSE_PAREN; -import static org.springframework.data.jpa.repository.query.QueryTokens.TOKEN_COMMA; -import static org.springframework.data.jpa.repository.query.QueryTokens.TOKEN_COUNT_FUNC; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import org.springframework.data.jpa.repository.query.QueryRenderer.QueryRendererBuilder; import org.springframework.data.jpa.repository.query.QueryTransformers.CountSelectionTokenStream; @@ -98,7 +96,7 @@ public QueryTokenStream visitSelect_clause(EqlParser.Select_clauseContext ctx) { private QueryRendererBuilder getDistinctCountSelection(QueryTokenStream selectionListbuilder) { QueryRendererBuilder nested = new QueryRendererBuilder(); - CountSelectionTokenStream countSelection = QueryTransformers.filterCountSelection(selectionListbuilder); + CountSelectionTokenStream countSelection = CountSelectionTokenStream.create(selectionListbuilder); if (countSelection.requiresPrimaryAlias()) { // constructor diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlCountQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlCountQueryTransformer.java index 4e083c757d..735bdae29c 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlCountQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlCountQueryTransformer.java @@ -251,7 +251,7 @@ private QueryRendererBuilder visitSubQuerySelectClause(SelectClauseContext ctx, private QueryRendererBuilder getDistinctCountSelection(QueryTokenStream selectionListbuilder) { QueryRendererBuilder nested = new QueryRendererBuilder(); - CountSelectionTokenStream countSelection = QueryTransformers.filterCountSelection(selectionListbuilder); + CountSelectionTokenStream countSelection = CountSelectionTokenStream.create(selectionListbuilder); if (countSelection.requiresPrimaryAlias()) { // constructor diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java index 6ceb6e171a..2adac83e9b 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlCountQueryTransformer.java @@ -96,7 +96,7 @@ public QueryRendererBuilder visitSelect_clause(JpqlParser.Select_clauseContext c private QueryRendererBuilder getDistinctCountSelection(QueryTokenStream selectionListbuilder) { QueryRendererBuilder nested = new QueryRendererBuilder(); - CountSelectionTokenStream countSelection = QueryTransformers.filterCountSelection(selectionListbuilder); + CountSelectionTokenStream countSelection = CountSelectionTokenStream.create(selectionListbuilder); if (countSelection.requiresPrimaryAlias()) { // constructor diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTransformers.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTransformers.java index 7481000ff8..46bdc36003 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTransformers.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTransformers.java @@ -29,46 +29,46 @@ */ class QueryTransformers { - static CountSelectionTokenStream filterCountSelection(QueryTokenStream selection) { + static class CountSelectionTokenStream implements QueryTokenStream { - List target = new ArrayList<>(selection.size()); - boolean skipNext = false; - boolean containsNew = false; + private final List tokens; + private final boolean requiresPrimaryAlias; - for (QueryToken token : selection) { + CountSelectionTokenStream(List tokens, boolean requiresPrimaryAlias) { + this.tokens = tokens; + this.requiresPrimaryAlias = requiresPrimaryAlias; + } - if (skipNext) { - skipNext = false; - continue; - } + static CountSelectionTokenStream create(QueryTokenStream selection) { - if (token.equals(TOKEN_AS)) { - skipNext = true; - continue; - } + List target = new ArrayList<>(selection.size()); + boolean skipNext = false; + boolean containsNew = false; - if (!token.equals(TOKEN_COMMA) && token.isExpression()) { - token = QueryTokens.token(token.value()); - } + for (QueryToken token : selection) { - if (!containsNew && token.value().contains("new")) { - containsNew = true; - } + if (skipNext) { + skipNext = false; + continue; + } - target.add(token); - } + if (token.equals(TOKEN_AS)) { + skipNext = true; + continue; + } - return new CountSelectionTokenStream(target, containsNew); - } + if (!token.equals(TOKEN_COMMA) && token.isExpression()) { + token = QueryTokens.token(token.value()); + } - static class CountSelectionTokenStream implements QueryTokenStream { + if (!containsNew && token.value().contains("new")) { + containsNew = true; + } - private final List tokens; - private final boolean requiresPrimaryAlias; + target.add(token); + } - public CountSelectionTokenStream(List tokens, boolean requiresPrimaryAlias) { - this.tokens = tokens; - this.requiresPrimaryAlias = requiresPrimaryAlias; + return new CountSelectionTokenStream(target, containsNew); } @Override diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java index c71079a807..35b6833848 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryTransformerTests.java @@ -99,7 +99,7 @@ void applyCountToMoreComplexQuery() { } @Test - void applyCountToAlreadySorteQuery() { + void applyCountToAlreadySortedQuery() { // given var original = "SELECT e FROM Employee e where e.name = :name ORDER BY e.modified_date";