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 6c328b1f3..aec9763fa 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 @@ class EqlCountQueryTransformer extends EqlQueryRenderer { 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 4e083c757..735bdae29 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 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { 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 6ceb6e171..2adac83e9 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 @@ class JpqlCountQueryTransformer extends JpqlQueryRenderer { 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 7481000ff..46bdc3600 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,48 +29,48 @@ import java.util.List; */ class QueryTransformers { - static CountSelectionTokenStream filterCountSelection(QueryTokenStream selection) { - - List target = new ArrayList<>(selection.size()); - boolean skipNext = false; - boolean containsNew = false; - - for (QueryToken token : selection) { - - if (skipNext) { - skipNext = false; - continue; - } - - if (token.equals(TOKEN_AS)) { - skipNext = true; - continue; - } - - if (!token.equals(TOKEN_COMMA) && token.isExpression()) { - token = QueryTokens.token(token.value()); - } - - if (!containsNew && token.value().contains("new")) { - containsNew = true; - } - - target.add(token); - } - - return new CountSelectionTokenStream(target, containsNew); - } - static class CountSelectionTokenStream implements QueryTokenStream { private final List tokens; private final boolean requiresPrimaryAlias; - public CountSelectionTokenStream(List tokens, boolean requiresPrimaryAlias) { + CountSelectionTokenStream(List tokens, boolean requiresPrimaryAlias) { this.tokens = tokens; this.requiresPrimaryAlias = requiresPrimaryAlias; } + static CountSelectionTokenStream create(QueryTokenStream selection) { + + List target = new ArrayList<>(selection.size()); + boolean skipNext = false; + boolean containsNew = false; + + for (QueryToken token : selection) { + + if (skipNext) { + skipNext = false; + continue; + } + + if (token.equals(TOKEN_AS)) { + skipNext = true; + continue; + } + + if (!token.equals(TOKEN_COMMA) && token.isExpression()) { + token = QueryTokens.token(token.value()); + } + + if (!containsNew && token.value().contains("new")) { + containsNew = true; + } + + target.add(token); + } + + return new CountSelectionTokenStream(target, containsNew); + } + @Override public Iterator iterator() { return tokens.iterator(); 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 c71079a80..35b683384 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 @@ class JpqlQueryTransformerTests { } @Test - void applyCountToAlreadySorteQuery() { + void applyCountToAlreadySortedQuery() { // given var original = "SELECT e FROM Employee e where e.name = :name ORDER BY e.modified_date";