Polishing.
Fix typos, move QueryTransformers.filterCountSelection to CountSelectionTokenStream.create. Original Pull Request: #3553
This commit is contained in:
committed by
Christoph Strobl
parent
9d4bde3e7d
commit
b279ff0b88
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -29,48 +29,48 @@ import java.util.List;
|
||||
*/
|
||||
class QueryTransformers {
|
||||
|
||||
static CountSelectionTokenStream filterCountSelection(QueryTokenStream selection) {
|
||||
|
||||
List<QueryToken> 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<QueryToken> tokens;
|
||||
private final boolean requiresPrimaryAlias;
|
||||
|
||||
public CountSelectionTokenStream(List<QueryToken> tokens, boolean requiresPrimaryAlias) {
|
||||
CountSelectionTokenStream(List<QueryToken> tokens, boolean requiresPrimaryAlias) {
|
||||
this.tokens = tokens;
|
||||
this.requiresPrimaryAlias = requiresPrimaryAlias;
|
||||
}
|
||||
|
||||
static CountSelectionTokenStream create(QueryTokenStream selection) {
|
||||
|
||||
List<QueryToken> 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<QueryToken> iterator() {
|
||||
return tokens.iterator();
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user