diff --git a/spring-data-jpa-performance/src/test/java/org/springframework/data/jpa/repository/Profiler.java b/spring-data-jpa-performance/src/test/java/org/springframework/data/jpa/repository/Profiler.java deleted file mode 100644 index f394ae6f8..000000000 --- a/spring-data-jpa-performance/src/test/java/org/springframework/data/jpa/repository/Profiler.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.jpa.repository; - -import java.lang.reflect.Method; - -import org.springframework.data.domain.Sort; -import org.springframework.data.jpa.provider.PersistenceProvider; -import org.springframework.data.jpa.repository.query.JpaQueryMethod; -import org.springframework.data.jpa.repository.query.StringQuery; -import org.springframework.data.projection.ProjectionFactory; -import org.springframework.data.projection.SpelAwareProxyProjectionFactory; -import org.springframework.data.repository.core.support.DefaultRepositoryMetadata; - -/** - * @author Mark Paluch - */ -public class Profiler { - - public static void main(String[] args) throws Exception { - - DefaultRepositoryMetadata art = new DefaultRepositoryMetadata(PersonRepository.class); - Method method = PersonRepository.class.getMethod("findAllWithAnnotatedQueryByFirstname", String.class, Sort.class); - ProjectionFactory projectionFactory = new SpelAwareProxyProjectionFactory(); - - System.out.println("Ready. Waiting 10sec"); - Thread.sleep(10000); - - System.out.println("Go!"); - - - while (true) { - - JpaQueryMethod queryMethod = new JpaQueryMethod(method, art, projectionFactory, PersistenceProvider.HIBERNATE); - StringQuery stringQuery = new StringQuery(queryMethod.getRequiredAnnotatedQuery(), false); - } - - } -} diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EmptyQueryTokenStream.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EmptyQueryTokenStream.java new file mode 100644 index 000000000..dd1dd6dc8 --- /dev/null +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EmptyQueryTokenStream.java @@ -0,0 +1,62 @@ +/* + * Copyright 2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.jpa.repository.query; + +import java.util.Collections; +import java.util.Iterator; + +/** + * Empty QueryTokenStream. + * + * @author Mark Paluch + * @since 3.4 + */ +class EmptyQueryTokenStream implements QueryTokenStream { + + static final EmptyQueryTokenStream INSTANCE = new EmptyQueryTokenStream(); + + private EmptyQueryTokenStream() {} + + @Override + public QueryToken getFirst() { + return null; + } + + @Override + public QueryToken getLast() { + return null; + } + + @Override + public boolean isExpression() { + return false; + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return true; + } + + @Override + public Iterator iterator() { + return Collections.emptyIterator(); + } +} 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 2f14e10f7..431fabf95 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,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +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; @@ -62,28 +62,28 @@ class EqlCountQueryTransformer extends EqlQueryRenderer { } @Override - public QueryRendererBuilder visitSelect_clause(EqlParser.Select_clauseContext ctx) { + public QueryTokenStream visitSelect_clause(EqlParser.Select_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); builder.append(TOKEN_COUNT_FUNC); if (countProjection != null) { - builder.append(JpaQueryParsingToken.token(countProjection)); + builder.append(QueryTokens.token(countProjection)); } QueryRendererBuilder nested = QueryRenderer.builder(); if (ctx.DISTINCT() != null) { - nested.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + nested.append(QueryTokens.expression(ctx.DISTINCT())); } if (countProjection == null) { if (ctx.DISTINCT() != null) { - QueryRendererBuilder selectionListbuilder = QueryRendererBuilder.concat(ctx.select_item(), this::visit, + QueryTokenStream selectionListbuilder = QueryTokenStream.concat(ctx.select_item(), this::visit, TOKEN_COMMA); CountSelectionTokenStream countSelection = QueryTransformers @@ -91,13 +91,13 @@ class EqlCountQueryTransformer extends EqlQueryRenderer { if (countSelection.requiresPrimaryAlias()) { // constructor - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } else { // keep all the select items to distinct against nested.append(countSelection); } } else { - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryIntrospector.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryIntrospector.java index 2f094b2a2..c5fc907e7 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryIntrospector.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryIntrospector.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.Collections; @@ -34,7 +34,7 @@ class EqlQueryIntrospector extends EqlBaseVisitor implements ParsedQueryIn private final EqlQueryRenderer renderer = new EqlQueryRenderer(); private @Nullable String primaryFromAlias = null; - private @Nullable List projection; + private @Nullable List projection; private boolean projectionProcessed; private boolean hasConstructorExpression = false; @@ -44,7 +44,7 @@ class EqlQueryIntrospector extends EqlBaseVisitor implements ParsedQueryIn } @Override - public List getProjection() { + public List getProjection() { return projection == null ? Collections.emptyList() : projection; } @@ -57,7 +57,7 @@ class EqlQueryIntrospector extends EqlBaseVisitor implements ParsedQueryIn public Void visitSelect_clause(EqlParser.Select_clauseContext ctx) { List selections = ctx.select_item(); - List selectItemTokens = new ArrayList<>(selections.size() * 2); + List selectItemTokens = new ArrayList<>(selections.size() * 2); for (EqlParser.Select_itemContext selection : selections) { @@ -65,7 +65,7 @@ class EqlQueryIntrospector extends EqlBaseVisitor implements ParsedQueryIn selectItemTokens.add(TOKEN_COMMA); } - selectItemTokens.add(JpaQueryParsingToken.token(renderer.visitSelect_item(selection).build().render())); + selectItemTokens.add(QueryTokens.token(QueryRenderer.from(renderer.visitSelect_item(selection)).render())); } if (!projectionProcessed) { diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java index 14dd5ed68..17e6e51a5 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.List; @@ -32,15 +32,15 @@ import org.springframework.data.jpa.repository.query.QueryRenderer.QueryRenderer * @since 3.2 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode" }) -class EqlQueryRenderer extends EqlBaseVisitor { +class EqlQueryRenderer extends EqlBaseVisitor { @Override - public QueryRendererBuilder visitStart(EqlParser.StartContext ctx) { + public QueryTokenStream visitStart(EqlParser.StartContext ctx) { return visit(ctx.ql_statement()); } @Override - public QueryRendererBuilder visitQl_statement(EqlParser.Ql_statementContext ctx) { + public QueryTokenStream visitQl_statement(EqlParser.Ql_statementContext ctx) { if (ctx.select_statement() != null) { return visit(ctx.select_statement()); @@ -54,7 +54,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelect_statement(EqlParser.Select_statementContext ctx) { + public QueryTokenStream visitSelect_statement(EqlParser.Select_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -87,27 +87,27 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSetOperator(EqlParser.SetOperatorContext ctx) { + public QueryTokenStream visitSetOperator(EqlParser.SetOperatorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.UNION() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.UNION())); + builder.append(QueryTokens.expression(ctx.UNION())); } else if (ctx.INTERSECT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INTERSECT())); + builder.append(QueryTokens.expression(ctx.INTERSECT())); } else if (ctx.EXCEPT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.EXCEPT())); + builder.append(QueryTokens.expression(ctx.EXCEPT())); } if (ctx.ALL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ALL())); + builder.append(QueryTokens.expression(ctx.ALL())); } return builder; } @Override - public QueryRendererBuilder visitUpdate_statement(EqlParser.Update_statementContext ctx) { + public QueryTokenStream visitUpdate_statement(EqlParser.Update_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -121,7 +121,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDelete_statement(EqlParser.Delete_statementContext ctx) { + public QueryTokenStream visitDelete_statement(EqlParser.Delete_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -135,25 +135,25 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFrom_clause(EqlParser.From_clauseContext ctx) { + public QueryTokenStream visitFrom_clause(EqlParser.From_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendInline(visit(ctx.identification_variable_declaration())); if (!ctx.identificationVariableDeclarationOrCollectionMemberDeclaration().isEmpty()) { builder.append(TOKEN_COMMA); } - builder.appendExpression(QueryRendererBuilder + builder.appendExpression(QueryTokenStream .concat(ctx.identificationVariableDeclarationOrCollectionMemberDeclaration(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitIdentificationVariableDeclarationOrCollectionMemberDeclaration( + public QueryTokenStream visitIdentificationVariableDeclarationOrCollectionMemberDeclaration( EqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx) { if (ctx.identification_variable_declaration() != null) { @@ -178,7 +178,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitIdentification_variable_declaration( + public QueryTokenStream visitIdentification_variable_declaration( EqlParser.Identification_variable_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -196,7 +196,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitRange_variable_declaration(EqlParser.Range_variable_declarationContext ctx) { + public QueryTokenStream visitRange_variable_declaration(EqlParser.Range_variable_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -207,7 +207,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } builder.appendExpression(visit(ctx.identification_variable())); @@ -216,7 +216,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoin(EqlParser.JoinContext ctx) { + public QueryTokenStream visitJoin(EqlParser.JoinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -224,7 +224,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.appendExpression(visit(ctx.join_association_path_expression())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); @@ -237,16 +237,16 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFetch_join(EqlParser.Fetch_joinContext ctx) { + public QueryTokenStream visitFetch_join(EqlParser.Fetch_joinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.join_spec())); - builder.append(JpaQueryParsingToken.expression(ctx.FETCH())); + builder.append(QueryTokens.expression(ctx.FETCH())); builder.appendExpression(visit(ctx.join_association_path_expression())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); @@ -259,39 +259,39 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoin_spec(EqlParser.Join_specContext ctx) { + public QueryTokenStream visitJoin_spec(EqlParser.Join_specContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LEFT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LEFT())); + builder.append(QueryTokens.expression(ctx.LEFT())); } if (ctx.OUTER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OUTER())); + builder.append(QueryTokens.expression(ctx.OUTER())); } if (ctx.INNER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INNER())); + builder.append(QueryTokens.expression(ctx.INNER())); } if (ctx.JOIN() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.JOIN())); + builder.append(QueryTokens.expression(ctx.JOIN())); } return builder; } @Override - public QueryRendererBuilder visitJoin_condition(EqlParser.Join_conditionContext ctx) { + public QueryTokenStream visitJoin_condition(EqlParser.Join_conditionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ON())); + builder.append(QueryTokens.expression(ctx.ON())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitJoin_association_path_expression( + public QueryTokenStream visitJoin_association_path_expression( EqlParser.Join_association_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -308,10 +308,10 @@ class EqlQueryRenderer extends EqlBaseVisitor { QueryRendererBuilder nested = QueryRenderer.builder(); - nested.append(JpaQueryParsingToken.token(ctx.TREAT())); + nested.append(QueryTokens.token(ctx.TREAT())); nested.append(TOKEN_OPEN_PAREN); nested.appendInline(visit(ctx.join_collection_valued_path_expression())); - nested.append(JpaQueryParsingToken.expression(ctx.AS())); + nested.append(QueryTokens.expression(ctx.AS())); nested.appendInline(visit(ctx.subtype())); nested.append(TOKEN_CLOSE_PAREN); @@ -320,10 +320,10 @@ class EqlQueryRenderer extends EqlBaseVisitor { QueryRendererBuilder nested = QueryRenderer.builder(); - nested.append(JpaQueryParsingToken.token(ctx.TREAT())); + nested.append(QueryTokens.token(ctx.TREAT())); nested.append(TOKEN_OPEN_PAREN); nested.appendInline(visit(ctx.join_single_valued_path_expression())); - nested.append(JpaQueryParsingToken.expression(ctx.AS())); + nested.append(QueryTokens.expression(ctx.AS())); nested.appendInline(visit(ctx.subtype())); nested.append(TOKEN_CLOSE_PAREN); @@ -335,7 +335,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoin_collection_valued_path_expression( + public QueryTokenStream visitJoin_collection_valued_path_expression( EqlParser.Join_collection_valued_path_expressionContext ctx) { List items = new ArrayList<>(2 + ctx.single_valued_embeddable_object_field().size()); @@ -346,11 +346,11 @@ class EqlQueryRenderer extends EqlBaseVisitor { items.addAll(ctx.single_valued_embeddable_object_field()); items.add(ctx.collection_valued_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitJoin_single_valued_path_expression( + public QueryTokenStream visitJoin_single_valued_path_expression( EqlParser.Join_single_valued_path_expressionContext ctx) { List items = new ArrayList<>(2 + ctx.single_valued_embeddable_object_field().size()); @@ -361,21 +361,21 @@ class EqlQueryRenderer extends EqlBaseVisitor { items.addAll(ctx.single_valued_embeddable_object_field()); items.add(ctx.single_valued_object_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitCollection_member_declaration(EqlParser.Collection_member_declarationContext ctx) { + public QueryTokenStream visitCollection_member_declaration(EqlParser.Collection_member_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.IN())); + builder.append(QueryTokens.token(ctx.IN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.collection_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } builder.appendExpression(visit(ctx.identification_variable())); @@ -384,7 +384,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitQualified_identification_variable( + public QueryTokenStream visitQualified_identification_variable( EqlParser.Qualified_identification_variableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -393,7 +393,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(visit(ctx.map_field_identification_variable())); } else if (ctx.identification_variable() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ENTRY())); + builder.append(QueryTokens.expression(ctx.ENTRY())); builder.append(TOKEN_OPEN_PAREN); builder.append(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -403,20 +403,20 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitMap_field_identification_variable( + public QueryTokenStream visitMap_field_identification_variable( EqlParser.Map_field_identification_variableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.KEY() != null) { - builder.append(JpaQueryParsingToken.token(ctx.KEY())); + builder.append(QueryTokens.token(ctx.KEY())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.VALUE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.VALUE())); + builder.append(QueryTokens.token(ctx.VALUE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -426,7 +426,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSingle_valued_path_expression(EqlParser.Single_valued_path_expressionContext ctx) { + public QueryTokenStream visitSingle_valued_path_expression(EqlParser.Single_valued_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -434,10 +434,10 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(visit(ctx.qualified_identification_variable())); } else if (ctx.qualified_identification_variable() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.qualified_identification_variable())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.state_field_path_expression() != null) { @@ -450,7 +450,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneral_identification_variable( + public QueryTokenStream visitGeneral_identification_variable( EqlParser.General_identification_variableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -465,7 +465,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneral_subpath(EqlParser.General_subpathContext ctx) { + public QueryTokenStream visitGeneral_subpath(EqlParser.General_subpathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -474,31 +474,31 @@ class EqlQueryRenderer extends EqlBaseVisitor { } else if (ctx.treated_subpath() != null) { builder.appendInline(visit(ctx.treated_subpath())); - builder.appendInline(QueryRendererBuilder.concat(ctx.single_valued_object_field(), this::visit, TOKEN_DOT)); + builder.appendInline(QueryTokenStream.concat(ctx.single_valued_object_field(), this::visit, TOKEN_DOT)); } return builder; } @Override - public QueryRendererBuilder visitSimple_subpath(EqlParser.Simple_subpathContext ctx) { + public QueryTokenStream visitSimple_subpath(EqlParser.Simple_subpathContext ctx) { List items = new ArrayList<>(1 + ctx.single_valued_object_field().size()); items.add(ctx.general_identification_variable()); items.addAll(ctx.single_valued_object_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitTreated_subpath(EqlParser.Treated_subpathContext ctx) { + public QueryTokenStream visitTreated_subpath(EqlParser.Treated_subpathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.general_subpath())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); @@ -506,7 +506,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitState_field_path_expression(EqlParser.State_field_path_expressionContext ctx) { + public QueryTokenStream visitState_field_path_expression(EqlParser.State_field_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -518,7 +518,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitState_valued_path_expression(EqlParser.State_valued_path_expressionContext ctx) { + public QueryTokenStream visitState_valued_path_expression(EqlParser.State_valued_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -532,7 +532,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSingle_valued_object_path_expression( + public QueryTokenStream visitSingle_valued_object_path_expression( EqlParser.Single_valued_object_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -545,7 +545,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitCollection_valued_path_expression( + public QueryTokenStream visitCollection_valued_path_expression( EqlParser.Collection_valued_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -558,29 +558,29 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitUpdate_clause(EqlParser.Update_clauseContext ctx) { + public QueryTokenStream visitUpdate_clause(EqlParser.Update_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.UPDATE())); + builder.append(QueryTokens.expression(ctx.UPDATE())); builder.appendExpression(visit(ctx.entity_name())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); } - builder.append(JpaQueryParsingToken.expression(ctx.SET())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.update_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.SET())); + builder.appendExpression(QueryTokenStream.concat(ctx.update_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitUpdate_item(EqlParser.Update_itemContext ctx) { + public QueryTokenStream visitUpdate_item(EqlParser.Update_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -597,7 +597,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { items.add(ctx.single_valued_object_field()); } - builder.appendInline(QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT)); + builder.appendInline(QueryTokenStream.concat(items, this::visit, TOKEN_DOT)); builder.append(TOKEN_EQUALS); builder.append(visit(ctx.new_value())); @@ -605,30 +605,30 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitNew_value(EqlParser.New_valueContext ctx) { + public QueryTokenStream visitNew_value(EqlParser.New_valueContext ctx) { if (ctx.scalar_expression() != null) { return visit(ctx.scalar_expression()); } else if (ctx.simple_entity_expression() != null) { return visit(ctx.simple_entity_expression()); } else if (ctx.NULL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.NULL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.NULL())); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitDelete_clause(EqlParser.Delete_clauseContext ctx) { + public QueryTokenStream visitDelete_clause(EqlParser.Delete_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.DELETE())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.DELETE())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendExpression(visit(ctx.entity_name())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); @@ -638,30 +638,30 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelect_clause(EqlParser.Select_clauseContext ctx) { + public QueryTokenStream visitSelect_clause(EqlParser.Select_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } - builder.appendExpression(QueryRendererBuilder.concat(ctx.select_item(), this::visit, TOKEN_COMMA)); + builder.appendExpression(QueryTokenStream.concat(ctx.select_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitSelect_item(EqlParser.Select_itemContext ctx) { + public QueryTokenStream visitSelect_item(EqlParser.Select_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.select_expression())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.result_variable() != null) { @@ -672,7 +672,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelect_expression(EqlParser.Select_expressionContext ctx) { + public QueryTokenStream visitSelect_expression(EqlParser.Select_expressionContext ctx) { if (ctx.single_valued_path_expression() != null) { return visit(ctx.single_valued_path_expression()); @@ -688,7 +688,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.OBJECT())); + builder.append(QueryTokens.token(ctx.OBJECT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -703,21 +703,21 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitConstructor_expression(EqlParser.Constructor_expressionContext ctx) { + public QueryTokenStream visitConstructor_expression(EqlParser.Constructor_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.NEW())); + builder.append(QueryTokens.expression(ctx.NEW())); builder.append(visit(ctx.constructor_name())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.constructor_item(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.constructor_item(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitConstructor_item(EqlParser.Constructor_itemContext ctx) { + public QueryTokenStream visitConstructor_item(EqlParser.Constructor_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -735,39 +735,39 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitAggregate_expression(EqlParser.Aggregate_expressionContext ctx) { + public QueryTokenStream visitAggregate_expression(EqlParser.Aggregate_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.AVG() != null || ctx.MAX() != null || ctx.MIN() != null || ctx.SUM() != null) { if (ctx.AVG() != null) { - builder.append(JpaQueryParsingToken.token(ctx.AVG())); + builder.append(QueryTokens.token(ctx.AVG())); } if (ctx.MAX() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MAX())); + builder.append(QueryTokens.token(ctx.MAX())); } if (ctx.MIN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MIN())); + builder.append(QueryTokens.token(ctx.MIN())); } if (ctx.SUM() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SUM())); + builder.append(QueryTokens.token(ctx.SUM())); } builder.append(TOKEN_OPEN_PAREN); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.appendInline(visit(ctx.state_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.COUNT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.COUNT())); + builder.append(QueryTokens.token(ctx.COUNT())); builder.append(TOKEN_OPEN_PAREN); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } if (ctx.identification_variable() != null) { builder.appendInline(visit(ctx.identification_variable())); @@ -785,30 +785,30 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitWhere_clause(EqlParser.Where_clauseContext ctx) { + public QueryTokenStream visitWhere_clause(EqlParser.Where_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHERE())); + builder.append(QueryTokens.expression(ctx.WHERE())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitGroupby_clause(EqlParser.Groupby_clauseContext ctx) { + public QueryTokenStream visitGroupby_clause(EqlParser.Groupby_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.GROUP())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.groupby_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.GROUP())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.appendExpression(QueryTokenStream.concat(ctx.groupby_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitGroupby_item(EqlParser.Groupby_itemContext ctx) { + public QueryTokenStream visitGroupby_item(EqlParser.Groupby_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -824,30 +824,30 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitHaving_clause(EqlParser.Having_clauseContext ctx) { + public QueryTokenStream visitHaving_clause(EqlParser.Having_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.HAVING())); + builder.append(QueryTokens.expression(ctx.HAVING())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitOrderby_clause(EqlParser.Orderby_clauseContext ctx) { + public QueryTokenStream visitOrderby_clause(EqlParser.Orderby_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ORDER())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - builder.append(QueryRendererBuilder.concat(ctx.orderby_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.ORDER())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.append(QueryTokenStream.concat(ctx.orderby_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitOrderby_item(EqlParser.Orderby_itemContext ctx) { + public QueryTokenStream visitOrderby_item(EqlParser.Orderby_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -864,10 +864,10 @@ class EqlQueryRenderer extends EqlBaseVisitor { } if (ctx.ASC() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ASC())); + builder.append(QueryTokens.expression(ctx.ASC())); } if (ctx.DESC() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DESC())); + builder.append(QueryTokens.expression(ctx.DESC())); } if (ctx.nullsPrecedence() != null) { @@ -878,7 +878,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitNullsPrecedence(EqlParser.NullsPrecedenceContext ctx) { + public QueryTokenStream visitNullsPrecedence(EqlParser.NullsPrecedenceContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -894,7 +894,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSubquery(EqlParser.SubqueryContext ctx) { + public QueryTokenStream visitSubquery(EqlParser.SubqueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -914,57 +914,57 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSubquery_from_clause(EqlParser.Subquery_from_clauseContext ctx) { + public QueryTokenStream visitSubquery_from_clause(EqlParser.Subquery_from_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendExpression( - QueryRendererBuilder.concat(ctx.subselect_identification_variable_declaration(), this::visit, TOKEN_COMMA)); + QueryTokenStream.concat(ctx.subselect_identification_variable_declaration(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitSubselect_identification_variable_declaration( + public QueryTokenStream visitSubselect_identification_variable_declaration( EqlParser.Subselect_identification_variable_declarationContext ctx) { return super.visitSubselect_identification_variable_declaration(ctx); } @Override - public QueryRendererBuilder visitDerived_path_expression(EqlParser.Derived_path_expressionContext ctx) { + public QueryTokenStream visitDerived_path_expression(EqlParser.Derived_path_expressionContext ctx) { return super.visitDerived_path_expression(ctx); } @Override - public QueryRendererBuilder visitGeneral_derived_path(EqlParser.General_derived_pathContext ctx) { + public QueryTokenStream visitGeneral_derived_path(EqlParser.General_derived_pathContext ctx) { return super.visitGeneral_derived_path(ctx); } @Override - public QueryRendererBuilder visitSimple_derived_path(EqlParser.Simple_derived_pathContext ctx) { + public QueryTokenStream visitSimple_derived_path(EqlParser.Simple_derived_pathContext ctx) { return super.visitSimple_derived_path(ctx); } @Override - public QueryRendererBuilder visitTreated_derived_path(EqlParser.Treated_derived_pathContext ctx) { + public QueryTokenStream visitTreated_derived_path(EqlParser.Treated_derived_pathContext ctx) { return super.visitTreated_derived_path(ctx); } @Override - public QueryRendererBuilder visitDerived_collection_member_declaration( + public QueryTokenStream visitDerived_collection_member_declaration( EqlParser.Derived_collection_member_declarationContext ctx) { return super.visitDerived_collection_member_declaration(ctx); } @Override - public QueryRendererBuilder visitSimple_select_clause(EqlParser.Simple_select_clauseContext ctx) { + public QueryTokenStream visitSimple_select_clause(EqlParser.Simple_select_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.append(visit(ctx.simple_select_expression())); @@ -972,7 +972,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_select_expression(EqlParser.Simple_select_expressionContext ctx) { + public QueryTokenStream visitSimple_select_expression(EqlParser.Simple_select_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -990,7 +990,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitScalar_expression(EqlParser.Scalar_expressionContext ctx) { + public QueryTokenStream visitScalar_expression(EqlParser.Scalar_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1014,13 +1014,13 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_expression(EqlParser.Conditional_expressionContext ctx) { + public QueryTokenStream visitConditional_expression(EqlParser.Conditional_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.conditional_expression() != null) { builder.append(visit(ctx.conditional_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.OR())); + builder.append(QueryTokens.expression(ctx.OR())); builder.append(visit(ctx.conditional_term())); } else { builder.append(visit(ctx.conditional_term())); @@ -1030,13 +1030,13 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_term(EqlParser.Conditional_termContext ctx) { + public QueryTokenStream visitConditional_term(EqlParser.Conditional_termContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.conditional_term() != null) { builder.append(visit(ctx.conditional_term())); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.append(visit(ctx.conditional_factor())); } else { builder.append(visit(ctx.conditional_factor())); @@ -1046,12 +1046,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_factor(EqlParser.Conditional_factorContext ctx) { + public QueryTokenStream visitConditional_factor(EqlParser.Conditional_factorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } builder.append(visit(ctx.conditional_primary())); @@ -1060,7 +1060,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_primary(EqlParser.Conditional_primaryContext ctx) { + public QueryTokenStream visitConditional_primary(EqlParser.Conditional_primaryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1077,7 +1077,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_cond_expression(EqlParser.Simple_cond_expressionContext ctx) { + public QueryTokenStream visitSimple_cond_expression(EqlParser.Simple_cond_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1103,7 +1103,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitBetween_expression(EqlParser.Between_expressionContext ctx) { + public QueryTokenStream visitBetween_expression(EqlParser.Between_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1112,12 +1112,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(visit(ctx.arithmetic_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.arithmetic_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.arithmetic_expression(2))); } else if (ctx.string_expression(0) != null) { @@ -1125,12 +1125,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.appendExpression(visit(ctx.string_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.string_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.string_expression(2))); } else if (ctx.datetime_expression(0) != null) { @@ -1138,12 +1138,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(visit(ctx.datetime_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.datetime_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.datetime_expression(2))); } @@ -1151,7 +1151,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitIn_expression(EqlParser.In_expressionContext ctx) { + public QueryTokenStream visitIn_expression(EqlParser.In_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1162,16 +1162,16 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(visit(ctx.type_discriminator())); } if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } if (ctx.IN() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.IN())); + builder.append(QueryTokens.expression(ctx.IN())); } if (ctx.in_item() != null && !ctx.in_item().isEmpty()) { builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.in_item(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.in_item(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.subquery() != null) { @@ -1187,7 +1187,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitIn_item(EqlParser.In_itemContext ctx) { + public QueryTokenStream visitIn_item(EqlParser.In_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1201,20 +1201,20 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitLike_expression(EqlParser.Like_expressionContext ctx) { + public QueryTokenStream visitLike_expression(EqlParser.Like_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.string_expression())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.LIKE())); + builder.append(QueryTokens.expression(ctx.LIKE())); builder.appendExpression(visit(ctx.pattern_value())); if (ctx.ESCAPE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ESCAPE())); + builder.append(QueryTokens.expression(ctx.ESCAPE())); builder.appendExpression(visit(ctx.escape_character())); } @@ -1222,7 +1222,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitNull_comparison_expression(EqlParser.Null_comparison_expressionContext ctx) { + public QueryTokenStream visitNull_comparison_expression(EqlParser.Null_comparison_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1235,46 +1235,46 @@ class EqlQueryRenderer extends EqlBaseVisitor { } if (ctx.op != null) { - builder.append(JpaQueryParsingToken.expression(ctx.op.getText())); + builder.append(QueryTokens.expression(ctx.op.getText())); } else { - builder.append(JpaQueryParsingToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } } - builder.append(JpaQueryParsingToken.expression(ctx.NULL())); + builder.append(QueryTokens.expression(ctx.NULL())); return builder; } @Override - public QueryRendererBuilder visitEmpty_collection_comparison_expression( + public QueryTokenStream visitEmpty_collection_comparison_expression( EqlParser.Empty_collection_comparison_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.collection_valued_path_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.EMPTY())); + builder.append(QueryTokens.expression(ctx.EMPTY())); return builder; } @Override - public QueryRendererBuilder visitCollection_member_expression(EqlParser.Collection_member_expressionContext ctx) { + public QueryTokenStream visitCollection_member_expression(EqlParser.Collection_member_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.entity_or_value_expression())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.MEMBER())); + builder.append(QueryTokens.expression(ctx.MEMBER())); if (ctx.OF() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.OF())); } builder.append(visit(ctx.collection_valued_path_expression())); @@ -1282,7 +1282,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntity_or_value_expression(EqlParser.Entity_or_value_expressionContext ctx) { + public QueryTokenStream visitEntity_or_value_expression(EqlParser.Entity_or_value_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1298,7 +1298,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_entity_or_value_expression( + public QueryTokenStream visitSimple_entity_or_value_expression( EqlParser.Simple_entity_or_value_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1315,15 +1315,15 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitExists_expression(EqlParser.Exists_expressionContext ctx) { + public QueryTokenStream visitExists_expression(EqlParser.Exists_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.EXISTS())); + builder.append(QueryTokens.expression(ctx.EXISTS())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.subquery())); builder.append(TOKEN_CLOSE_PAREN); @@ -1332,16 +1332,16 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitAll_or_any_expression(EqlParser.All_or_any_expressionContext ctx) { + public QueryTokenStream visitAll_or_any_expression(EqlParser.All_or_any_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.ALL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ALL())); + builder.append(QueryTokens.expression(ctx.ALL())); } else if (ctx.ANY() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ANY())); + builder.append(QueryTokens.expression(ctx.ANY())); } else if (ctx.SOME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.SOME())); + builder.append(QueryTokens.expression(ctx.SOME())); } builder.append(TOKEN_OPEN_PAREN); @@ -1352,7 +1352,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitStringComparison(EqlParser.StringComparisonContext ctx) { + public QueryTokenStream visitStringComparison(EqlParser.StringComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1369,12 +1369,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitBooleanComparison(EqlParser.BooleanComparisonContext ctx) { + public QueryTokenStream visitBooleanComparison(EqlParser.BooleanComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.boolean_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); if (ctx.boolean_expression(1) != null) { builder.append(visit(ctx.boolean_expression(1))); @@ -1386,17 +1386,17 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDirectBooleanCheck(EqlParser.DirectBooleanCheckContext ctx) { + public QueryTokenStream visitDirectBooleanCheck(EqlParser.DirectBooleanCheckContext ctx) { return visit(ctx.boolean_expression()); } @Override - public QueryRendererBuilder visitEnumComparison(EqlParser.EnumComparisonContext ctx) { + public QueryTokenStream visitEnumComparison(EqlParser.EnumComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.enum_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); if (ctx.enum_expression(1) != null) { builder.append(visit(ctx.enum_expression(1))); @@ -1408,12 +1408,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetimeComparison(EqlParser.DatetimeComparisonContext ctx) { + public QueryTokenStream visitDatetimeComparison(EqlParser.DatetimeComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.datetime_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.comparison_operator().op)); + builder.append(QueryTokens.ventilated(ctx.comparison_operator().op)); if (ctx.datetime_expression(1) != null) { builder.append(visit(ctx.datetime_expression(1))); @@ -1425,12 +1425,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntityComparison(EqlParser.EntityComparisonContext ctx) { + public QueryTokenStream visitEntityComparison(EqlParser.EntityComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.entity_expression(0))); - builder.append(JpaQueryParsingToken.expression(ctx.op)); + builder.append(QueryTokens.expression(ctx.op)); if (ctx.entity_expression(1) != null) { builder.append(visit(ctx.entity_expression(1))); @@ -1442,7 +1442,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmeticComparison(EqlParser.ArithmeticComparisonContext ctx) { + public QueryTokenStream visitArithmeticComparison(EqlParser.ArithmeticComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1459,43 +1459,43 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntityTypeComparison(EqlParser.EntityTypeComparisonContext ctx) { + public QueryTokenStream visitEntityTypeComparison(EqlParser.EntityTypeComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.entity_type_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.append(visit(ctx.entity_type_expression(1))); return builder; } @Override - public QueryRendererBuilder visitRegexpComparison(EqlParser.RegexpComparisonContext ctx) { + public QueryTokenStream visitRegexpComparison(EqlParser.RegexpComparisonContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.string_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.REGEXP())); + builder.append(QueryTokens.expression(ctx.REGEXP())); builder.appendExpression(visit(ctx.string_literal())); return builder; } @Override - public QueryRendererBuilder visitComparison_operator(EqlParser.Comparison_operatorContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.ventilated(ctx.op)); + public QueryTokenStream visitComparison_operator(EqlParser.Comparison_operatorContext ctx) { + return QueryRendererBuilder.from(QueryTokens.ventilated(ctx.op)); } @Override - public QueryRendererBuilder visitArithmetic_expression(EqlParser.Arithmetic_expressionContext ctx) { + public QueryTokenStream visitArithmetic_expression(EqlParser.Arithmetic_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.arithmetic_expression() != null) { builder.append(visit(ctx.arithmetic_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.op)); + builder.append(QueryTokens.expression(ctx.op)); builder.append(visit(ctx.arithmetic_term())); } else { @@ -1506,14 +1506,14 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_term(EqlParser.Arithmetic_termContext ctx) { + public QueryTokenStream visitArithmetic_term(EqlParser.Arithmetic_termContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.arithmetic_term() != null) { builder.appendInline(visit(ctx.arithmetic_term())); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.append(visit(ctx.arithmetic_factor())); } else { builder.append(visit(ctx.arithmetic_factor())); @@ -1523,12 +1523,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_factor(EqlParser.Arithmetic_factorContext ctx) { + public QueryTokenStream visitArithmetic_factor(EqlParser.Arithmetic_factorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.op != null) { - builder.append(JpaQueryParsingToken.token(ctx.op)); + builder.append(QueryTokens.token(ctx.op)); } builder.appendInline(visit(ctx.arithmetic_primary())); @@ -1536,7 +1536,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_primary(EqlParser.Arithmetic_primaryContext ctx) { + public QueryTokenStream visitArithmetic_primary(EqlParser.Arithmetic_primaryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1572,7 +1572,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitString_expression(EqlParser.String_expressionContext ctx) { + public QueryTokenStream visitString_expression(EqlParser.String_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1601,7 +1601,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_expression(EqlParser.Datetime_expressionContext ctx) { + public QueryTokenStream visitDatetime_expression(EqlParser.Datetime_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1632,7 +1632,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitBoolean_expression(EqlParser.Boolean_expressionContext ctx) { + public QueryTokenStream visitBoolean_expression(EqlParser.Boolean_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1657,7 +1657,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEnum_expression(EqlParser.Enum_expressionContext ctx) { + public QueryTokenStream visitEnum_expression(EqlParser.Enum_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1680,7 +1680,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntity_expression(EqlParser.Entity_expressionContext ctx) { + public QueryTokenStream visitEntity_expression(EqlParser.Entity_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1694,7 +1694,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_entity_expression(EqlParser.Simple_entity_expressionContext ctx) { + public QueryTokenStream visitSimple_entity_expression(EqlParser.Simple_entity_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1708,7 +1708,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntity_type_expression(EqlParser.Entity_type_expressionContext ctx) { + public QueryTokenStream visitEntity_type_expression(EqlParser.Entity_type_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1724,11 +1724,11 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitType_discriminator(EqlParser.Type_discriminatorContext ctx) { + public QueryTokenStream visitType_discriminator(EqlParser.Type_discriminatorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TYPE())); + builder.append(QueryTokens.token(ctx.TYPE())); builder.append(TOKEN_OPEN_PAREN); if (ctx.general_identification_variable() != null) { @@ -1744,19 +1744,19 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_numerics(EqlParser.Functions_returning_numericsContext ctx) { + public QueryTokenStream visitFunctions_returning_numerics(EqlParser.Functions_returning_numericsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LENGTH() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LENGTH())); + builder.append(QueryTokens.token(ctx.LENGTH())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LOCATE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LOCATE())); + builder.append(QueryTokens.token(ctx.LOCATE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_COMMA); @@ -1768,49 +1768,49 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.ABS() != null) { - builder.append(JpaQueryParsingToken.token(ctx.ABS())); + builder.append(QueryTokens.token(ctx.ABS())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.CEILING() != null) { - builder.append(JpaQueryParsingToken.token(ctx.CEILING())); + builder.append(QueryTokens.token(ctx.CEILING())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.EXP() != null) { - builder.append(JpaQueryParsingToken.token(ctx.EXP())); + builder.append(QueryTokens.token(ctx.EXP())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.FLOOR() != null) { - builder.append(JpaQueryParsingToken.token(ctx.FLOOR())); + builder.append(QueryTokens.token(ctx.FLOOR())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LN())); + builder.append(QueryTokens.token(ctx.LN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SIGN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SIGN())); + builder.append(QueryTokens.token(ctx.SIGN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SQRT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SQRT())); + builder.append(QueryTokens.token(ctx.SQRT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.MOD() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MOD())); + builder.append(QueryTokens.token(ctx.MOD())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1818,7 +1818,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.POWER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.POWER())); + builder.append(QueryTokens.token(ctx.POWER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1826,7 +1826,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.ROUND() != null) { - builder.append(JpaQueryParsingToken.token(ctx.ROUND())); + builder.append(QueryTokens.token(ctx.ROUND())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1834,13 +1834,13 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SIZE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SIZE())); + builder.append(QueryTokens.token(ctx.SIZE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.collection_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.INDEX() != null) { - builder.append(JpaQueryParsingToken.token(ctx.INDEX())); + builder.append(QueryTokens.token(ctx.INDEX())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -1852,26 +1852,26 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_datetime(EqlParser.Functions_returning_datetimeContext ctx) { + public QueryTokenStream visitFunctions_returning_datetime(EqlParser.Functions_returning_datetimeContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.CURRENT_DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_DATE())); + builder.append(QueryTokens.expression(ctx.CURRENT_DATE())); } else if (ctx.CURRENT_TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIME())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIME())); } else if (ctx.CURRENT_TIMESTAMP() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIMESTAMP())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIMESTAMP())); } else if (ctx.LOCAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL())); + builder.append(QueryTokens.expression(ctx.LOCAL())); if (ctx.DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATE())); + builder.append(QueryTokens.expression(ctx.DATE())); } else if (ctx.TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.TIME())); + builder.append(QueryTokens.expression(ctx.TIME())); } else if (ctx.DATETIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATETIME())); + builder.append(QueryTokens.expression(ctx.DATETIME())); } } else if (ctx.extract_datetime_part() != null) { builder.append(visit(ctx.extract_datetime_part())); @@ -1881,27 +1881,27 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_strings(EqlParser.Functions_returning_stringsContext ctx) { + public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_returning_stringsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.CONCAT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.CONCAT())); + builder.append(QueryTokens.token(ctx.CONCAT())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.string_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.string_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SUBSTRING() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SUBSTRING())); + builder.append(QueryTokens.token(ctx.SUBSTRING())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_COMMA); - builder.appendInline(QueryRendererBuilder.concat(ctx.arithmetic_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.arithmetic_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.TRIM() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TRIM())); + builder.append(QueryTokens.token(ctx.TRIM())); builder.append(TOKEN_OPEN_PAREN); if (ctx.trim_specification() != null) { builder.appendExpression(visit(ctx.trim_specification())); @@ -1910,19 +1910,19 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.appendExpression(visit(ctx.trim_character())); } if (ctx.FROM() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); } builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LOWER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LOWER())); + builder.append(QueryTokens.token(ctx.LOWER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.UPPER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.UPPER())); + builder.append(QueryTokens.token(ctx.UPPER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); @@ -1932,23 +1932,23 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitTrim_specification(EqlParser.Trim_specificationContext ctx) { + public QueryTokenStream visitTrim_specification(EqlParser.Trim_specificationContext ctx) { if (ctx.LEADING() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.LEADING())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.LEADING())); } else if (ctx.TRAILING() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TRAILING())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.TRAILING())); } else { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.BOTH())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.BOTH())); } } @Override - public QueryRendererBuilder visitCast_function(EqlParser.Cast_functionContext ctx) { + public QueryTokenStream visitCast_function(EqlParser.Cast_functionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.CAST())); + builder.append(QueryTokens.token(ctx.CAST())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.single_valued_path_expression())); builder.append(TOKEN_SPACE); @@ -1957,7 +1957,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { if (ctx.numeric_literal() != null) { builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.numeric_literal(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.numeric_literal(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } builder.append(TOKEN_CLOSE_PAREN); @@ -1966,12 +1966,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunction_invocation(EqlParser.Function_invocationContext ctx) { + public QueryTokenStream visitFunction_invocation(EqlParser.Function_invocationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.FUNCTION() != null) { - builder.append(JpaQueryParsingToken.token(ctx.FUNCTION())); + builder.append(QueryTokens.token(ctx.FUNCTION())); } else if (ctx.identification_variable() != null) { builder.appendInline(visit(ctx.identification_variable())); } @@ -1981,21 +1981,21 @@ class EqlQueryRenderer extends EqlBaseVisitor { builder.append(TOKEN_COMMA); } - builder.appendInline(QueryRendererBuilder.concat(ctx.function_arg(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.function_arg(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitExtract_datetime_field(EqlParser.Extract_datetime_fieldContext ctx) { + public QueryTokenStream visitExtract_datetime_field(EqlParser.Extract_datetime_fieldContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.EXTRACT())); + builder.append(QueryTokens.token(ctx.EXTRACT())); builder.append(TOKEN_OPEN_PAREN); builder.appendExpression(visit(ctx.datetime_field())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendInline(visit(ctx.datetime_expression())); builder.append(TOKEN_CLOSE_PAREN); @@ -2003,19 +2003,19 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_field(EqlParser.Datetime_fieldContext ctx) { + public QueryTokenStream visitDatetime_field(EqlParser.Datetime_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitExtract_datetime_part(EqlParser.Extract_datetime_partContext ctx) { + public QueryTokenStream visitExtract_datetime_part(EqlParser.Extract_datetime_partContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.EXTRACT())); + builder.append(QueryTokens.token(ctx.EXTRACT())); builder.append(TOKEN_OPEN_PAREN); builder.appendExpression(visit(ctx.datetime_part())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendInline(visit(ctx.datetime_expression())); builder.append(TOKEN_CLOSE_PAREN); @@ -2023,12 +2023,12 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_part(EqlParser.Datetime_partContext ctx) { + public QueryTokenStream visitDatetime_part(EqlParser.Datetime_partContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitFunction_arg(EqlParser.Function_argContext ctx) { + public QueryTokenStream visitFunction_arg(EqlParser.Function_argContext ctx) { if (ctx.literal() != null) { return visit(ctx.literal()); @@ -2042,7 +2042,7 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitCase_expression(EqlParser.Case_expressionContext ctx) { + public QueryTokenStream visitCase_expression(EqlParser.Case_expressionContext ctx) { if (ctx.general_case_expression() != null) { return visit(ctx.general_case_expression()); @@ -2056,57 +2056,57 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneral_case_expression(EqlParser.General_case_expressionContext ctx) { + public QueryTokenStream visitGeneral_case_expression(EqlParser.General_case_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); + builder.append(QueryTokens.expression(ctx.CASE())); ctx.when_clause().forEach(whenClauseContext -> { builder.appendExpression(visit(whenClauseContext)); }); - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.appendExpression(visit(ctx.scalar_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitWhen_clause(EqlParser.When_clauseContext ctx) { + public QueryTokenStream visitWhen_clause(EqlParser.When_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.append(visit(ctx.conditional_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.append(visit(ctx.scalar_expression())); return builder; } @Override - public QueryRendererBuilder visitSimple_case_expression(EqlParser.Simple_case_expressionContext ctx) { + public QueryTokenStream visitSimple_case_expression(EqlParser.Simple_case_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); + builder.append(QueryTokens.expression(ctx.CASE())); builder.append(visit(ctx.case_operand())); ctx.simple_when_clause().forEach(simpleWhenClauseContext -> { builder.append(visit(simpleWhenClauseContext)); }); - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.append(visit(ctx.scalar_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitCase_operand(EqlParser.Case_operandContext ctx) { + public QueryTokenStream visitCase_operand(EqlParser.Case_operandContext ctx) { if (ctx.state_valued_path_expression() != null) { return visit(ctx.state_valued_path_expression()); @@ -2116,37 +2116,37 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_when_clause(EqlParser.Simple_when_clauseContext ctx) { + public QueryTokenStream visitSimple_when_clause(EqlParser.Simple_when_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.appendExpression(visit(ctx.scalar_expression(0))); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.appendExpression(visit(ctx.scalar_expression(1))); return builder; } @Override - public QueryRendererBuilder visitCoalesce_expression(EqlParser.Coalesce_expressionContext ctx) { + public QueryTokenStream visitCoalesce_expression(EqlParser.Coalesce_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.COALESCE())); + builder.append(QueryTokens.token(ctx.COALESCE())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.scalar_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.scalar_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitNullif_expression(EqlParser.Nullif_expressionContext ctx) { + public QueryTokenStream visitNullif_expression(EqlParser.Nullif_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.NULLIF())); + builder.append(QueryTokens.token(ctx.NULLIF())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.scalar_expression(0))); builder.append(TOKEN_COMMA); @@ -2157,10 +2157,10 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitTrim_character(EqlParser.Trim_characterContext ctx) { + public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.character_valued_input_parameter() != null) { return visit(ctx.character_valued_input_parameter()); } else { @@ -2169,35 +2169,35 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitIdentification_variable(EqlParser.Identification_variableContext ctx) { + public QueryTokenStream visitIdentification_variable(EqlParser.Identification_variableContext ctx) { if (ctx.IDENTIFICATION_VARIABLE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.IDENTIFICATION_VARIABLE())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.IDENTIFICATION_VARIABLE())); } else if (ctx.f != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.f)); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.f)); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitConstructor_name(EqlParser.Constructor_nameContext ctx) { + public QueryTokenStream visitConstructor_name(EqlParser.Constructor_nameContext ctx) { return visit(ctx.entity_name()); } @Override - public QueryRendererBuilder visitLiteral(EqlParser.LiteralContext ctx) { + public QueryTokenStream visitLiteral(EqlParser.LiteralContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.STRINGLITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + builder.append(QueryTokens.expression(ctx.STRINGLITERAL())); } else if (ctx.INTLITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INTLITERAL())); + builder.append(QueryTokens.expression(ctx.INTLITERAL())); } else if (ctx.FLOATLITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FLOATLITERAL())); + builder.append(QueryTokens.expression(ctx.FLOATLITERAL())); } else if (ctx.LONGLITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LONGLITERAL())); + builder.append(QueryTokens.expression(ctx.LONGLITERAL())); } else if (ctx.boolean_literal() != null) { builder.append(visit(ctx.boolean_literal())); } else if (ctx.entity_type_literal() != null) { @@ -2208,25 +2208,25 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitInput_parameter(EqlParser.Input_parameterContext ctx) { + public QueryTokenStream visitInput_parameter(EqlParser.Input_parameterContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.INTLITERAL() != null) { builder.append(TOKEN_QUESTION_MARK); - builder.append(JpaQueryParsingToken.expression(ctx.INTLITERAL())); + builder.append(QueryTokens.token(ctx.INTLITERAL())); } else if (ctx.identification_variable() != null) { builder.append(TOKEN_COLON); - builder.append(visit(ctx.identification_variable())); + builder.appendInline(visit(ctx.identification_variable())); } return builder; } @Override - public QueryRendererBuilder visitPattern_value(EqlParser.Pattern_valueContext ctx) { + public QueryTokenStream visitPattern_value(EqlParser.Pattern_valueContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2236,143 +2236,143 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitDate_time_timestamp_literal(EqlParser.Date_time_timestamp_literalContext ctx) { + public QueryTokenStream visitDate_time_timestamp_literal(EqlParser.Date_time_timestamp_literalContext ctx) { if (ctx.STRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL())); } else if (ctx.DATELITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.DATELITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.DATELITERAL())); } else if (ctx.TIMELITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TIMELITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMELITERAL())); } else if (ctx.TIMESTAMPLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TIMESTAMPLITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMESTAMPLITERAL())); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitEntity_type_literal(EqlParser.Entity_type_literalContext ctx) { + public QueryTokenStream visitEntity_type_literal(EqlParser.Entity_type_literalContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitEscape_character(EqlParser.Escape_characterContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.CHARACTER())); + public QueryTokenStream visitEscape_character(EqlParser.Escape_characterContext ctx) { + return QueryRendererBuilder.from(QueryTokens.token(ctx.CHARACTER())); } @Override - public QueryRendererBuilder visitNumeric_literal(EqlParser.Numeric_literalContext ctx) { + public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ctx) { if (ctx.INTLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.INTLITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.INTLITERAL())); } else if (ctx.FLOATLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.FLOATLITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.FLOATLITERAL())); } else if (ctx.LONGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.LONGLITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.LONGLITERAL())); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitBoolean_literal(EqlParser.Boolean_literalContext ctx) { + public QueryTokenStream visitBoolean_literal(EqlParser.Boolean_literalContext ctx) { if (ctx.TRUE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.TRUE())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.TRUE())); } else if (ctx.FALSE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.FALSE())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.FALSE())); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitEnum_literal(EqlParser.Enum_literalContext ctx) { + public QueryTokenStream visitEnum_literal(EqlParser.Enum_literalContext ctx) { return visit(ctx.state_field_path_expression()); } @Override - public QueryRendererBuilder visitString_literal(EqlParser.String_literalContext ctx) { + public QueryTokenStream visitString_literal(EqlParser.String_literalContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.STRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL())); } else { return QueryRenderer.builder(); } } @Override - public QueryRendererBuilder visitSingle_valued_embeddable_object_field( + public QueryTokenStream visitSingle_valued_embeddable_object_field( EqlParser.Single_valued_embeddable_object_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSubtype(EqlParser.SubtypeContext ctx) { + public QueryTokenStream visitSubtype(EqlParser.SubtypeContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_valued_field(EqlParser.Collection_valued_fieldContext ctx) { + public QueryTokenStream visitCollection_valued_field(EqlParser.Collection_valued_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSingle_valued_object_field(EqlParser.Single_valued_object_fieldContext ctx) { + public QueryTokenStream visitSingle_valued_object_field(EqlParser.Single_valued_object_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitState_field(EqlParser.State_fieldContext ctx) { + public QueryTokenStream visitState_field(EqlParser.State_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_value_field(EqlParser.Collection_value_fieldContext ctx) { + public QueryTokenStream visitCollection_value_field(EqlParser.Collection_value_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitEntity_name(EqlParser.Entity_nameContext ctx) { - return QueryRendererBuilder.concat(ctx.reserved_word(), this::visit, QueryRendererBuilder::toInline, TOKEN_DOT); + public QueryTokenStream visitEntity_name(EqlParser.Entity_nameContext ctx) { + return QueryTokenStream.concat(ctx.reserved_word(), this::visit, QueryRenderer::inline, TOKEN_DOT); } @Override - public QueryRendererBuilder visitResult_variable(EqlParser.Result_variableContext ctx) { + public QueryTokenStream visitResult_variable(EqlParser.Result_variableContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSuperquery_identification_variable( + public QueryTokenStream visitSuperquery_identification_variable( EqlParser.Superquery_identification_variableContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_valued_input_parameter( + public QueryTokenStream visitCollection_valued_input_parameter( EqlParser.Collection_valued_input_parameterContext ctx) { return visit(ctx.input_parameter()); } @Override - public QueryRendererBuilder visitSingle_valued_input_parameter(EqlParser.Single_valued_input_parameterContext ctx) { + public QueryTokenStream visitSingle_valued_input_parameter(EqlParser.Single_valued_input_parameterContext ctx) { return visit(ctx.input_parameter()); } @Override - public QueryRendererBuilder visitFunction_name(EqlParser.Function_nameContext ctx) { + public QueryTokenStream visitFunction_name(EqlParser.Function_nameContext ctx) { return visit(ctx.string_literal()); } @Override - public QueryRendererBuilder visitCharacter_valued_input_parameter( + public QueryTokenStream visitCharacter_valued_input_parameter( EqlParser.Character_valued_input_parameterContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.input_parameter() != null) { return visit(ctx.input_parameter()); } else { @@ -2381,11 +2381,11 @@ class EqlQueryRenderer extends EqlBaseVisitor { } @Override - public QueryRendererBuilder visitReserved_word(EqlParser.Reserved_wordContext ctx) { + public QueryTokenStream visitReserved_word(EqlParser.Reserved_wordContext ctx) { if (ctx.IDENTIFICATION_VARIABLE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.IDENTIFICATION_VARIABLE())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.IDENTIFICATION_VARIABLE())); } else if (ctx.f != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.f)); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.f)); } else { return QueryRenderer.builder(); } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java index cb50f8b83..525f48acf 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.List; @@ -81,7 +81,7 @@ class EqlSortedQueryTransformer extends EqlQueryRenderer { private void doVisitOrderBy(QueryRendererBuilder builder, EqlParser.Select_statementContext ctx) { if (ctx.orderby_clause() != null) { - QueryRendererBuilder existingOrder = visit(ctx.orderby_clause()); + QueryTokenStream existingOrder = visit(ctx.orderby_clause()); if (sort.isSorted()) { builder.appendInline(existingOrder); } else { @@ -91,7 +91,7 @@ class EqlSortedQueryTransformer extends EqlQueryRenderer { if (sort.isSorted()) { - List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); + List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); if (ctx.orderby_clause() != null) { @@ -106,24 +106,27 @@ class EqlSortedQueryTransformer extends EqlQueryRenderer { } @Override - public QueryRendererBuilder visitSelect_item(EqlParser.Select_itemContext ctx) { + public QueryTokenStream visitSelect_item(EqlParser.Select_itemContext ctx) { - QueryRendererBuilder builder = super.visitSelect_item(ctx); + QueryTokenStream tokens = super.visitSelect_item(ctx); - if (ctx.result_variable() != null) { - transformerSupport.registerAlias(builder.lastToken()); + if (ctx.result_variable() != null && !tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); } - return builder; + return tokens; } @Override - public QueryRendererBuilder visitJoin(EqlParser.JoinContext ctx) { + public QueryTokenStream visitJoin(EqlParser.JoinContext ctx) { - QueryRendererBuilder builder = super.visitJoin(ctx); - transformerSupport.registerAlias(builder.lastToken()); + QueryTokenStream tokens = super.visitJoin(ctx); - return builder; + if (!tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); + } + + return tokens; } } 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 7582a1346..f6bc21330 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 @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +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; @@ -76,12 +76,12 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { countBuilder.append(TOKEN_SELECT_COUNT); if (countProjection != null) { - countBuilder.append(new JpaQueryParsingToken(countProjection)); + countBuilder.append(QueryTokens.token(countProjection)); } else { if (primaryFromAlias == null) { countBuilder.append(TOKEN_DOUBLE_UNDERSCORE); } else { - countBuilder.append(JpaQueryParsingToken.token(primaryFromAlias)); + countBuilder.append(QueryTokens.token(primaryFromAlias)); } } @@ -133,7 +133,7 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { } else if (ctx.subquery() != null) { if (ctx.LATERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LATERAL())); + builder.append(QueryTokens.expression(ctx.LATERAL())); } QueryRendererBuilder nested = QueryRenderer.builder(); @@ -158,7 +158,7 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.joinType())); - builder.append(JpaQueryParsingToken.expression(ctx.JOIN())); + builder.append(QueryTokens.expression(ctx.JOIN())); builder.appendExpression(visit(ctx.joinTarget())); @@ -170,25 +170,25 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { } @Override - public QueryRendererBuilder visitSelectClause(HqlParser.SelectClauseContext ctx) { + public QueryTokenStream visitSelectClause(HqlParser.SelectClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); - QueryRendererBuilder selectionListbuilder = visit(ctx.selectionList()); + QueryTokenStream selectionListbuilder = visit(ctx.selectionList()); if (!isSubquery(ctx)) { builder.append(TOKEN_COUNT_FUNC); if (countProjection != null) { - builder.append(JpaQueryParsingToken.token(countProjection)); + builder.append(QueryTokens.token(countProjection)); } QueryRendererBuilder nested = QueryRenderer.builder(); if (ctx.DISTINCT() != null) { - nested.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + nested.append(QueryTokens.expression(ctx.DISTINCT())); } if (countProjection == null) { @@ -200,13 +200,13 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { if (countSelection.requiresPrimaryAlias()) { // constructor - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } else { // keep all the select items to distinct against nested.append(countSelection); } } else { - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } } @@ -216,7 +216,7 @@ class HqlCountQueryTransformer extends HqlQueryRenderer { } else { if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.append(selectionListbuilder); diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryIntrospector.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryIntrospector.java index 179450f0b..11e655626 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryIntrospector.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryIntrospector.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.Collections; @@ -34,7 +34,7 @@ class HqlQueryIntrospector extends HqlBaseVisitor implements ParsedQueryIn private final HqlQueryRenderer renderer = new HqlQueryRenderer(); private @Nullable String primaryFromAlias = null; - private @Nullable List projection; + private @Nullable List projection; private boolean projectionProcessed; private boolean hasConstructorExpression = false; @@ -44,7 +44,7 @@ class HqlQueryIntrospector extends HqlBaseVisitor implements ParsedQueryIn } @Override - public List getProjection() { + public List getProjection() { return projection == null ? Collections.emptyList() : projection; } @@ -57,7 +57,7 @@ class HqlQueryIntrospector extends HqlBaseVisitor implements ParsedQueryIn public Void visitSelectClause(HqlParser.SelectClauseContext ctx) { List selections = ctx.selectionList().selection(); - List selectItemTokens = new ArrayList<>(selections.size() * 2); + List selectItemTokens = new ArrayList<>(selections.size() * 2); for (HqlParser.SelectionContext selection : selections) { @@ -65,7 +65,7 @@ class HqlQueryIntrospector extends HqlBaseVisitor implements ParsedQueryIn selectItemTokens.add(TOKEN_COMMA); } - selectItemTokens.add(JpaQueryParsingToken.token(renderer.visitSelection(selection).build().render())); + selectItemTokens.add(QueryTokens.token(QueryRenderer.from(renderer.visitSelection(selection)).render())); } if (!projectionProcessed) { diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java index e27284345..2d293c412 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.List; @@ -33,7 +33,7 @@ import org.springframework.data.jpa.repository.query.QueryRenderer.QueryRenderer * @since 3.1 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode", "UnreachableCode" }) -class HqlQueryRenderer extends HqlBaseVisitor { +class HqlQueryRenderer extends HqlBaseVisitor { /** * Is this select clause a {@literal subquery}? @@ -54,12 +54,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitStart(HqlParser.StartContext ctx) { + public QueryTokenStream visitStart(HqlParser.StartContext ctx) { return visit(ctx.ql_statement()); } @Override - public QueryRendererBuilder visitQl_statement(HqlParser.Ql_statementContext ctx) { + public QueryTokenStream visitQl_statement(HqlParser.Ql_statementContext ctx) { if (ctx.selectStatement() != null) { return visit(ctx.selectStatement()); @@ -70,17 +70,17 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.insertStatement() != null) { return visit(ctx.insertStatement()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSelectStatement(HqlParser.SelectStatementContext ctx) { + public QueryTokenStream visitSelectStatement(HqlParser.SelectStatementContext ctx) { return visit(ctx.queryExpression()); } @Override - public QueryRendererBuilder visitQueryExpression(HqlParser.QueryExpressionContext ctx) { + public QueryTokenStream visitQueryExpression(HqlParser.QueryExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -100,16 +100,16 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitWithClause(HqlParser.WithClauseContext ctx) { + public QueryTokenStream visitWithClause(HqlParser.WithClauseContext ctx) { QueryRendererBuilder builder = QueryRendererBuilder.from(TOKEN_WITH); - builder.append(QueryRendererBuilder.concatExpressions(ctx.cte(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concatExpressions(ctx.cte(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitCte(HqlParser.CteContext ctx) { + public QueryTokenStream visitCte(HqlParser.CteContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -117,7 +117,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { builder.append(TOKEN_AS); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } if (ctx.MATERIALIZED() != null) { @@ -140,34 +140,34 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSearchClause(HqlParser.SearchClauseContext ctx) { + public QueryTokenStream visitSearchClause(HqlParser.SearchClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SEARCH())); + builder.append(QueryTokens.expression(ctx.SEARCH())); if (ctx.BREADTH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.BREADTH())); + builder.append(QueryTokens.expression(ctx.BREADTH())); } else if (ctx.DEPTH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DEPTH())); + builder.append(QueryTokens.expression(ctx.DEPTH())); } - builder.append(JpaQueryParsingToken.expression(ctx.FIRST())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); + builder.append(QueryTokens.expression(ctx.FIRST())); + builder.append(QueryTokens.expression(ctx.BY())); builder.append(visit(ctx.searchSpecifications())); - builder.append(JpaQueryParsingToken.expression(ctx.SET())); + builder.append(QueryTokens.expression(ctx.SET())); builder.append(visit(ctx.identifier())); return builder; } @Override - public QueryRendererBuilder visitSearchSpecifications(HqlParser.SearchSpecificationsContext ctx) { - return QueryRendererBuilder.concat(ctx.searchSpecification(), this::visit, TOKEN_COMMA); + public QueryTokenStream visitSearchSpecifications(HqlParser.SearchSpecificationsContext ctx) { + return QueryTokenStream.concat(ctx.searchSpecification(), this::visit, TOKEN_COMMA); } @Override - public QueryRendererBuilder visitSearchSpecification(HqlParser.SearchSpecificationContext ctx) { + public QueryTokenStream visitSearchSpecification(HqlParser.SearchSpecificationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -185,26 +185,26 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCycleClause(HqlParser.CycleClauseContext ctx) { + public QueryTokenStream visitCycleClause(HqlParser.CycleClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CYCLE().getText())); + builder.append(QueryTokens.expression(ctx.CYCLE().getText())); builder.append(visit(ctx.cteAttributes())); - builder.append(JpaQueryParsingToken.expression(ctx.SET().getText())); + builder.append(QueryTokens.expression(ctx.SET().getText())); builder.append(visit(ctx.identifier(0))); if (ctx.TO() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.TO().getText())); + builder.append(QueryTokens.expression(ctx.TO().getText())); builder.append(visit(ctx.literal(0))); - builder.append(JpaQueryParsingToken.expression(ctx.DEFAULT().getText())); + builder.append(QueryTokens.expression(ctx.DEFAULT().getText())); builder.append(visit(ctx.literal(1))); } if (ctx.USING() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.USING().getText())); + builder.append(QueryTokens.expression(ctx.USING().getText())); builder.append(visit(ctx.identifier(1))); } @@ -212,12 +212,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCteAttributes(HqlParser.CteAttributesContext ctx) { - return QueryRendererBuilder.concat(ctx.identifier(), this::visit, TOKEN_COMMA); + public QueryTokenStream visitCteAttributes(HqlParser.CteAttributesContext ctx) { + return QueryTokenStream.concat(ctx.identifier(), this::visit, TOKEN_COMMA); } @Override - public QueryRendererBuilder visitOrderedQuery(HqlParser.OrderedQueryContext ctx) { + public QueryTokenStream visitOrderedQuery(HqlParser.OrderedQueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -238,7 +238,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelectQuery(HqlParser.SelectQueryContext ctx) { + public QueryTokenStream visitSelectQuery(HqlParser.SelectQueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -266,7 +266,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitFromQuery(HqlParser.FromQueryContext ctx) { + public QueryTokenStream visitFromQuery(HqlParser.FromQueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -292,7 +292,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitQueryOrder(HqlParser.QueryOrderContext ctx) { + public QueryTokenStream visitQueryOrder(HqlParser.QueryOrderContext ctx) { if (ctx.limitClause() == null && ctx.offsetClause() == null && ctx.fetchClause() == null) { return visit(ctx.orderByClause()); @@ -316,29 +316,29 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitFromClause(HqlParser.FromClauseContext ctx) { + public QueryTokenStream visitFromClause(HqlParser.FromClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.entityWithJoins(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.FROM())); + builder.appendExpression(QueryTokenStream.concat(ctx.entityWithJoins(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitEntityWithJoins(HqlParser.EntityWithJoinsContext ctx) { + public QueryTokenStream visitEntityWithJoins(HqlParser.EntityWithJoinsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.fromRoot())); - builder.appendInline(QueryRendererBuilder.concatExpressions(ctx.joinSpecifier(), this::visit, TOKEN_NONE)); + builder.appendInline(QueryTokenStream.concat(ctx.joinSpecifier(), this::visit, TOKEN_SPACE)); return builder; } @Override - public QueryRendererBuilder visitJoinSpecifier(HqlParser.JoinSpecifierContext ctx) { + public QueryTokenStream visitJoinSpecifier(HqlParser.JoinSpecifierContext ctx) { if (ctx.join() != null) { return visit(ctx.join()); @@ -347,12 +347,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.jpaCollectionJoin() != null) { return visit(ctx.jpaCollectionJoin()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitFromRoot(HqlParser.FromRootContext ctx) { + public QueryTokenStream visitFromRoot(HqlParser.FromRootContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -367,7 +367,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.subquery() != null) { if (ctx.LATERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LATERAL())); + builder.append(QueryTokens.expression(ctx.LATERAL())); } QueryRendererBuilder nested = QueryRenderer.builder(); @@ -387,15 +387,15 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoin(HqlParser.JoinContext ctx) { + public QueryTokenStream visitJoin(HqlParser.JoinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.joinType())); - builder.append(JpaQueryParsingToken.expression(ctx.JOIN())); + builder.append(QueryTokens.expression(ctx.JOIN())); if (ctx.FETCH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FETCH())); + builder.append(QueryTokens.expression(ctx.FETCH())); } builder.append(visit(ctx.joinTarget())); @@ -408,7 +408,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoinPath(HqlParser.JoinPathContext ctx) { + public QueryTokenStream visitJoinPath(HqlParser.JoinPathContext ctx) { HqlParser.VariableContext variable = ctx.variable(); @@ -424,12 +424,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoinSubquery(HqlParser.JoinSubqueryContext ctx) { + public QueryTokenStream visitJoinSubquery(HqlParser.JoinSubqueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LATERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LATERAL())); + builder.append(QueryTokens.expression(ctx.LATERAL())); } builder.append(TOKEN_OPEN_PAREN); @@ -444,14 +444,14 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitUpdateStatement(HqlParser.UpdateStatementContext ctx) { + public QueryTokenStream visitUpdateStatement(HqlParser.UpdateStatementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.UPDATE())); + builder.append(QueryTokens.expression(ctx.UPDATE())); if (ctx.VERSIONED() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.VERSIONED())); + builder.append(QueryTokens.expression(ctx.VERSIONED())); } builder.appendExpression(visit(ctx.targetEntity())); @@ -465,7 +465,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitTargetEntity(HqlParser.TargetEntityContext ctx) { + public QueryTokenStream visitTargetEntity(HqlParser.TargetEntityContext ctx) { HqlParser.VariableContext variable = ctx.variable(); @@ -481,16 +481,16 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSetClause(HqlParser.SetClauseContext ctx) { + public QueryTokenStream visitSetClause(HqlParser.SetClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SET())); - return builder.append(QueryRendererBuilder.concat(ctx.assignment(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.SET())); + return builder.append(QueryTokenStream.concat(ctx.assignment(), this::visit, TOKEN_COMMA)); } @Override - public QueryRendererBuilder visitAssignment(HqlParser.AssignmentContext ctx) { + public QueryTokenStream visitAssignment(HqlParser.AssignmentContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -502,14 +502,14 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitDeleteStatement(HqlParser.DeleteStatementContext ctx) { + public QueryTokenStream visitDeleteStatement(HqlParser.DeleteStatementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.DELETE())); + builder.append(QueryTokens.expression(ctx.DELETE())); if (ctx.FROM() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); } builder.append(visit(ctx.targetEntity())); @@ -522,14 +522,14 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitInsertStatement(HqlParser.InsertStatementContext ctx) { + public QueryTokenStream visitInsertStatement(HqlParser.InsertStatementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.INSERT())); + builder.append(QueryTokens.expression(ctx.INSERT())); if (ctx.INTO() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INTO())); + builder.append(QueryTokens.expression(ctx.INTO())); } builder.appendExpression(visit(ctx.targetEntity())); @@ -545,46 +545,46 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitTargetFields(HqlParser.TargetFieldsContext ctx) { + public QueryTokenStream visitTargetFields(HqlParser.TargetFieldsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(TOKEN_OPEN_PAREN); - builder.append(QueryRendererBuilder.concat(ctx.simplePath(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.simplePath(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitValuesList(HqlParser.ValuesListContext ctx) { + public QueryTokenStream visitValuesList(HqlParser.ValuesListContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.VALUES())); - builder.append(QueryRendererBuilder.concat(ctx.values(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.VALUES())); + builder.append(QueryTokenStream.concat(ctx.values(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitValues(HqlParser.ValuesContext ctx) { + public QueryTokenStream visitValues(HqlParser.ValuesContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(TOKEN_OPEN_PAREN); - builder.append(QueryRendererBuilder.concat(ctx.expression(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitInstantiation(HqlParser.InstantiationContext ctx) { + public QueryTokenStream visitInstantiation(HqlParser.InstantiationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.NEW())); + builder.append(QueryTokens.expression(ctx.NEW())); builder.append(visit(ctx.instantiationTarget())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.instantiationArguments())); @@ -594,12 +594,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitAlias(HqlParser.AliasContext ctx) { + public QueryTokenStream visitAlias(HqlParser.AliasContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } builder.append(visit(ctx.identifier())); @@ -608,21 +608,21 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitGroupedItem(HqlParser.GroupedItemContext ctx) { + public QueryTokenStream visitGroupedItem(HqlParser.GroupedItemContext ctx) { if (ctx.identifier() != null) { return visit(ctx.identifier()); } else if (ctx.INTEGER_LITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTEGER_LITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.INTEGER_LITERAL())); } else if (ctx.expression() != null) { return visit(ctx.expression()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSortedItem(HqlParser.SortedItemContext ctx) { + public QueryTokenStream visitSortedItem(HqlParser.SortedItemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -640,86 +640,86 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSortExpression(HqlParser.SortExpressionContext ctx) { + public QueryTokenStream visitSortExpression(HqlParser.SortExpressionContext ctx) { if (ctx.identifier() != null) { return visit(ctx.identifier()); } else if (ctx.INTEGER_LITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTEGER_LITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.INTEGER_LITERAL())); } else if (ctx.expression() != null) { return visit(ctx.expression()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSortDirection(HqlParser.SortDirectionContext ctx) { + public QueryTokenStream visitSortDirection(HqlParser.SortDirectionContext ctx) { if (ctx.ASC() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.ASC())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.ASC())); } else if (ctx.DESC() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.DESC())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.DESC())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitNullsPrecedence(HqlParser.NullsPrecedenceContext ctx) { + public QueryTokenStream visitNullsPrecedence(HqlParser.NullsPrecedenceContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.NULLS())); + builder.append(QueryTokens.expression(ctx.NULLS())); if (ctx.FIRST() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FIRST())); + builder.append(QueryTokens.expression(ctx.FIRST())); } else if (ctx.LAST() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LAST())); + builder.append(QueryTokens.expression(ctx.LAST())); } return builder; } @Override - public QueryRendererBuilder visitLimitClause(HqlParser.LimitClauseContext ctx) { + public QueryTokenStream visitLimitClause(HqlParser.LimitClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.LIMIT())); + builder.append(QueryTokens.expression(ctx.LIMIT())); builder.append(visit(ctx.parameterOrIntegerLiteral())); return builder; } @Override - public QueryRendererBuilder visitOffsetClause(HqlParser.OffsetClauseContext ctx) { + public QueryTokenStream visitOffsetClause(HqlParser.OffsetClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.OFFSET())); + builder.append(QueryTokens.expression(ctx.OFFSET())); builder.append(visit(ctx.parameterOrIntegerLiteral())); if (ctx.ROW() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ROW())); + builder.append(QueryTokens.expression(ctx.ROW())); } else if (ctx.ROWS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ROWS())); + builder.append(QueryTokens.expression(ctx.ROWS())); } return builder; } @Override - public QueryRendererBuilder visitFetchClause(HqlParser.FetchClauseContext ctx) { + public QueryTokenStream visitFetchClause(HqlParser.FetchClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FETCH())); + builder.append(QueryTokens.expression(ctx.FETCH())); if (ctx.FIRST() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FIRST())); + builder.append(QueryTokens.expression(ctx.FIRST())); } else if (ctx.NEXT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NEXT())); + builder.append(QueryTokens.expression(ctx.NEXT())); } if (ctx.parameterOrIntegerLiteral() != null) { @@ -729,36 +729,36 @@ class HqlQueryRenderer extends HqlBaseVisitor { } if (ctx.ROW() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ROW())); + builder.append(QueryTokens.expression(ctx.ROW())); } else if (ctx.ROWS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ROWS())); + builder.append(QueryTokens.expression(ctx.ROWS())); } if (ctx.ONLY() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ONLY())); + builder.append(QueryTokens.expression(ctx.ONLY())); } else if (ctx.WITH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.WITH())); - builder.append(JpaQueryParsingToken.expression(ctx.TIES())); + builder.append(QueryTokens.expression(ctx.WITH())); + builder.append(QueryTokens.expression(ctx.TIES())); } return builder; } @Override - public QueryRendererBuilder visitSubquery(HqlParser.SubqueryContext ctx) { + public QueryTokenStream visitSubquery(HqlParser.SubqueryContext ctx) { return visit(ctx.queryExpression()); } @Override - public QueryRendererBuilder visitSelectClause(HqlParser.SelectClauseContext ctx) { + public QueryTokenStream visitSelectClause(HqlParser.SelectClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.appendExpression(visit(ctx.selectionList())); @@ -767,12 +767,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelectionList(HqlParser.SelectionListContext ctx) { - return QueryRendererBuilder.concat(ctx.selection(), this::visit, TOKEN_COMMA); + public QueryTokenStream visitSelectionList(HqlParser.SelectionListContext ctx) { + return QueryTokenStream.concat(ctx.selection(), this::visit, TOKEN_COMMA); } @Override - public QueryRendererBuilder visitSelection(HqlParser.SelectionContext ctx) { + public QueryTokenStream visitSelection(HqlParser.SelectionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -786,7 +786,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelectExpression(HqlParser.SelectExpressionContext ctx) { + public QueryTokenStream visitSelectExpression(HqlParser.SelectExpressionContext ctx) { if (ctx.instantiation() != null) { return visit(ctx.instantiation()); @@ -797,16 +797,16 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.expressionOrPredicate() != null) { return visit(ctx.expressionOrPredicate()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitMapEntrySelection(HqlParser.MapEntrySelectionContext ctx) { + public QueryTokenStream visitMapEntrySelection(HqlParser.MapEntrySelectionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ENTRY())); + builder.append(QueryTokens.expression(ctx.ENTRY())); builder.append(TOKEN_OPEN_PAREN); builder.append(visit(ctx.path())); builder.append(TOKEN_CLOSE_PAREN); @@ -815,11 +815,11 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJpaSelectObjectSyntax(HqlParser.JpaSelectObjectSyntaxContext ctx) { + public QueryTokenStream visitJpaSelectObjectSyntax(HqlParser.JpaSelectObjectSyntaxContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.OBJECT())); + builder.append(QueryTokens.token(ctx.OBJECT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identifier())); builder.append(TOKEN_CLOSE_PAREN); @@ -828,50 +828,50 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitWhereClause(HqlParser.WhereClauseContext ctx) { + public QueryTokenStream visitWhereClause(HqlParser.WhereClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHERE())); - builder.append(QueryRendererBuilder.concatExpressions(ctx.predicate(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.WHERE())); + builder.append(QueryTokenStream.concatExpressions(ctx.predicate(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitJoinType(HqlParser.JoinTypeContext ctx) { + public QueryTokenStream visitJoinType(HqlParser.JoinTypeContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.INNER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INNER())); + builder.append(QueryTokens.expression(ctx.INNER())); } if (ctx.LEFT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LEFT())); + builder.append(QueryTokens.expression(ctx.LEFT())); } if (ctx.RIGHT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.RIGHT())); + builder.append(QueryTokens.expression(ctx.RIGHT())); } if (ctx.FULL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FULL())); + builder.append(QueryTokens.expression(ctx.FULL())); } if (ctx.OUTER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OUTER())); + builder.append(QueryTokens.expression(ctx.OUTER())); } if (ctx.CROSS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CROSS())); + builder.append(QueryTokens.expression(ctx.CROSS())); } return builder; } @Override - public QueryRendererBuilder visitCrossJoin(HqlParser.CrossJoinContext ctx) { + public QueryTokenStream visitCrossJoin(HqlParser.CrossJoinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CROSS())); - builder.append(JpaQueryParsingToken.expression(ctx.JOIN())); + builder.append(QueryTokens.expression(ctx.CROSS())); + builder.append(QueryTokens.expression(ctx.JOIN())); builder.appendExpression(visit(ctx.entityName())); if (ctx.variable() != null) { @@ -882,14 +882,14 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoinRestriction(HqlParser.JoinRestrictionContext ctx) { + public QueryTokenStream visitJoinRestriction(HqlParser.JoinRestrictionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.ON() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ON())); + builder.append(QueryTokens.expression(ctx.ON())); } else if (ctx.WITH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.WITH())); + builder.append(QueryTokens.expression(ctx.WITH())); } builder.appendExpression(visit(ctx.predicate())); @@ -898,12 +898,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitJpaCollectionJoin(HqlParser.JpaCollectionJoinContext ctx) { + public QueryTokenStream visitJpaCollectionJoin(HqlParser.JpaCollectionJoinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(TOKEN_COMMA); - builder.append(JpaQueryParsingToken.token(ctx.IN())); + builder.append(QueryTokens.token(ctx.IN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.path())); builder.append(TOKEN_CLOSE_PAREN); @@ -916,68 +916,65 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitGroupByClause(HqlParser.GroupByClauseContext ctx) { + public QueryTokenStream visitGroupByClause(HqlParser.GroupByClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.GROUP())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - builder.append(QueryRendererBuilder.concat(ctx.groupedItem(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.GROUP())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.append(QueryTokenStream.concat(ctx.groupedItem(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitOrderByClause(HqlParser.OrderByClauseContext ctx) { + public QueryTokenStream visitOrderByClause(HqlParser.OrderByClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ORDER())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - - QueryRendererBuilder concat = QueryRendererBuilder.concat(ctx.sortedItem(), this::visit, TOKEN_COMMA); - - builder.appendExpression(concat); + builder.append(QueryTokens.expression(ctx.ORDER())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.appendExpression(QueryTokenStream.concat(ctx.sortedItem(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitHavingClause(HqlParser.HavingClauseContext ctx) { + public QueryTokenStream visitHavingClause(HqlParser.HavingClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.HAVING())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.predicate(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.HAVING())); + builder.appendExpression(QueryTokenStream.concat(ctx.predicate(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitSetOperator(HqlParser.SetOperatorContext ctx) { + public QueryTokenStream visitSetOperator(HqlParser.SetOperatorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.UNION() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.UNION())); + builder.append(QueryTokens.expression(ctx.UNION())); } else if (ctx.INTERSECT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INTERSECT())); + builder.append(QueryTokens.expression(ctx.INTERSECT())); } else if (ctx.EXCEPT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.EXCEPT())); + builder.append(QueryTokens.expression(ctx.EXCEPT())); } if (ctx.ALL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ALL())); + builder.append(QueryTokens.expression(ctx.ALL())); } return builder; } @Override - public QueryRendererBuilder visitLiteral(HqlParser.LiteralContext ctx) { + public QueryTokenStream visitLiteral(HqlParser.LiteralContext ctx) { if (ctx.NULL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.NULL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.NULL())); } else if (ctx.booleanLiteral() != null) { return visit(ctx.booleanLiteral()); } else if (ctx.stringLiteral() != null) { @@ -989,87 +986,87 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.binaryLiteral() != null) { return visit(ctx.binaryLiteral()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitBooleanLiteral(HqlParser.BooleanLiteralContext ctx) { + public QueryTokenStream visitBooleanLiteral(HqlParser.BooleanLiteralContext ctx) { if (ctx.TRUE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TRUE())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.TRUE())); } else if (ctx.FALSE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.FALSE())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.FALSE())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitStringLiteral(HqlParser.StringLiteralContext ctx) { + public QueryTokenStream visitStringLiteral(HqlParser.StringLiteralContext ctx) { if (ctx.STRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL())); } else if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.CHARACTER())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitNumericLiteral(HqlParser.NumericLiteralContext ctx) { + public QueryTokenStream visitNumericLiteral(HqlParser.NumericLiteralContext ctx) { if (ctx.INTEGER_LITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTEGER_LITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL())); } else if (ctx.FLOAT_LITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.FLOAT_LITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.FLOAT_LITERAL())); } else if (ctx.HEXLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.HEXLITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.HEXLITERAL())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitDateTimeLiteral(HqlParser.DateTimeLiteralContext ctx) { + public QueryTokenStream visitDateTimeLiteral(HqlParser.DateTimeLiteralContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LOCAL_DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL_DATE())); + builder.append(QueryTokens.expression(ctx.LOCAL_DATE())); } else if (ctx.LOCAL_TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL_TIME())); + builder.append(QueryTokens.expression(ctx.LOCAL_TIME())); } else if (ctx.LOCAL_DATETIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL_DATETIME())); + builder.append(QueryTokens.expression(ctx.LOCAL_DATETIME())); } else if (ctx.CURRENT_DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_DATE())); + builder.append(QueryTokens.expression(ctx.CURRENT_DATE())); } else if (ctx.CURRENT_TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIME())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIME())); } else if (ctx.CURRENT_TIMESTAMP() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIMESTAMP())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIMESTAMP())); } else if (ctx.OFFSET_DATETIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OFFSET_DATETIME())); + builder.append(QueryTokens.expression(ctx.OFFSET_DATETIME())); } else { if (ctx.LOCAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL())); + builder.append(QueryTokens.expression(ctx.LOCAL())); } else if (ctx.CURRENT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT())); + builder.append(QueryTokens.expression(ctx.CURRENT())); } else if (ctx.OFFSET() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OFFSET())); + builder.append(QueryTokens.expression(ctx.OFFSET())); } if (ctx.DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATE())); + builder.append(QueryTokens.expression(ctx.DATE())); } else if (ctx.TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.TIME())); + builder.append(QueryTokens.expression(ctx.TIME())); } else if (ctx.DATETIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATETIME())); + builder.append(QueryTokens.expression(ctx.DATETIME())); } if (ctx.INSTANT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INSTANT())); + builder.append(QueryTokens.expression(ctx.INSTANT())); } } @@ -1077,46 +1074,46 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetimeField(HqlParser.DatetimeFieldContext ctx) { + public QueryTokenStream visitDatetimeField(HqlParser.DatetimeFieldContext ctx) { if (ctx.YEAR() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.YEAR())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.YEAR())); } else if (ctx.MONTH() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.MONTH())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.MONTH())); } else if (ctx.DAY() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.DAY())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.DAY())); } else if (ctx.WEEK() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.WEEK())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.WEEK())); } else if (ctx.QUARTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.QUARTER())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.QUARTER())); } else if (ctx.HOUR() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.HOUR())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.HOUR())); } else if (ctx.MINUTE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.MINUTE())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.MINUTE())); } else if (ctx.SECOND() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.SECOND())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.SECOND())); } else if (ctx.NANOSECOND() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.NANOSECOND())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.NANOSECOND())); } else if (ctx.EPOCH() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.EPOCH())); + return QueryRendererBuilder.from(QueryTokens.expression(ctx.EPOCH())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitBinaryLiteral(HqlParser.BinaryLiteralContext ctx) { + public QueryTokenStream visitBinaryLiteral(HqlParser.BinaryLiteralContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.BINARY_LITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.BINARY_LITERAL())); + builder.append(QueryTokens.expression(ctx.BINARY_LITERAL())); } else if (ctx.HEXLITERAL() != null) { builder.append(TOKEN_OPEN_BRACE); - builder.append(QueryRendererBuilder.concat(ctx.HEXLITERAL(), it -> { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(it)); + builder.append(QueryTokenStream.concat(ctx.HEXLITERAL(), it -> { + return QueryRendererBuilder.from(QueryTokens.token(it)); }, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_BRACE); @@ -1126,24 +1123,24 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitPlainPrimaryExpression(HqlParser.PlainPrimaryExpressionContext ctx) { + public QueryTokenStream visitPlainPrimaryExpression(HqlParser.PlainPrimaryExpressionContext ctx) { return visit(ctx.primaryExpression()); } @Override - public QueryRendererBuilder visitTupleExpression(HqlParser.TupleExpressionContext ctx) { + public QueryTokenStream visitTupleExpression(HqlParser.TupleExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(TOKEN_OPEN_PAREN); - builder.append(QueryRendererBuilder.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitHqlConcatenationExpression(HqlParser.HqlConcatenationExpressionContext ctx) { + public QueryTokenStream visitHqlConcatenationExpression(HqlParser.HqlConcatenationExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1155,43 +1152,43 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitDayOfWeekExpression(HqlParser.DayOfWeekExpressionContext ctx) { + public QueryTokenStream visitDayOfWeekExpression(HqlParser.DayOfWeekExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.DAY())); - builder.append(JpaQueryParsingToken.expression(ctx.OF())); - builder.append(JpaQueryParsingToken.expression(ctx.WEEK())); + builder.append(QueryTokens.expression(ctx.DAY())); + builder.append(QueryTokens.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.WEEK())); return builder; } @Override - public QueryRendererBuilder visitDayOfMonthExpression(HqlParser.DayOfMonthExpressionContext ctx) { + public QueryTokenStream visitDayOfMonthExpression(HqlParser.DayOfMonthExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.DAY())); - builder.append(JpaQueryParsingToken.expression(ctx.OF())); - builder.append(JpaQueryParsingToken.expression(ctx.MONTH())); + builder.append(QueryTokens.expression(ctx.DAY())); + builder.append(QueryTokens.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.MONTH())); return builder; } @Override - public QueryRendererBuilder visitWeekOfYearExpression(HqlParser.WeekOfYearExpressionContext ctx) { + public QueryTokenStream visitWeekOfYearExpression(HqlParser.WeekOfYearExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WEEK())); - builder.append(JpaQueryParsingToken.expression(ctx.OF())); - builder.append(JpaQueryParsingToken.expression(ctx.YEAR())); + builder.append(QueryTokens.expression(ctx.WEEK())); + builder.append(QueryTokens.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.YEAR())); return builder; } @Override - public QueryRendererBuilder visitGroupedExpression(HqlParser.GroupedExpressionContext ctx) { + public QueryTokenStream visitGroupedExpression(HqlParser.GroupedExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1203,42 +1200,42 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitAdditionExpression(HqlParser.AdditionExpressionContext ctx) { + public QueryTokenStream visitAdditionExpression(HqlParser.AdditionExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.appendInline(visit(ctx.expression(1))); return builder; } @Override - public QueryRendererBuilder visitSignedNumericLiteral(HqlParser.SignedNumericLiteralContext ctx) { + public QueryTokenStream visitSignedNumericLiteral(HqlParser.SignedNumericLiteralContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.op)); + builder.append(QueryTokens.token(ctx.op)); builder.append(visit(ctx.numericLiteral())); return builder; } @Override - public QueryRendererBuilder visitMultiplicationExpression(HqlParser.MultiplicationExpressionContext ctx) { + public QueryTokenStream visitMultiplicationExpression(HqlParser.MultiplicationExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression(0))); - builder.append(JpaQueryParsingToken.expression(ctx.op)); + builder.append(QueryTokens.expression(ctx.op)); builder.appendExpression(visit(ctx.expression(1))); return builder; } @Override - public QueryRendererBuilder visitSubqueryExpression(HqlParser.SubqueryExpressionContext ctx) { + public QueryTokenStream visitSubqueryExpression(HqlParser.SubqueryExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1250,18 +1247,18 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSignedExpression(HqlParser.SignedExpressionContext ctx) { + public QueryTokenStream visitSignedExpression(HqlParser.SignedExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.op)); + builder.append(QueryTokens.token(ctx.op)); builder.appendInline(visit(ctx.expression())); return builder; } @Override - public QueryRendererBuilder visitToDurationExpression(HqlParser.ToDurationExpressionContext ctx) { + public QueryTokenStream visitToDurationExpression(HqlParser.ToDurationExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1272,56 +1269,56 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitFromDurationExpression(HqlParser.FromDurationExpressionContext ctx) { + public QueryTokenStream visitFromDurationExpression(HqlParser.FromDurationExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); + builder.append(QueryTokens.expression(ctx.BY())); builder.append(visit(ctx.datetimeField())); return builder; } @Override - public QueryRendererBuilder visitCaseExpression(HqlParser.CaseExpressionContext ctx) { + public QueryTokenStream visitCaseExpression(HqlParser.CaseExpressionContext ctx) { return visit(ctx.caseList()); } @Override - public QueryRendererBuilder visitLiteralExpression(HqlParser.LiteralExpressionContext ctx) { + public QueryTokenStream visitLiteralExpression(HqlParser.LiteralExpressionContext ctx) { return visit(ctx.literal()); } @Override - public QueryRendererBuilder visitParameterExpression(HqlParser.ParameterExpressionContext ctx) { + public QueryTokenStream visitParameterExpression(HqlParser.ParameterExpressionContext ctx) { return visit(ctx.parameter()); } @Override - public QueryRendererBuilder visitFunctionExpression(HqlParser.FunctionExpressionContext ctx) { + public QueryTokenStream visitFunctionExpression(HqlParser.FunctionExpressionContext ctx) { return visit(ctx.function()); } @Override - public QueryRendererBuilder visitGeneralPathExpression(HqlParser.GeneralPathExpressionContext ctx) { + public QueryTokenStream visitGeneralPathExpression(HqlParser.GeneralPathExpressionContext ctx) { return visit(ctx.generalPathFragment()); } @Override - public QueryRendererBuilder visitIdentificationVariable(HqlParser.IdentificationVariableContext ctx) { + public QueryTokenStream visitIdentificationVariable(HqlParser.IdentificationVariableContext ctx) { if (ctx.identifier() != null) { return visit(ctx.identifier()); } else if (ctx.simplePath() != null) { return visit(ctx.simplePath()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitPath(HqlParser.PathContext ctx) { + public QueryTokenStream visitPath(HqlParser.PathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1340,7 +1337,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneralPathFragment(HqlParser.GeneralPathFragmentContext ctx) { + public QueryTokenStream visitGeneralPathFragment(HqlParser.GeneralPathFragmentContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1354,7 +1351,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitIndexedPathAccessFragment(HqlParser.IndexedPathAccessFragmentContext ctx) { + public QueryTokenStream visitIndexedPathAccessFragment(HqlParser.IndexedPathAccessFragmentContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1372,7 +1369,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimplePath(HqlParser.SimplePathContext ctx) { + public QueryTokenStream visitSimplePath(HqlParser.SimplePathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1382,13 +1379,13 @@ class HqlQueryRenderer extends HqlBaseVisitor { builder.append(TOKEN_DOT); } - builder.append(QueryRendererBuilder.concat(ctx.simplePathElement(), this::visit, TOKEN_DOT)); + builder.append(QueryTokenStream.concat(ctx.simplePathElement(), this::visit, TOKEN_DOT)); return builder; } @Override - public QueryRendererBuilder visitSimplePathElement(HqlParser.SimplePathElementContext ctx) { + public QueryTokenStream visitSimplePathElement(HqlParser.SimplePathElementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1398,23 +1395,23 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCaseList(HqlParser.CaseListContext ctx) { + public QueryTokenStream visitCaseList(HqlParser.CaseListContext ctx) { if (ctx.simpleCaseExpression() != null) { return visit(ctx.simpleCaseExpression()); } else if (ctx.searchedCaseExpression() != null) { return visit(ctx.searchedCaseExpression()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSimpleCaseExpression(HqlParser.SimpleCaseExpressionContext ctx) { + public QueryTokenStream visitSimpleCaseExpression(HqlParser.SimpleCaseExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); + builder.append(QueryTokens.expression(ctx.CASE())); builder.append(visit(ctx.expressionOrPredicate(0))); ctx.caseWhenExpressionClause().forEach(caseWhenExpressionClauseContext -> { @@ -1423,63 +1420,63 @@ class HqlQueryRenderer extends HqlBaseVisitor { if (ctx.ELSE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.append(visit(ctx.expressionOrPredicate(1))); } - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitSearchedCaseExpression(HqlParser.SearchedCaseExpressionContext ctx) { + public QueryTokenStream visitSearchedCaseExpression(HqlParser.SearchedCaseExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); + builder.append(QueryTokens.expression(ctx.CASE())); - builder.append(QueryRendererBuilder.concatExpressions(ctx.caseWhenPredicateClause(), this::visit, TOKEN_NONE)); + builder.append(QueryTokenStream.concat(ctx.caseWhenPredicateClause(), this::visit, TOKEN_SPACE)); if (ctx.ELSE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.appendExpression(visit(ctx.expressionOrPredicate())); } - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitCaseWhenExpressionClause(HqlParser.CaseWhenExpressionClauseContext ctx) { + public QueryTokenStream visitCaseWhenExpressionClause(HqlParser.CaseWhenExpressionClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.appendExpression(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.appendExpression(visit(ctx.expressionOrPredicate())); return builder; } @Override - public QueryRendererBuilder visitCaseWhenPredicateClause(HqlParser.CaseWhenPredicateClauseContext ctx) { + public QueryTokenStream visitCaseWhenPredicateClause(HqlParser.CaseWhenPredicateClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.appendExpression(visit(ctx.predicate())); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.appendExpression(visit(ctx.expressionOrPredicate())); return builder; } @Override - public QueryRendererBuilder visitGenericFunction(HqlParser.GenericFunctionContext ctx) { + public QueryTokenStream visitGenericFunction(HqlParser.GenericFunctionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); QueryRendererBuilder nested = QueryRenderer.builder(); @@ -1490,7 +1487,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { if (ctx.functionArguments() != null) { nested.appendInline(visit(ctx.functionArguments())); } else if (ctx.ASTERISK() != null) { - nested.append(JpaQueryParsingToken.token(ctx.ASTERISK())); + nested.append(QueryTokens.token(ctx.ASTERISK())); } nested.append(TOKEN_CLOSE_PAREN); @@ -1517,7 +1514,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctionWithSubquery(HqlParser.FunctionWithSubqueryContext ctx) { + public QueryTokenStream visitFunctionWithSubquery(HqlParser.FunctionWithSubqueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1530,55 +1527,55 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCastFunctionInvocation(HqlParser.CastFunctionInvocationContext ctx) { + public QueryTokenStream visitCastFunctionInvocation(HqlParser.CastFunctionInvocationContext ctx) { return visit(ctx.castFunction()); } @Override - public QueryRendererBuilder visitExtractFunctionInvocation(HqlParser.ExtractFunctionInvocationContext ctx) { + public QueryTokenStream visitExtractFunctionInvocation(HqlParser.ExtractFunctionInvocationContext ctx) { return visit(ctx.extractFunction()); } @Override - public QueryRendererBuilder visitTrimFunctionInvocation(HqlParser.TrimFunctionInvocationContext ctx) { + public QueryTokenStream visitTrimFunctionInvocation(HqlParser.TrimFunctionInvocationContext ctx) { return visit(ctx.trimFunction()); } @Override - public QueryRendererBuilder visitEveryFunctionInvocation(HqlParser.EveryFunctionInvocationContext ctx) { + public QueryTokenStream visitEveryFunctionInvocation(HqlParser.EveryFunctionInvocationContext ctx) { return visit(ctx.everyFunction()); } @Override - public QueryRendererBuilder visitAnyFunctionInvocation(HqlParser.AnyFunctionInvocationContext ctx) { + public QueryTokenStream visitAnyFunctionInvocation(HqlParser.AnyFunctionInvocationContext ctx) { return visit(ctx.anyFunction()); } @Override - public QueryRendererBuilder visitTreatedPathInvocation(HqlParser.TreatedPathInvocationContext ctx) { + public QueryTokenStream visitTreatedPathInvocation(HqlParser.TreatedPathInvocationContext ctx) { return visit(ctx.treatedPath()); } @Override - public QueryRendererBuilder visitFunctionArguments(HqlParser.FunctionArgumentsContext ctx) { + public QueryTokenStream visitFunctionArguments(HqlParser.FunctionArgumentsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } - builder.append(QueryRendererBuilder.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitFilterClause(HqlParser.FilterClauseContext ctx) { + public QueryTokenStream visitFilterClause(HqlParser.FilterClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FILTER())); + builder.append(QueryTokens.expression(ctx.FILTER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.whereClause())); builder.append(TOKEN_CLOSE_PAREN); @@ -1587,12 +1584,12 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitWithinGroup(HqlParser.WithinGroupContext ctx) { + public QueryTokenStream visitWithinGroup(HqlParser.WithinGroupContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WITHIN())); - builder.append(JpaQueryParsingToken.expression(ctx.GROUP())); + builder.append(QueryTokens.expression(ctx.WITHIN())); + builder.append(QueryTokens.expression(ctx.GROUP())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.orderByClause())); builder.append(TOKEN_CLOSE_PAREN); @@ -1601,10 +1598,10 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitOverClause(HqlParser.OverClauseContext ctx) { + public QueryTokenStream visitOverClause(HqlParser.OverClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.OVER())); + builder.append(QueryTokens.expression(ctx.OVER())); QueryRendererBuilder nested = QueryRenderer.builder(); nested.append(TOKEN_OPEN_PAREN); @@ -1623,7 +1620,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { trees.add(ctx.frameClause()); } - nested.appendInline(QueryRendererBuilder.concatExpressions(trees, this::visit, TOKEN_NONE)); + nested.appendInline(QueryTokenStream.concat(trees, this::visit, TOKEN_SPACE)); nested.append(TOKEN_CLOSE_PAREN); builder.appendInline(nested); @@ -1632,40 +1629,40 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitPartitionClause(HqlParser.PartitionClauseContext ctx) { + public QueryTokenStream visitPartitionClause(HqlParser.PartitionClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.PARTITION())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); + builder.append(QueryTokens.expression(ctx.PARTITION())); + builder.append(QueryTokens.expression(ctx.BY())); - builder.append(QueryRendererBuilder.concat(ctx.expression(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.expression(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitFrameClause(HqlParser.FrameClauseContext ctx) { + public QueryTokenStream visitFrameClause(HqlParser.FrameClauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.RANGE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.RANGE())); + builder.append(QueryTokens.expression(ctx.RANGE())); } else if (ctx.ROWS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ROWS())); + builder.append(QueryTokens.expression(ctx.ROWS())); } else if (ctx.GROUPS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.GROUPS())); + builder.append(QueryTokens.expression(ctx.GROUPS())); } if (ctx.BETWEEN() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); } builder.appendExpression(visit(ctx.frameStart())); if (ctx.AND() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.frameEnd())); } @@ -1677,151 +1674,151 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitUnboundedPrecedingFrameStart(HqlParser.UnboundedPrecedingFrameStartContext ctx) { + public QueryTokenStream visitUnboundedPrecedingFrameStart(HqlParser.UnboundedPrecedingFrameStartContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.UNBOUNDED())); - builder.append(JpaQueryParsingToken.expression(ctx.PRECEDING())); + builder.append(QueryTokens.expression(ctx.UNBOUNDED())); + builder.append(QueryTokens.expression(ctx.PRECEDING())); return builder; } @Override - public QueryRendererBuilder visitExpressionPrecedingFrameStart(HqlParser.ExpressionPrecedingFrameStartContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.PRECEDING())); - - return builder; - } - - @Override - public QueryRendererBuilder visitCurrentRowFrameStart(HqlParser.CurrentRowFrameStartContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT())); - builder.append(JpaQueryParsingToken.expression(ctx.ROW())); - - return builder; - } - - @Override - public QueryRendererBuilder visitExpressionFollowingFrameStart(HqlParser.ExpressionFollowingFrameStartContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.FOLLOWING())); - - return builder; - } - - @Override - public QueryRendererBuilder visitCurrentRowFrameExclusion(HqlParser.CurrentRowFrameExclusionContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(JpaQueryParsingToken.expression(ctx.EXCLUDE())); - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT())); - builder.append(JpaQueryParsingToken.expression(ctx.ROW())); - - return builder; - } - - @Override - public QueryRendererBuilder visitGroupFrameExclusion(HqlParser.GroupFrameExclusionContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(JpaQueryParsingToken.expression(ctx.EXCLUDE())); - builder.append(JpaQueryParsingToken.expression(ctx.GROUP())); - - return builder; - } - - @Override - public QueryRendererBuilder visitTiesFrameExclusion(HqlParser.TiesFrameExclusionContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(JpaQueryParsingToken.expression(ctx.EXCLUDE())); - builder.append(JpaQueryParsingToken.expression(ctx.TIES())); - - return builder; - } - - @Override - public QueryRendererBuilder visitNoOthersFrameExclusion(HqlParser.NoOthersFrameExclusionContext ctx) { - - QueryRendererBuilder builder = QueryRenderer.builder(); - - builder.append(JpaQueryParsingToken.expression(ctx.EXCLUDE())); - builder.append(JpaQueryParsingToken.expression(ctx.NO())); - builder.append(JpaQueryParsingToken.expression(ctx.OTHERS())); - - return builder; - } - - @Override - public QueryRendererBuilder visitExpressionPrecedingFrameEnd(HqlParser.ExpressionPrecedingFrameEndContext ctx) { + public QueryTokenStream visitExpressionPrecedingFrameStart(HqlParser.ExpressionPrecedingFrameStartContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.PRECEDING())); + builder.append(QueryTokens.expression(ctx.PRECEDING())); return builder; } @Override - public QueryRendererBuilder visitCurrentRowFrameEnd(HqlParser.CurrentRowFrameEndContext ctx) { + public QueryTokenStream visitCurrentRowFrameStart(HqlParser.CurrentRowFrameStartContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT())); - builder.append(JpaQueryParsingToken.expression(ctx.ROW())); + builder.append(QueryTokens.expression(ctx.CURRENT())); + builder.append(QueryTokens.expression(ctx.ROW())); return builder; } @Override - public QueryRendererBuilder visitExpressionFollowingFrameEnd(HqlParser.ExpressionFollowingFrameEndContext ctx) { + public QueryTokenStream visitExpressionFollowingFrameStart(HqlParser.ExpressionFollowingFrameStartContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression())); - builder.append(JpaQueryParsingToken.expression(ctx.FOLLOWING())); + builder.append(QueryTokens.expression(ctx.FOLLOWING())); return builder; } @Override - public QueryRendererBuilder visitUnboundedFollowingFrameEnd(HqlParser.UnboundedFollowingFrameEndContext ctx) { + public QueryTokenStream visitCurrentRowFrameExclusion(HqlParser.CurrentRowFrameExclusionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.UNBOUNDED())); - builder.append(JpaQueryParsingToken.expression(ctx.FOLLOWING())); + builder.append(QueryTokens.expression(ctx.EXCLUDE())); + builder.append(QueryTokens.expression(ctx.CURRENT())); + builder.append(QueryTokens.expression(ctx.ROW())); return builder; } @Override - public QueryRendererBuilder visitCastFunction(HqlParser.CastFunctionContext ctx) { + public QueryTokenStream visitGroupFrameExclusion(HqlParser.GroupFrameExclusionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.CAST())); + builder.append(QueryTokens.expression(ctx.EXCLUDE())); + builder.append(QueryTokens.expression(ctx.GROUP())); + + return builder; + } + + @Override + public QueryTokenStream visitTiesFrameExclusion(HqlParser.TiesFrameExclusionContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.append(QueryTokens.expression(ctx.EXCLUDE())); + builder.append(QueryTokens.expression(ctx.TIES())); + + return builder; + } + + @Override + public QueryTokenStream visitNoOthersFrameExclusion(HqlParser.NoOthersFrameExclusionContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.append(QueryTokens.expression(ctx.EXCLUDE())); + builder.append(QueryTokens.expression(ctx.NO())); + builder.append(QueryTokens.expression(ctx.OTHERS())); + + return builder; + } + + @Override + public QueryTokenStream visitExpressionPrecedingFrameEnd(HqlParser.ExpressionPrecedingFrameEndContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.appendExpression(visit(ctx.expression())); + builder.append(QueryTokens.expression(ctx.PRECEDING())); + + return builder; + } + + @Override + public QueryTokenStream visitCurrentRowFrameEnd(HqlParser.CurrentRowFrameEndContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.append(QueryTokens.expression(ctx.CURRENT())); + builder.append(QueryTokens.expression(ctx.ROW())); + + return builder; + } + + @Override + public QueryTokenStream visitExpressionFollowingFrameEnd(HqlParser.ExpressionFollowingFrameEndContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.appendExpression(visit(ctx.expression())); + builder.append(QueryTokens.expression(ctx.FOLLOWING())); + + return builder; + } + + @Override + public QueryTokenStream visitUnboundedFollowingFrameEnd(HqlParser.UnboundedFollowingFrameEndContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.append(QueryTokens.expression(ctx.UNBOUNDED())); + builder.append(QueryTokens.expression(ctx.FOLLOWING())); + + return builder; + } + + @Override + public QueryTokenStream visitCastFunction(HqlParser.CastFunctionContext ctx) { + + QueryRendererBuilder builder = QueryRenderer.builder(); + + builder.append(QueryTokens.token(ctx.CAST())); builder.append(TOKEN_OPEN_PAREN); QueryRendererBuilder nested = QueryRenderer.builder(); nested.appendExpression(visit(ctx.expression())); - nested.append(JpaQueryParsingToken.expression(ctx.AS())); + nested.append(QueryTokens.expression(ctx.AS())); nested.appendExpression(visit(ctx.castTarget())); builder.appendInline(nested); @@ -1831,7 +1828,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCastTarget(HqlParser.CastTargetContext ctx) { + public QueryTokenStream visitCastTarget(HqlParser.CastTargetContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1841,13 +1838,13 @@ class HqlQueryRenderer extends HqlBaseVisitor { builder.append(TOKEN_OPEN_PAREN); - List tokens = new ArrayList<>(); + List tokens = new ArrayList<>(); ctx.INTEGER_LITERAL().forEach(terminalNode -> { if (!tokens.isEmpty()) { tokens.add(TOKEN_COMMA); } - tokens.add(JpaQueryParsingToken.expression(terminalNode)); + tokens.add(QueryTokens.expression(terminalNode)); }); @@ -1859,24 +1856,24 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCastTargetType(HqlParser.CastTargetTypeContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.fullTargetName)); + public QueryTokenStream visitCastTargetType(HqlParser.CastTargetTypeContext ctx) { + return QueryRendererBuilder.from(QueryTokens.expression(ctx.fullTargetName)); } @Override - public QueryRendererBuilder visitExtractFunction(HqlParser.ExtractFunctionContext ctx) { + public QueryTokenStream visitExtractFunction(HqlParser.ExtractFunctionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.EXTRACT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.EXTRACT())); + builder.append(QueryTokens.token(ctx.EXTRACT())); builder.append(TOKEN_OPEN_PAREN); QueryRendererBuilder nested = QueryRenderer.builder(); nested.appendExpression(visit(ctx.expression(0))); - nested.append(JpaQueryParsingToken.expression(ctx.FROM())); + nested.append(QueryTokens.expression(ctx.FROM())); nested.append(visit(ctx.expression(1))); builder.appendInline(nested); @@ -1893,19 +1890,19 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitTrimFunction(HqlParser.TrimFunctionContext ctx) { + public QueryTokenStream visitTrimFunction(HqlParser.TrimFunctionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TRIM())); + builder.append(QueryTokens.token(ctx.TRIM())); builder.append(TOKEN_OPEN_PAREN); if (ctx.LEADING() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LEADING())); + builder.append(QueryTokens.expression(ctx.LEADING())); } else if (ctx.TRAILING() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.TRAILING())); + builder.append(QueryTokens.expression(ctx.TRAILING())); } else if (ctx.BOTH() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.BOTH())); + builder.append(QueryTokens.expression(ctx.BOTH())); } if (ctx.stringLiteral() != null) { @@ -1913,7 +1910,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } if (ctx.FROM() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); } builder.appendInline(visit(ctx.expression())); @@ -1923,21 +1920,21 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitDateTimeFunction(HqlParser.DateTimeFunctionContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.d)); + public QueryTokenStream visitDateTimeFunction(HqlParser.DateTimeFunctionContext ctx) { + return QueryRendererBuilder.from(QueryTokens.expression(ctx.d)); } @Override - public QueryRendererBuilder visitEveryFunction(HqlParser.EveryFunctionContext ctx) { + public QueryTokenStream visitEveryFunction(HqlParser.EveryFunctionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.every)); + builder.append(QueryTokens.expression(ctx.every)); if (ctx.ELEMENTS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELEMENTS())); + builder.append(QueryTokens.expression(ctx.ELEMENTS())); } else if (ctx.INDICES() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INDICES())); + builder.append(QueryTokens.expression(ctx.INDICES())); } builder.append(TOKEN_OPEN_PAREN); @@ -1956,16 +1953,16 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitAnyFunction(HqlParser.AnyFunctionContext ctx) { + public QueryTokenStream visitAnyFunction(HqlParser.AnyFunctionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.any)); + builder.append(QueryTokens.expression(ctx.any)); if (ctx.ELEMENTS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELEMENTS())); + builder.append(QueryTokens.expression(ctx.ELEMENTS())); } else if (ctx.INDICES() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INDICES())); + builder.append(QueryTokens.expression(ctx.INDICES())); } builder.append(TOKEN_OPEN_PAREN); @@ -1984,16 +1981,16 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitTreatedPath(HqlParser.TreatedPathContext ctx) { + public QueryTokenStream visitTreatedPath(HqlParser.TreatedPathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); QueryRendererBuilder nested = QueryRenderer.builder(); nested.appendExpression(visit(ctx.path())); - nested.append(JpaQueryParsingToken.expression(ctx.AS())); + nested.append(QueryTokens.expression(ctx.AS())); nested.append(visit(ctx.simplePath())); builder.appendInline(nested); @@ -2007,7 +2004,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitPathContinutation(HqlParser.PathContinutationContext ctx) { + public QueryTokenStream visitPathContinutation(HqlParser.PathContinutationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2018,56 +2015,56 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitNullExpressionPredicate(HqlParser.NullExpressionPredicateContext ctx) { + public QueryTokenStream visitNullExpressionPredicate(HqlParser.NullExpressionPredicateContext ctx) { return visit(ctx.dealingWithNullExpression()); } @Override - public QueryRendererBuilder visitBetweenPredicate(HqlParser.BetweenPredicateContext ctx) { + public QueryTokenStream visitBetweenPredicate(HqlParser.BetweenPredicateContext ctx) { return visit(ctx.betweenExpression()); } @Override - public QueryRendererBuilder visitOrPredicate(HqlParser.OrPredicateContext ctx) { + public QueryTokenStream visitOrPredicate(HqlParser.OrPredicateContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.predicate(0))); - builder.append(JpaQueryParsingToken.expression(ctx.OR())); + builder.append(QueryTokens.expression(ctx.OR())); builder.appendExpression(visit(ctx.predicate(1))); return builder; } @Override - public QueryRendererBuilder visitRelationalPredicate(HqlParser.RelationalPredicateContext ctx) { + public QueryTokenStream visitRelationalPredicate(HqlParser.RelationalPredicateContext ctx) { return visit(ctx.relationalExpression()); } @Override - public QueryRendererBuilder visitExistsPredicate(HqlParser.ExistsPredicateContext ctx) { + public QueryTokenStream visitExistsPredicate(HqlParser.ExistsPredicateContext ctx) { return visit(ctx.existsExpression()); } @Override - public QueryRendererBuilder visitCollectionPredicate(HqlParser.CollectionPredicateContext ctx) { + public QueryTokenStream visitCollectionPredicate(HqlParser.CollectionPredicateContext ctx) { return visit(ctx.collectionExpression()); } @Override - public QueryRendererBuilder visitAndPredicate(HqlParser.AndPredicateContext ctx) { + public QueryTokenStream visitAndPredicate(HqlParser.AndPredicateContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.predicate(0))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.predicate(1))); return builder; } @Override - public QueryRendererBuilder visitGroupedPredicate(HqlParser.GroupedPredicateContext ctx) { + public QueryTokenStream visitGroupedPredicate(HqlParser.GroupedPredicateContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2079,17 +2076,17 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitLikePredicate(HqlParser.LikePredicateContext ctx) { + public QueryTokenStream visitLikePredicate(HqlParser.LikePredicateContext ctx) { return visit(ctx.stringPatternMatching()); } @Override - public QueryRendererBuilder visitInPredicate(HqlParser.InPredicateContext ctx) { + public QueryTokenStream visitInPredicate(HqlParser.InPredicateContext ctx) { return visit(ctx.inExpression()); } @Override - public QueryRendererBuilder visitNotPredicate(HqlParser.NotPredicateContext ctx) { + public QueryTokenStream visitNotPredicate(HqlParser.NotPredicateContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2100,71 +2097,71 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitExpressionPredicate(HqlParser.ExpressionPredicateContext ctx) { + public QueryTokenStream visitExpressionPredicate(HqlParser.ExpressionPredicateContext ctx) { return visit(ctx.expression()); } @Override - public QueryRendererBuilder visitExpressionOrPredicate(HqlParser.ExpressionOrPredicateContext ctx) { + public QueryTokenStream visitExpressionOrPredicate(HqlParser.ExpressionOrPredicateContext ctx) { if (ctx.expression() != null) { return visit(ctx.expression()); } else if (ctx.predicate() != null) { return visit(ctx.predicate()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitRelationalExpression(HqlParser.RelationalExpressionContext ctx) { + public QueryTokenStream visitRelationalExpression(HqlParser.RelationalExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.appendInline(visit(ctx.expression(1))); return builder; } @Override - public QueryRendererBuilder visitBetweenExpression(HqlParser.BetweenExpressionContext ctx) { + public QueryTokenStream visitBetweenExpression(HqlParser.BetweenExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.expression(2))); return builder; } @Override - public QueryRendererBuilder visitDealingWithNullExpression(HqlParser.DealingWithNullExpressionContext ctx) { + public QueryTokenStream visitDealingWithNullExpression(HqlParser.DealingWithNullExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression(0))); - builder.append(JpaQueryParsingToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } if (ctx.NULL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NULL())); + builder.append(QueryTokens.expression(ctx.NULL())); } else if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendExpression(visit(ctx.expression(1))); } @@ -2172,27 +2169,27 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitStringPatternMatching(HqlParser.StringPatternMatchingContext ctx) { + public QueryTokenStream visitStringPatternMatching(HqlParser.StringPatternMatchingContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } if (ctx.LIKE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LIKE())); + builder.append(QueryTokens.expression(ctx.LIKE())); } else if (ctx.ILIKE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ILIKE())); + builder.append(QueryTokens.expression(ctx.ILIKE())); } builder.appendExpression(visit(ctx.expression(1))); if (ctx.ESCAPE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ESCAPE())); + builder.append(QueryTokens.expression(ctx.ESCAPE())); if (ctx.stringLiteral() != null) { builder.appendExpression(visit(ctx.stringLiteral())); @@ -2205,33 +2202,33 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitInExpression(HqlParser.InExpressionContext ctx) { + public QueryTokenStream visitInExpression(HqlParser.InExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.expression())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.IN())); + builder.append(QueryTokens.expression(ctx.IN())); builder.appendExpression(visit(ctx.inList())); return builder; } @Override - public QueryRendererBuilder visitInList(HqlParser.InListContext ctx) { + public QueryTokenStream visitInList(HqlParser.InListContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.simplePath() != null) { if (ctx.ELEMENTS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELEMENTS())); + builder.append(QueryTokens.expression(ctx.ELEMENTS())); } else if (ctx.INDICES() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INDICES())); + builder.append(QueryTokens.expression(ctx.INDICES())); } builder.append(TOKEN_OPEN_PAREN); @@ -2247,7 +2244,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.expressionOrPredicate() != null) { builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.expressionOrPredicate(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } @@ -2255,18 +2252,18 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitExistsExpression(HqlParser.ExistsExpressionContext ctx) { + public QueryTokenStream visitExistsExpression(HqlParser.ExistsExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.simplePath() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.EXISTS())); + builder.append(QueryTokens.expression(ctx.EXISTS())); if (ctx.ELEMENTS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ELEMENTS())); + builder.append(QueryTokens.expression(ctx.ELEMENTS())); } else if (ctx.INDICES() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INDICES())); + builder.append(QueryTokens.expression(ctx.INDICES())); } builder.append(TOKEN_OPEN_PAREN); @@ -2275,7 +2272,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } else if (ctx.expression() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.EXISTS())); + builder.append(QueryTokens.expression(ctx.EXISTS())); builder.appendExpression(visit(ctx.expression())); } @@ -2283,7 +2280,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitCollectionExpression(HqlParser.CollectionExpressionContext ctx) { + public QueryTokenStream visitCollectionExpression(HqlParser.CollectionExpressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2291,21 +2288,21 @@ class HqlQueryRenderer extends HqlBaseVisitor { if (ctx.IS() != null) { - builder.append(JpaExpressionToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaExpressionToken.expression(ctx.EMPTY())); + builder.append(QueryTokens.expression(ctx.EMPTY())); } else if (ctx.MEMBER() != null) { if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaExpressionToken.expression(ctx.MEMBER())); - builder.append(JpaExpressionToken.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.MEMBER())); + builder.append(QueryTokens.expression(ctx.OF())); builder.append(visit(ctx.path())); } @@ -2313,27 +2310,27 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitInstantiationTarget(HqlParser.InstantiationTargetContext ctx) { + public QueryTokenStream visitInstantiationTarget(HqlParser.InstantiationTargetContext ctx) { if (ctx.LIST() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.LIST())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.LIST())); } else if (ctx.MAP() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.MAP())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.MAP())); } else if (ctx.simplePath() != null) { return visit(ctx.simplePath()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitInstantiationArguments(HqlParser.InstantiationArgumentsContext ctx) { - return QueryRendererBuilder.concat(ctx.instantiationArgument(), this::visit, TOKEN_COMMA); + public QueryTokenStream visitInstantiationArguments(HqlParser.InstantiationArgumentsContext ctx) { + return QueryTokenStream.concat(ctx.instantiationArgument(), this::visit, TOKEN_COMMA); } @Override - public QueryRendererBuilder visitInstantiationArgument(HqlParser.InstantiationArgumentContext ctx) { + public QueryTokenStream visitInstantiationArgument(HqlParser.InstantiationArgumentContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2351,37 +2348,37 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitParameterOrIntegerLiteral(HqlParser.ParameterOrIntegerLiteralContext ctx) { + public QueryTokenStream visitParameterOrIntegerLiteral(HqlParser.ParameterOrIntegerLiteralContext ctx) { if (ctx.parameter() != null) { return visit(ctx.parameter()); } else if (ctx.INTEGER_LITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTEGER_LITERAL())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitParameterOrNumberLiteral(HqlParser.ParameterOrNumberLiteralContext ctx) { + public QueryTokenStream visitParameterOrNumberLiteral(HqlParser.ParameterOrNumberLiteralContext ctx) { if (ctx.parameter() != null) { return visit(ctx.parameter()); } else if (ctx.numericLiteral() != null) { return visit(ctx.numericLiteral()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitVariable(HqlParser.VariableContext ctx) { + public QueryTokenStream visitVariable(HqlParser.VariableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.identifier() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.append(visit(ctx.identifier())); } else if (ctx.reservedWord() != null) { builder.append(visit(ctx.reservedWord())); @@ -2391,7 +2388,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitParameter(HqlParser.ParameterContext ctx) { + public QueryTokenStream visitParameter(HqlParser.ParameterContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -2404,7 +2401,7 @@ class HqlQueryRenderer extends HqlBaseVisitor { builder.append(TOKEN_QUESTION_MARK); if (ctx.INTEGER_LITERAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INTEGER_LITERAL())); + builder.append(QueryTokens.expression(ctx.INTEGER_LITERAL())); } } @@ -2412,37 +2409,37 @@ class HqlQueryRenderer extends HqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntityName(HqlParser.EntityNameContext ctx) { - return QueryRendererBuilder.concat(ctx.identifier(), this::visit, TOKEN_DOT); + public QueryTokenStream visitEntityName(HqlParser.EntityNameContext ctx) { + return QueryTokenStream.concat(ctx.identifier(), this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitIdentifier(HqlParser.IdentifierContext ctx) { + public QueryTokenStream visitIdentifier(HqlParser.IdentifierContext ctx) { if (ctx.reservedWord() != null) { return visit(ctx.reservedWord()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitCharacter(HqlParser.CharacterContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + public QueryTokenStream visitCharacter(HqlParser.CharacterContext ctx) { + return QueryRendererBuilder.from(QueryTokens.expression(ctx.CHARACTER())); } @Override - public QueryRendererBuilder visitFunctionName(HqlParser.FunctionNameContext ctx) { - return QueryRendererBuilder.concat(ctx.reservedWord(), this::visit, TOKEN_DOT); + public QueryTokenStream visitFunctionName(HqlParser.FunctionNameContext ctx) { + return QueryTokenStream.concat(ctx.reservedWord(), this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitReservedWord(HqlParser.ReservedWordContext ctx) { + public QueryTokenStream visitReservedWord(HqlParser.ReservedWordContext ctx) { if (ctx.IDENTIFICATION_VARIABLE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.IDENTIFICATION_VARIABLE())); + return QueryRendererBuilder.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE())); } else { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.f)); + return QueryRendererBuilder.from(QueryTokens.token(ctx.f)); } } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlSortedQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlSortedQueryTransformer.java index 42a7f43d4..fc2860404 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlSortedQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlSortedQueryTransformer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.List; @@ -63,7 +63,7 @@ class HqlSortedQueryTransformer extends HqlQueryRenderer { if (!isSubquery(ctx)) { if (ctx.queryOrder() != null) { - QueryRendererBuilder existingOrder = visit(ctx.queryOrder()); + QueryTokenStream existingOrder = visit(ctx.queryOrder()); if (sort.isSorted()) { builder.appendInline(existingOrder); } else { @@ -73,7 +73,7 @@ class HqlSortedQueryTransformer extends HqlQueryRenderer { if (sort.isSorted()) { - List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); + List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); if (ctx.queryOrder() != null) { @@ -96,39 +96,39 @@ class HqlSortedQueryTransformer extends HqlQueryRenderer { } @Override - public QueryRendererBuilder visitJoinPath(HqlParser.JoinPathContext ctx) { + public QueryTokenStream visitJoinPath(HqlParser.JoinPathContext ctx) { - QueryRendererBuilder builder = super.visitJoinPath(ctx); + QueryTokenStream tokens = super.visitJoinPath(ctx); if (ctx.variable() != null) { - transformerSupport.registerAlias(builder.lastToken()); + transformerSupport.registerAlias(tokens.getLast()); } - return builder; + return tokens; } @Override - public QueryRendererBuilder visitJoinSubquery(HqlParser.JoinSubqueryContext ctx) { + public QueryTokenStream visitJoinSubquery(HqlParser.JoinSubqueryContext ctx) { - QueryRendererBuilder builder = super.visitJoinSubquery(ctx); + QueryTokenStream tokens = super.visitJoinSubquery(ctx); - if (ctx.variable() != null) { - transformerSupport.registerAlias(builder.lastToken()); + if (ctx.variable() != null && !tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); } - return builder; + return tokens; } @Override - public QueryRendererBuilder visitVariable(HqlParser.VariableContext ctx) { + public QueryTokenStream visitVariable(HqlParser.VariableContext ctx) { - QueryRendererBuilder builder = super.visitVariable(ctx); + QueryTokenStream tokens = super.visitVariable(ctx); - if (ctx.identifier() != null) { - transformerSupport.registerAlias(builder.lastToken()); + if (ctx.identifier() != null && !tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); } - return builder; + return tokens; } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java index 18bb07dbc..37ec06e12 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JSqlParserQueryEnhancer.java @@ -18,11 +18,13 @@ package org.springframework.data.jpa.repository.query; import static org.springframework.data.jpa.repository.query.JSqlParserUtils.*; import static org.springframework.data.jpa.repository.query.QueryUtils.*; -import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Alias; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Function; +import net.sf.jsqlparser.parser.CCJSqlParser; import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.parser.ParseException; +import net.sf.jsqlparser.parser.feature.Feature; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.delete.Delete; @@ -99,11 +101,25 @@ public class JSqlParserQueryEnhancer implements QueryEnhancer { * @param query the query to parse * @return the parsed query */ - private static T parseStatement(String query, Class classOfT) { + static T parseStatement(String sql, Class classOfT) { try { - return classOfT.cast(CCJSqlParserUtil.parse(query)); - } catch (JSQLParserException e) { + + CCJSqlParser parser = CCJSqlParserUtil.newParser(sql); + boolean allowComplex = parser.getConfiguration().getAsBoolean(Feature.allowComplexParsing); + try { + return classOfT.cast(parser.withAllowComplexParsing(true).Statement()); + } catch (ParseException ex) { + if (allowComplex && CCJSqlParserUtil.getNestingDepth(sql) <= CCJSqlParserUtil.ALLOWED_NESTING_DEPTH) { + // beware: the parser must not be reused, but needs to be re-initiated + parser = CCJSqlParserUtil.newParser(sql); + return classOfT.cast(parser.withAllowComplexParsing(true).Statement()); + } else { + throw ex; + } + } + + } catch (ParseException e) { throw new IllegalArgumentException("The query you provided is not a valid SQL Query", e); } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java index 2aaea143c..c677b2efc 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryEnhancer.java @@ -61,8 +61,8 @@ class JpaQueryEnhancer implements QueryEnhancer { this.countQueryFunction = countQueryFunction; this.introspector.visit(context); - List tokens = introspector.getProjection(); - this.projection = tokens.isEmpty() ? "" : QueryRenderer.TokenRenderer.render(tokens); + List tokens = introspector.getProjection(); + this.projection = tokens.isEmpty() ? "" : new QueryRenderer.TokenRenderer(tokens).render(); } static

ParserRuleContext parse(String query, Function lexerFactoryFunction, @@ -176,7 +176,7 @@ class JpaQueryEnhancer implements QueryEnhancer { } /** - * Look up the {@link DeclaredQuery} from the {@link JpaQueryParser}. + * Look up the {@link DeclaredQuery} from the query parser. */ @Override public DeclaredQuery getQuery() { diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryParsingToken.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryParsingToken.java deleted file mode 100644 index 1c7ef0651..000000000 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryParsingToken.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright 2022-2024 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.jpa.repository.query; - -import java.util.function.Supplier; - -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.tree.TerminalNode; - -/** - * A value type used to represent a JPA query token. NOTE: Sometimes the token's value is based upon a value found later - * in the parsing process, so the text itself is wrapped in a {@link Supplier}. - * - * @author Greg Turnquist - * @author Christoph Strobl - * @since 3.1 - */ -class JpaQueryParsingToken implements QueryToken { - - /** - * Commonly use tokens. - */ - static final JpaQueryParsingToken TOKEN_NONE = JpaQueryParsingToken.token(""); - static final JpaQueryParsingToken TOKEN_COMMA = JpaQueryParsingToken.token(", "); - static final JpaQueryParsingToken TOKEN_SPACE = JpaQueryParsingToken.token(" "); - static final JpaQueryParsingToken TOKEN_DOT = JpaQueryParsingToken.token("."); - static final JpaQueryParsingToken TOKEN_EQUALS = JpaQueryParsingToken.token(" = "); - static final JpaQueryParsingToken TOKEN_OPEN_PAREN = JpaQueryParsingToken.token("("); - static final JpaQueryParsingToken TOKEN_CLOSE_PAREN = JpaQueryParsingToken.token(")"); - static final JpaQueryParsingToken TOKEN_ORDER_BY = JpaQueryParsingToken.expression("order by"); - static final JpaQueryParsingToken TOKEN_LOWER_FUNC = JpaQueryParsingToken.token("lower("); - static final JpaQueryParsingToken TOKEN_SELECT_COUNT = JpaQueryParsingToken.token("select count("); - static final JpaQueryParsingToken TOKEN_COUNT_FUNC = JpaQueryParsingToken.token("count("); - static final JpaQueryParsingToken TOKEN_DOUBLE_PIPE = JpaQueryParsingToken.token(" || "); - static final JpaQueryParsingToken TOKEN_OPEN_SQUARE_BRACKET = JpaQueryParsingToken.token("["); - static final JpaQueryParsingToken TOKEN_CLOSE_SQUARE_BRACKET = JpaQueryParsingToken.token("]"); - static final JpaQueryParsingToken TOKEN_COLON = JpaQueryParsingToken.token(":"); - static final JpaQueryParsingToken TOKEN_QUESTION_MARK = JpaQueryParsingToken.token("?"); - static final JpaQueryParsingToken TOKEN_OPEN_BRACE = JpaQueryParsingToken.token("{"); - static final JpaQueryParsingToken TOKEN_CLOSE_BRACE = JpaQueryParsingToken.token("}"); - static final JpaQueryParsingToken TOKEN_DOUBLE_UNDERSCORE = JpaQueryParsingToken.token("__"); - static final JpaQueryParsingToken TOKEN_AS = JpaQueryParsingToken.expression("AS"); - static final JpaQueryParsingToken TOKEN_DESC = JpaQueryParsingToken.expression("desc"); - static final JpaQueryParsingToken TOKEN_ASC = JpaQueryParsingToken.expression("asc"); - static final JpaQueryParsingToken TOKEN_WITH = JpaQueryParsingToken.expression("WITH"); - static final JpaQueryParsingToken TOKEN_NOT = JpaQueryParsingToken.expression("NOT"); - static final JpaQueryParsingToken TOKEN_MATERIALIZED = JpaQueryParsingToken.expression("materialized"); - static final JpaQueryParsingToken TOKEN_NULLS = JpaQueryParsingToken.expression("NULLS"); - static final JpaQueryParsingToken TOKEN_FIRST = JpaQueryParsingToken.expression("FIRST"); - static final JpaQueryParsingToken TOKEN_LAST = JpaQueryParsingToken.expression("LAST"); - - /** - * The text value of the token. - */ - private final String token; - - JpaQueryParsingToken(String token) { - this.token = token; - } - - static JpaQueryParsingToken token(TerminalNode node) { - return token(node.getText()); - } - - static JpaQueryParsingToken token(Token token) { - return token(token.getText()); - } - - static JpaQueryParsingToken token(String token) { - return new JpaQueryParsingToken(token); - } - - static JpaQueryParsingToken expression(String expression) { - return new JpaExpressionToken(expression); - } - - static JpaQueryParsingToken expression(Token token) { - return expression(token.getText()); - } - - static JpaQueryParsingToken expression(TerminalNode node) { - return expression(node.getText()); - } - - static JpaQueryParsingToken ventilated(Token op) { - return new JpaQueryParsingToken(" " + op.getText() + " "); - } - - String getToken() { - return value(); - } - - public String value() { - return token; - } - - /** - * Compare whether the given {@link JpaQueryParsingToken token} is equal to the one held by this instance. - * - * @param token must not be {@literal null}. - * @return {@literal true} if both tokens are equals (using case-insensitive comparison). - */ - public boolean isA(QueryToken token) { - return token.value().equalsIgnoreCase(this.value()); - } - - @Override - public String toString() { - return getToken(); - } - - static class JpaExpressionToken extends JpaQueryParsingToken { - - JpaExpressionToken(String token) { - super(token); - } - - public boolean isExpression() { - return true; - } - } -} diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryTransformerSupport.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryTransformerSupport.java index 3f8737424..c5e4cacba 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryTransformerSupport.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryTransformerSupport.java @@ -1,6 +1,6 @@ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.HashSet; @@ -53,9 +53,9 @@ class JpaQueryTransformerSupport { * @param sort * @return */ - List orderBy(String primaryFromAlias, Sort sort) { + List orderBy(String primaryFromAlias, Sort sort) { - List tokens = new ArrayList<>(); + List tokens = new ArrayList<>(); sort.forEach(order -> { @@ -64,7 +64,7 @@ class JpaQueryTransformerSupport { StringBuilder builder = new StringBuilder(); if (order.isIgnoreCase()) { - builder.append(TOKEN_LOWER_FUNC.getToken()); + builder.append(TOKEN_LOWER_FUNC.value()); } builder.append(generateOrderByArgument(primaryFromAlias, order)); @@ -80,7 +80,7 @@ class JpaQueryTransformerSupport { tokens.add(TOKEN_COMMA); } - tokens.add(JpaQueryParsingToken.token(builder.toString())); + tokens.add(QueryTokens.token(builder.toString())); }); return tokens; 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 392c2fd5f..052367b2f 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 @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +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; @@ -66,24 +66,24 @@ class JpqlCountQueryTransformer extends JpqlQueryRenderer { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); builder.append(TOKEN_COUNT_FUNC); if (countProjection != null) { - builder.append(JpaQueryParsingToken.token(countProjection)); + builder.append(QueryTokens.token(countProjection)); } QueryRendererBuilder nested = QueryRenderer.builder(); if (ctx.DISTINCT() != null) { - nested.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + nested.append(QueryTokens.expression(ctx.DISTINCT())); } if (countProjection == null) { if (ctx.DISTINCT() != null) { - QueryRendererBuilder selectionListbuilder = QueryRendererBuilder.concat(ctx.select_item(), this::visit, + QueryTokenStream selectionListbuilder = QueryTokenStream.concat(ctx.select_item(), this::visit, TOKEN_COMMA); CountSelectionTokenStream countSelection = QueryTransformers @@ -91,13 +91,13 @@ class JpqlCountQueryTransformer extends JpqlQueryRenderer { if (countSelection.requiresPrimaryAlias()) { // constructor - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } else { // keep all the select items to distinct against nested.append(countSelection); } } else { - nested.append(new JpaQueryParsingToken(primaryFromAlias)); + nested.append(QueryTokens.token(primaryFromAlias)); } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryIntrospector.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryIntrospector.java index d02030a0b..1919fca87 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryIntrospector.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryIntrospector.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.Collections; @@ -34,7 +34,7 @@ class JpqlQueryIntrospector extends JpqlBaseVisitor implements ParsedQuery private final JpqlQueryRenderer renderer = new JpqlQueryRenderer(); private @Nullable String primaryFromAlias = null; - private @Nullable List projection; + private @Nullable List projection; private boolean projectionProcessed; private boolean hasConstructorExpression = false; @@ -43,7 +43,7 @@ class JpqlQueryIntrospector extends JpqlBaseVisitor implements ParsedQuery return primaryFromAlias; } - public List getProjection() { + public List getProjection() { return projection == null ? Collections.emptyList() : projection; } @@ -66,7 +66,7 @@ class JpqlQueryIntrospector extends JpqlBaseVisitor implements ParsedQuery public Void visitSelect_clause(JpqlParser.Select_clauseContext ctx) { List selections = ctx.select_item(); - List selectItemTokens = new ArrayList<>(selections.size() * 2); + List selectItemTokens = new ArrayList<>(selections.size() * 2); for (JpqlParser.Select_itemContext selection : selections) { @@ -74,7 +74,7 @@ class JpqlQueryIntrospector extends JpqlBaseVisitor implements ParsedQuery selectItemTokens.add(TOKEN_COMMA); } - selectItemTokens.add(JpaQueryParsingToken.token(renderer.visitSelect_item(selection).build().render())); + selectItemTokens.add(QueryTokens.token(QueryRenderer.from(renderer.visitSelect_item(selection)).render())); } if (!projectionProcessed) { diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java index 3ff0a01f5..fe8fac1bf 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.List; @@ -33,15 +33,15 @@ import org.springframework.data.jpa.repository.query.QueryRenderer.QueryRenderer * @since 3.1 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode" }) -class JpqlQueryRenderer extends JpqlBaseVisitor { +class JpqlQueryRenderer extends JpqlBaseVisitor { @Override - public QueryRendererBuilder visitStart(JpqlParser.StartContext ctx) { + public QueryTokenStream visitStart(JpqlParser.StartContext ctx) { return visit(ctx.ql_statement()); } @Override - public QueryRendererBuilder visitQl_statement(JpqlParser.Ql_statementContext ctx) { + public QueryTokenStream visitQl_statement(JpqlParser.Ql_statementContext ctx) { if (ctx.select_statement() != null) { return visit(ctx.select_statement()); @@ -50,12 +50,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (ctx.delete_statement() != null) { return visit(ctx.delete_statement()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSelect_statement(JpqlParser.Select_statementContext ctx) { + public QueryTokenStream visitSelect_statement(JpqlParser.Select_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -82,7 +82,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitUpdate_statement(JpqlParser.Update_statementContext ctx) { + public QueryTokenStream visitUpdate_statement(JpqlParser.Update_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -96,7 +96,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitDelete_statement(JpqlParser.Delete_statementContext ctx) { + public QueryTokenStream visitDelete_statement(JpqlParser.Delete_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -110,17 +110,17 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitFrom_clause(JpqlParser.From_clauseContext ctx) { + public QueryTokenStream visitFrom_clause(JpqlParser.From_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendInline(visit(ctx.identification_variable_declaration())); if (!ctx.identificationVariableDeclarationOrCollectionMemberDeclaration().isEmpty()) { builder.append(TOKEN_COMMA); - builder.appendExpression(QueryRendererBuilder + builder.appendExpression(QueryTokenStream .concat(ctx.identificationVariableDeclarationOrCollectionMemberDeclaration(), this::visit, TOKEN_COMMA)); } @@ -128,7 +128,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitIdentificationVariableDeclarationOrCollectionMemberDeclaration( + public QueryTokenStream visitIdentificationVariableDeclarationOrCollectionMemberDeclaration( JpqlParser.IdentificationVariableDeclarationOrCollectionMemberDeclarationContext ctx) { if (ctx.identification_variable_declaration() != null) { @@ -136,16 +136,15 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (ctx.collection_member_declaration() != null) { return visit(ctx.collection_member_declaration()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitIdentification_variable_declaration( + public QueryTokenStream visitIdentification_variable_declaration( JpqlParser.Identification_variable_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.appendExpression(visit(ctx.range_variable_declaration())); ctx.join().forEach(joinContext -> { @@ -160,30 +159,30 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx) { + public QueryTokenStream visitRange_variable_declaration(JpqlParser.Range_variable_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.entity_name())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } - builder.append(visit(ctx.identification_variable())); + builder.appendExpression(visit(ctx.identification_variable())); return builder; } @Override - public QueryRendererBuilder visitJoin(JpqlParser.JoinContext ctx) { + public QueryTokenStream visitJoin(JpqlParser.JoinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.join_spec())); builder.append(visit(ctx.join_association_path_expression())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } builder.append(visit(ctx.identification_variable())); if (ctx.join_condition() != null) { @@ -194,51 +193,51 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitFetch_join(JpqlParser.Fetch_joinContext ctx) { + public QueryTokenStream visitFetch_join(JpqlParser.Fetch_joinContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.join_spec())); - builder.append(JpaQueryParsingToken.expression(ctx.FETCH())); + builder.append(QueryTokens.expression(ctx.FETCH())); builder.append(visit(ctx.join_association_path_expression())); return builder; } @Override - public QueryRendererBuilder visitJoin_spec(JpqlParser.Join_specContext ctx) { + public QueryTokenStream visitJoin_spec(JpqlParser.Join_specContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LEFT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LEFT())); + builder.append(QueryTokens.expression(ctx.LEFT())); } if (ctx.OUTER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OUTER())); + builder.append(QueryTokens.expression(ctx.OUTER())); } if (ctx.INNER() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.INNER())); + builder.append(QueryTokens.expression(ctx.INNER())); } if (ctx.JOIN() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.JOIN())); + builder.append(QueryTokens.expression(ctx.JOIN())); } return builder; } @Override - public QueryRendererBuilder visitJoin_condition(JpqlParser.Join_conditionContext ctx) { + public QueryTokenStream visitJoin_condition(JpqlParser.Join_conditionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ON())); + builder.append(QueryTokens.expression(ctx.ON())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitJoin_association_path_expression( + public QueryTokenStream visitJoin_association_path_expression( JpqlParser.Join_association_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -253,18 +252,18 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else { if (ctx.join_collection_valued_path_expression() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.join_collection_valued_path_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.join_single_valued_path_expression() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.join_single_valued_path_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); } @@ -274,7 +273,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitJoin_collection_valued_path_expression( + public QueryTokenStream visitJoin_collection_valued_path_expression( JpqlParser.Join_collection_valued_path_expressionContext ctx) { List items = new ArrayList<>(3 + ctx.single_valued_embeddable_object_field().size()); @@ -283,11 +282,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { items.addAll(ctx.single_valued_embeddable_object_field()); items.add(ctx.collection_valued_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitJoin_single_valued_path_expression( + public QueryTokenStream visitJoin_single_valued_path_expression( JpqlParser.Join_single_valued_path_expressionContext ctx) { List items = new ArrayList<>(3 + ctx.single_valued_embeddable_object_field().size()); @@ -296,21 +295,21 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { items.addAll(ctx.single_valued_embeddable_object_field()); items.add(ctx.single_valued_object_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx) { + public QueryTokenStream visitCollection_member_declaration(JpqlParser.Collection_member_declarationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.IN())); + builder.append(QueryTokens.token(ctx.IN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.collection_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } builder.appendExpression(visit(ctx.identification_variable())); @@ -319,7 +318,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitQualified_identification_variable( + public QueryTokenStream visitQualified_identification_variable( JpqlParser.Qualified_identification_variableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -328,7 +327,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(visit(ctx.map_field_identification_variable())); } else if (ctx.identification_variable() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ENTRY())); + builder.append(QueryTokens.expression(ctx.ENTRY())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -338,20 +337,20 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitMap_field_identification_variable( + public QueryTokenStream visitMap_field_identification_variable( JpqlParser.Map_field_identification_variableContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.KEY() != null) { - builder.append(JpaQueryParsingToken.token(ctx.KEY())); + builder.append(QueryTokens.token(ctx.KEY())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.VALUE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.VALUE())); + builder.append(QueryTokens.token(ctx.VALUE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -361,7 +360,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx) { + public QueryTokenStream visitSingle_valued_path_expression(JpqlParser.Single_valued_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -369,10 +368,10 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(visit(ctx.qualified_identification_variable())); } else if (ctx.qualified_identification_variable() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.qualified_identification_variable())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.state_field_path_expression() != null) { @@ -385,8 +384,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneral_identification_variable( - JpqlParser.General_identification_variableContext ctx) { + public QueryTokenStream visitGeneral_identification_variable(JpqlParser.General_identification_variableContext ctx) { if (ctx.identification_variable() != null) { return visit(ctx.identification_variable()); @@ -394,11 +392,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.map_field_identification_variable()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitGeneral_subpath(JpqlParser.General_subpathContext ctx) { + public QueryTokenStream visitGeneral_subpath(JpqlParser.General_subpathContext ctx) { if (ctx.simple_subpath() != null) { return visit(ctx.simple_subpath()); @@ -408,31 +406,31 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { items.add(ctx.treated_subpath()); items.addAll(ctx.single_valued_object_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitSimple_subpath(JpqlParser.Simple_subpathContext ctx) { + public QueryTokenStream visitSimple_subpath(JpqlParser.Simple_subpathContext ctx) { List items = new ArrayList<>(1 + ctx.single_valued_object_field().size()); items.add(ctx.general_identification_variable()); items.addAll(ctx.single_valued_object_field()); - return QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT); + return QueryTokenStream.concat(items, this::visit, TOKEN_DOT); } @Override - public QueryRendererBuilder visitTreated_subpath(JpqlParser.Treated_subpathContext ctx) { + public QueryTokenStream visitTreated_subpath(JpqlParser.Treated_subpathContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TREAT())); + builder.append(QueryTokens.token(ctx.TREAT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.general_subpath())); - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); builder.appendInline(visit(ctx.subtype())); builder.append(TOKEN_CLOSE_PAREN); @@ -440,7 +438,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx) { + public QueryTokenStream visitState_field_path_expression(JpqlParser.State_field_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -452,7 +450,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx) { + public QueryTokenStream visitState_valued_path_expression(JpqlParser.State_valued_path_expressionContext ctx) { if (ctx.state_field_path_expression() != null) { return visit(ctx.state_field_path_expression()); @@ -460,11 +458,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.general_identification_variable()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitSingle_valued_object_path_expression( + public QueryTokenStream visitSingle_valued_object_path_expression( JpqlParser.Single_valued_object_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -477,7 +475,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitCollection_valued_path_expression( + public QueryTokenStream visitCollection_valued_path_expression( JpqlParser.Collection_valued_path_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -490,29 +488,29 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitUpdate_clause(JpqlParser.Update_clauseContext ctx) { + public QueryTokenStream visitUpdate_clause(JpqlParser.Update_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.UPDATE())); + builder.append(QueryTokens.expression(ctx.UPDATE())); builder.appendExpression(visit(ctx.entity_name())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); } - builder.append(JpaQueryParsingToken.expression(ctx.SET())); - builder.append(QueryRendererBuilder.concat(ctx.update_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.SET())); + builder.append(QueryTokenStream.concat(ctx.update_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitUpdate_item(JpqlParser.Update_itemContext ctx) { + public QueryTokenStream visitUpdate_item(JpqlParser.Update_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -530,7 +528,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { items.add(ctx.single_valued_object_field()); } - builder.appendInline(QueryRendererBuilder.concat(items, this::visit, TOKEN_DOT)); + builder.appendInline(QueryTokenStream.concat(items, this::visit, TOKEN_DOT)); builder.append(TOKEN_EQUALS); builder.appendInline(visit(ctx.new_value())); @@ -538,29 +536,29 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitNew_value(JpqlParser.New_valueContext ctx) { + public QueryTokenStream visitNew_value(JpqlParser.New_valueContext ctx) { if (ctx.scalar_expression() != null) { return visit(ctx.scalar_expression()); } else if (ctx.simple_entity_expression() != null) { return visit(ctx.simple_entity_expression()); } else if (ctx.NULL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.NULL())); + return QueryRenderer.from(QueryTokens.expression(ctx.NULL())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitDelete_clause(JpqlParser.Delete_clauseContext ctx) { + public QueryTokenStream visitDelete_clause(JpqlParser.Delete_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.DELETE())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.DELETE())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendExpression(visit(ctx.entity_name())); if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.identification_variable() != null) { builder.appendExpression(visit(ctx.identification_variable())); @@ -570,23 +568,23 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelect_clause(JpqlParser.Select_clauseContext ctx) { + public QueryTokenStream visitSelect_clause(JpqlParser.Select_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } - builder.append(QueryRendererBuilder.concat(ctx.select_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokenStream.concat(ctx.select_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitSelect_item(JpqlParser.Select_itemContext ctx) { + public QueryTokenStream visitSelect_item(JpqlParser.Select_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -595,7 +593,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { if (ctx.AS() != null || ctx.result_variable() != null) { if (ctx.AS() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.AS())); + builder.append(QueryTokens.expression(ctx.AS())); } if (ctx.result_variable() != null) { @@ -607,7 +605,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSelect_expression(JpqlParser.Select_expressionContext ctx) { + public QueryTokenStream visitSelect_expression(JpqlParser.Select_expressionContext ctx) { if (ctx.single_valued_path_expression() != null) { return visit(ctx.single_valued_path_expression()); @@ -623,7 +621,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.OBJECT())); + builder.append(QueryTokens.token(ctx.OBJECT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -633,26 +631,26 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (ctx.constructor_expression() != null) { return visit(ctx.constructor_expression()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitConstructor_expression(JpqlParser.Constructor_expressionContext ctx) { + public QueryTokenStream visitConstructor_expression(JpqlParser.Constructor_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.NEW())); + builder.append(QueryTokens.expression(ctx.NEW())); builder.append(visit(ctx.constructor_name())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.constructor_item(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.constructor_item(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitConstructor_item(JpqlParser.Constructor_itemContext ctx) { + public QueryTokenStream visitConstructor_item(JpqlParser.Constructor_itemContext ctx) { if (ctx.single_valued_path_expression() != null) { return visit(ctx.single_valued_path_expression()); @@ -666,43 +664,43 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.literal()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitAggregate_expression(JpqlParser.Aggregate_expressionContext ctx) { + public QueryTokenStream visitAggregate_expression(JpqlParser.Aggregate_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.AVG() != null || ctx.MAX() != null || ctx.MIN() != null || ctx.SUM() != null) { if (ctx.AVG() != null) { - builder.append(JpaQueryParsingToken.token(ctx.AVG())); + builder.append(QueryTokens.token(ctx.AVG())); } if (ctx.MAX() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MAX())); + builder.append(QueryTokens.token(ctx.MAX())); } if (ctx.MIN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MIN())); + builder.append(QueryTokens.token(ctx.MIN())); } if (ctx.SUM() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SUM())); + builder.append(QueryTokens.token(ctx.SUM())); } builder.append(TOKEN_OPEN_PAREN); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.appendInline(visit(ctx.state_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.COUNT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.COUNT())); + builder.append(QueryTokens.token(ctx.COUNT())); builder.append(TOKEN_OPEN_PAREN); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } if (ctx.identification_variable() != null) { builder.appendInline(visit(ctx.identification_variable())); @@ -720,30 +718,30 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitWhere_clause(JpqlParser.Where_clauseContext ctx) { + public QueryTokenStream visitWhere_clause(JpqlParser.Where_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHERE())); + builder.append(QueryTokens.expression(ctx.WHERE())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitGroupby_clause(JpqlParser.Groupby_clauseContext ctx) { + public QueryTokenStream visitGroupby_clause(JpqlParser.Groupby_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.GROUP())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.groupby_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.GROUP())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.appendExpression(QueryTokenStream.concat(ctx.groupby_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitGroupby_item(JpqlParser.Groupby_itemContext ctx) { + public QueryTokenStream visitGroupby_item(JpqlParser.Groupby_itemContext ctx) { if (ctx.single_valued_path_expression() != null) { return visit(ctx.single_valued_path_expression()); @@ -751,34 +749,34 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.identification_variable()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitHaving_clause(JpqlParser.Having_clauseContext ctx) { + public QueryTokenStream visitHaving_clause(JpqlParser.Having_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.HAVING())); + builder.append(QueryTokens.expression(ctx.HAVING())); builder.appendExpression(visit(ctx.conditional_expression())); return builder; } @Override - public QueryRendererBuilder visitOrderby_clause(JpqlParser.Orderby_clauseContext ctx) { + public QueryTokenStream visitOrderby_clause(JpqlParser.Orderby_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.ORDER())); - builder.append(JpaQueryParsingToken.expression(ctx.BY())); - builder.appendExpression(QueryRendererBuilder.concat(ctx.orderby_item(), this::visit, TOKEN_COMMA)); + builder.append(QueryTokens.expression(ctx.ORDER())); + builder.append(QueryTokens.expression(ctx.BY())); + builder.appendExpression(QueryTokenStream.concat(ctx.orderby_item(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitOrderby_item(JpqlParser.Orderby_itemContext ctx) { + public QueryTokenStream visitOrderby_item(JpqlParser.Orderby_itemContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -791,17 +789,17 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } if (ctx.ASC() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ASC())); + builder.append(QueryTokens.expression(ctx.ASC())); } if (ctx.DESC() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DESC())); + builder.append(QueryTokens.expression(ctx.DESC())); } return builder; } @Override - public QueryRendererBuilder visitSubquery(JpqlParser.SubqueryContext ctx) { + public QueryTokenStream visitSubquery(JpqlParser.SubqueryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -822,57 +820,57 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx) { + public QueryTokenStream visitSubquery_from_clause(JpqlParser.Subquery_from_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendExpression( - QueryRendererBuilder.concat(ctx.subselect_identification_variable_declaration(), this::visit, TOKEN_COMMA)); + QueryTokenStream.concat(ctx.subselect_identification_variable_declaration(), this::visit, TOKEN_COMMA)); return builder; } @Override - public QueryRendererBuilder visitSubselect_identification_variable_declaration( + public QueryTokenStream visitSubselect_identification_variable_declaration( JpqlParser.Subselect_identification_variable_declarationContext ctx) { return super.visitSubselect_identification_variable_declaration(ctx); } @Override - public QueryRendererBuilder visitDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx) { + public QueryTokenStream visitDerived_path_expression(JpqlParser.Derived_path_expressionContext ctx) { return super.visitDerived_path_expression(ctx); } @Override - public QueryRendererBuilder visitGeneral_derived_path(JpqlParser.General_derived_pathContext ctx) { + public QueryTokenStream visitGeneral_derived_path(JpqlParser.General_derived_pathContext ctx) { return super.visitGeneral_derived_path(ctx); } @Override - public QueryRendererBuilder visitSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx) { + public QueryTokenStream visitSimple_derived_path(JpqlParser.Simple_derived_pathContext ctx) { return super.visitSimple_derived_path(ctx); } @Override - public QueryRendererBuilder visitTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx) { + public QueryTokenStream visitTreated_derived_path(JpqlParser.Treated_derived_pathContext ctx) { return super.visitTreated_derived_path(ctx); } @Override - public QueryRendererBuilder visitDerived_collection_member_declaration( + public QueryTokenStream visitDerived_collection_member_declaration( JpqlParser.Derived_collection_member_declarationContext ctx) { return super.visitDerived_collection_member_declaration(ctx); } @Override - public QueryRendererBuilder visitSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx) { + public QueryTokenStream visitSimple_select_clause(JpqlParser.Simple_select_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.SELECT())); + builder.append(QueryTokens.expression(ctx.SELECT())); if (ctx.DISTINCT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DISTINCT())); + builder.append(QueryTokens.expression(ctx.DISTINCT())); } builder.appendExpression(visit(ctx.simple_select_expression())); @@ -880,7 +878,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx) { + public QueryTokenStream visitSimple_select_expression(JpqlParser.Simple_select_expressionContext ctx) { if (ctx.single_valued_path_expression() != null) { return visit(ctx.single_valued_path_expression()); @@ -892,11 +890,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.identification_variable()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitScalar_expression(JpqlParser.Scalar_expressionContext ctx) { + public QueryTokenStream visitScalar_expression(JpqlParser.Scalar_expressionContext ctx) { if (ctx.arithmetic_expression() != null) { return visit(ctx.arithmetic_expression()); @@ -914,17 +912,17 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.entity_type_expression()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitConditional_expression(JpqlParser.Conditional_expressionContext ctx) { + public QueryTokenStream visitConditional_expression(JpqlParser.Conditional_expressionContext ctx) { if (ctx.conditional_expression() != null) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.conditional_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.OR())); + builder.append(QueryTokens.expression(ctx.OR())); builder.appendExpression(visit(ctx.conditional_term())); return builder; @@ -934,13 +932,13 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_term(JpqlParser.Conditional_termContext ctx) { + public QueryTokenStream visitConditional_term(JpqlParser.Conditional_termContext ctx) { if (ctx.conditional_term() != null) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.conditional_term())); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.conditional_factor())); return builder; @@ -950,12 +948,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_factor(JpqlParser.Conditional_factorContext ctx) { + public QueryTokenStream visitConditional_factor(JpqlParser.Conditional_factorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } builder.append(visit(ctx.conditional_primary())); @@ -964,7 +962,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitConditional_primary(JpqlParser.Conditional_primaryContext ctx) { + public QueryTokenStream visitConditional_primary(JpqlParser.Conditional_primaryContext ctx) { if (ctx.simple_cond_expression() != null) { return visit(ctx.simple_cond_expression()); @@ -983,7 +981,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx) { + public QueryTokenStream visitSimple_cond_expression(JpqlParser.Simple_cond_expressionContext ctx) { if (ctx.comparison_expression() != null) { return visit(ctx.comparison_expression()); @@ -1003,11 +1001,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.exists_expression()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitBetween_expression(JpqlParser.Between_expressionContext ctx) { + public QueryTokenStream visitBetween_expression(JpqlParser.Between_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1016,12 +1014,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.arithmetic_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.arithmetic_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.arithmetic_expression(2))); } else if (ctx.string_expression(0) != null) { @@ -1029,12 +1027,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.string_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.string_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.string_expression(2))); } else if (ctx.datetime_expression(0) != null) { @@ -1042,12 +1040,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.datetime_expression(0))); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.BETWEEN())); + builder.append(QueryTokens.expression(ctx.BETWEEN())); builder.appendExpression(visit(ctx.datetime_expression(1))); - builder.append(JpaQueryParsingToken.expression(ctx.AND())); + builder.append(QueryTokens.expression(ctx.AND())); builder.appendExpression(visit(ctx.datetime_expression(2))); } @@ -1055,7 +1053,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitIn_expression(JpqlParser.In_expressionContext ctx) { + public QueryTokenStream visitIn_expression(JpqlParser.In_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1066,16 +1064,16 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.type_discriminator())); } if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } if (ctx.IN() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.IN())); + builder.append(QueryTokens.expression(ctx.IN())); } if (ctx.in_item() != null && !ctx.in_item().isEmpty()) { builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.in_item(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.in_item(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.subquery() != null) { @@ -1090,7 +1088,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitIn_item(JpqlParser.In_itemContext ctx) { + public QueryTokenStream visitIn_item(JpqlParser.In_itemContext ctx) { if (ctx.literal() != null) { return visit(ctx.literal()); @@ -1098,25 +1096,25 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.single_valued_input_parameter()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitLike_expression(JpqlParser.Like_expressionContext ctx) { + public QueryTokenStream visitLike_expression(JpqlParser.Like_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.string_expression())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.LIKE())); + builder.append(QueryTokens.expression(ctx.LIKE())); builder.appendExpression(visit(ctx.pattern_value())); if (ctx.ESCAPE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ESCAPE())); + builder.append(QueryTokens.expression(ctx.ESCAPE())); builder.appendExpression(visit(ctx.escape_character())); } @@ -1124,7 +1122,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx) { + public QueryTokenStream visitNull_comparison_expression(JpqlParser.Null_comparison_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1134,43 +1132,43 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.input_parameter())); } - builder.append(JpaQueryParsingToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.NULL())); + builder.append(QueryTokens.expression(ctx.NULL())); return builder; } @Override - public QueryRendererBuilder visitEmpty_collection_comparison_expression( + public QueryTokenStream visitEmpty_collection_comparison_expression( JpqlParser.Empty_collection_comparison_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.collection_valued_path_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.IS())); + builder.append(QueryTokens.expression(ctx.IS())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.EMPTY())); + builder.append(QueryTokens.expression(ctx.EMPTY())); return builder; } @Override - public QueryRendererBuilder visitCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx) { + public QueryTokenStream visitCollection_member_expression(JpqlParser.Collection_member_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendExpression(visit(ctx.entity_or_value_expression())); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.MEMBER())); + builder.append(QueryTokens.expression(ctx.MEMBER())); if (ctx.OF() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.OF())); + builder.append(QueryTokens.expression(ctx.OF())); } builder.append(visit(ctx.collection_valued_path_expression())); @@ -1178,7 +1176,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx) { + public QueryTokenStream visitEntity_or_value_expression(JpqlParser.Entity_or_value_expressionContext ctx) { if (ctx.single_valued_object_path_expression() != null) { return visit(ctx.single_valued_object_path_expression()); @@ -1188,11 +1186,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.simple_entity_or_value_expression()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitSimple_entity_or_value_expression( + public QueryTokenStream visitSimple_entity_or_value_expression( JpqlParser.Simple_entity_or_value_expressionContext ctx) { if (ctx.identification_variable() != null) { @@ -1203,19 +1201,19 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.literal()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitExists_expression(JpqlParser.Exists_expressionContext ctx) { + public QueryTokenStream visitExists_expression(JpqlParser.Exists_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.NOT() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.NOT())); + builder.append(QueryTokens.expression(ctx.NOT())); } - builder.append(JpaQueryParsingToken.expression(ctx.EXISTS())); + builder.append(QueryTokens.expression(ctx.EXISTS())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.subquery())); builder.append(TOKEN_CLOSE_PAREN); @@ -1224,16 +1222,16 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx) { + public QueryTokenStream visitAll_or_any_expression(JpqlParser.All_or_any_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.ALL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ALL())); + builder.append(QueryTokens.expression(ctx.ALL())); } else if (ctx.ANY() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.ANY())); + builder.append(QueryTokens.expression(ctx.ANY())); } else if (ctx.SOME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.SOME())); + builder.append(QueryTokens.expression(ctx.SOME())); } builder.append(TOKEN_OPEN_PAREN); @@ -1244,7 +1242,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitComparison_expression(JpqlParser.Comparison_expressionContext ctx) { + public QueryTokenStream visitComparison_expression(JpqlParser.Comparison_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1261,7 +1259,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (!ctx.boolean_expression().isEmpty()) { builder.appendInline(visit(ctx.boolean_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); if (ctx.boolean_expression(1) != null) { builder.appendExpression(visit(ctx.boolean_expression(1))); @@ -1271,7 +1269,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (!ctx.enum_expression().isEmpty()) { builder.appendInline(visit(ctx.enum_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); if (ctx.enum_expression(1) != null) { builder.appendExpression(visit(ctx.enum_expression(1))); @@ -1291,7 +1289,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (!ctx.entity_expression().isEmpty()) { builder.appendInline(visit(ctx.entity_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); if (ctx.entity_expression(1) != null) { builder.appendExpression(visit(ctx.entity_expression(1))); @@ -1311,7 +1309,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } else if (!ctx.entity_type_expression().isEmpty()) { builder.appendInline(visit(ctx.entity_type_expression(0))); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.appendExpression(visit(ctx.entity_type_expression(1))); } @@ -1319,18 +1317,18 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitComparison_operator(JpqlParser.Comparison_operatorContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.op)); + public QueryTokenStream visitComparison_operator(JpqlParser.Comparison_operatorContext ctx) { + return QueryRenderer.from(QueryTokens.token(ctx.op)); } @Override - public QueryRendererBuilder visitArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx) { + public QueryTokenStream visitArithmetic_expression(JpqlParser.Arithmetic_expressionContext ctx) { if (ctx.arithmetic_expression() != null) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.append(visit(ctx.arithmetic_expression())); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.append(visit(ctx.arithmetic_term())); return builder; @@ -1340,13 +1338,13 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_term(JpqlParser.Arithmetic_termContext ctx) { + public QueryTokenStream visitArithmetic_term(JpqlParser.Arithmetic_termContext ctx) { if (ctx.arithmetic_term() != null) { QueryRendererBuilder builder = QueryRenderer.builder(); builder.appendInline(visit(ctx.arithmetic_term())); - builder.append(JpaQueryParsingToken.ventilated(ctx.op)); + builder.append(QueryTokens.ventilated(ctx.op)); builder.append(visit(ctx.arithmetic_factor())); return builder; @@ -1356,12 +1354,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx) { + public QueryTokenStream visitArithmetic_factor(JpqlParser.Arithmetic_factorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.op != null) { - builder.append(JpaQueryParsingToken.token(ctx.op)); + builder.append(QueryTokens.token(ctx.op)); } builder.append(visit(ctx.arithmetic_primary())); @@ -1370,7 +1368,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx) { + public QueryTokenStream visitArithmetic_primary(JpqlParser.Arithmetic_primaryContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1404,7 +1402,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitString_expression(JpqlParser.String_expressionContext ctx) { + public QueryTokenStream visitString_expression(JpqlParser.String_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1433,7 +1431,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_expression(JpqlParser.Datetime_expressionContext ctx) { + public QueryTokenStream visitDatetime_expression(JpqlParser.Datetime_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1464,7 +1462,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitBoolean_expression(JpqlParser.Boolean_expressionContext ctx) { + public QueryTokenStream visitBoolean_expression(JpqlParser.Boolean_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1489,7 +1487,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitEnum_expression(JpqlParser.Enum_expressionContext ctx) { + public QueryTokenStream visitEnum_expression(JpqlParser.Enum_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -1512,7 +1510,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitEntity_expression(JpqlParser.Entity_expressionContext ctx) { + public QueryTokenStream visitEntity_expression(JpqlParser.Entity_expressionContext ctx) { if (ctx.single_valued_object_path_expression() != null) { return visit(ctx.single_valued_object_path_expression()); @@ -1520,11 +1518,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.simple_entity_expression()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx) { + public QueryTokenStream visitSimple_entity_expression(JpqlParser.Simple_entity_expressionContext ctx) { if (ctx.identification_variable() != null) { return visit(ctx.identification_variable()); @@ -1532,11 +1530,11 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.input_parameter()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx) { + public QueryTokenStream visitEntity_type_expression(JpqlParser.Entity_type_expressionContext ctx) { if (ctx.type_discriminator() != null) { return visit(ctx.type_discriminator()); @@ -1546,15 +1544,15 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { return visit(ctx.input_parameter()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitType_discriminator(JpqlParser.Type_discriminatorContext ctx) { + public QueryTokenStream visitType_discriminator(JpqlParser.Type_discriminatorContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.TYPE())); + builder.append(QueryTokens.token(ctx.TYPE())); builder.append(TOKEN_OPEN_PAREN); if (ctx.general_identification_variable() != null) { @@ -1570,19 +1568,19 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx) { + public QueryTokenStream visitFunctions_returning_numerics(JpqlParser.Functions_returning_numericsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.LENGTH() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LENGTH())); + builder.append(QueryTokens.token(ctx.LENGTH())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LOCATE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LOCATE())); + builder.append(QueryTokens.token(ctx.LOCATE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_COMMA); @@ -1594,49 +1592,49 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.ABS() != null) { - builder.append(JpaQueryParsingToken.token(ctx.ABS())); + builder.append(QueryTokens.token(ctx.ABS())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.CEILING() != null) { - builder.append(JpaQueryParsingToken.token(ctx.CEILING())); + builder.append(QueryTokens.token(ctx.CEILING())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.EXP() != null) { - builder.append(JpaQueryParsingToken.token(ctx.EXP())); + builder.append(QueryTokens.token(ctx.EXP())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.FLOOR() != null) { - builder.append(JpaQueryParsingToken.token(ctx.FLOOR())); + builder.append(QueryTokens.token(ctx.FLOOR())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LN())); + builder.append(QueryTokens.token(ctx.LN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SIGN() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SIGN())); + builder.append(QueryTokens.token(ctx.SIGN())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SQRT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SQRT())); + builder.append(QueryTokens.token(ctx.SQRT())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.MOD() != null) { - builder.append(JpaQueryParsingToken.token(ctx.MOD())); + builder.append(QueryTokens.token(ctx.MOD())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1644,7 +1642,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.POWER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.POWER())); + builder.append(QueryTokens.token(ctx.POWER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1652,7 +1650,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.ROUND() != null) { - builder.append(JpaQueryParsingToken.token(ctx.ROUND())); + builder.append(QueryTokens.token(ctx.ROUND())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.arithmetic_expression(0))); builder.append(TOKEN_COMMA); @@ -1660,13 +1658,13 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SIZE() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SIZE())); + builder.append(QueryTokens.token(ctx.SIZE())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.collection_valued_path_expression())); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.INDEX() != null) { - builder.append(JpaQueryParsingToken.token(ctx.INDEX())); + builder.append(QueryTokens.token(ctx.INDEX())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.identification_variable())); builder.append(TOKEN_CLOSE_PAREN); @@ -1676,26 +1674,26 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx) { + public QueryTokenStream visitFunctions_returning_datetime(JpqlParser.Functions_returning_datetimeContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.CURRENT_DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_DATE())); + builder.append(QueryTokens.expression(ctx.CURRENT_DATE())); } else if (ctx.CURRENT_TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIME())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIME())); } else if (ctx.CURRENT_TIMESTAMP() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.CURRENT_TIMESTAMP())); + builder.append(QueryTokens.expression(ctx.CURRENT_TIMESTAMP())); } else if (ctx.LOCAL() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.LOCAL())); + builder.append(QueryTokens.expression(ctx.LOCAL())); if (ctx.DATE() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATE())); + builder.append(QueryTokens.expression(ctx.DATE())); } else if (ctx.TIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.TIME())); + builder.append(QueryTokens.expression(ctx.TIME())); } else if (ctx.DATETIME() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.DATETIME())); + builder.append(QueryTokens.expression(ctx.DATETIME())); } } @@ -1703,26 +1701,26 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx) { + public QueryTokenStream visitFunctions_returning_strings(JpqlParser.Functions_returning_stringsContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.CONCAT() != null) { - builder.append(JpaQueryParsingToken.token(ctx.CONCAT())); + builder.append(QueryTokens.token(ctx.CONCAT())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.string_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.string_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.SUBSTRING() != null) { - builder.append(JpaQueryParsingToken.token(ctx.SUBSTRING())); + builder.append(QueryTokens.token(ctx.SUBSTRING())); builder.append(TOKEN_OPEN_PAREN); builder.append(visit(ctx.string_expression(0))); - builder.appendInline(QueryRendererBuilder.concat(ctx.arithmetic_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.arithmetic_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.TRIM() != null) { - builder.append(JpaQueryParsingToken.token(ctx.TRIM())); + builder.append(QueryTokens.token(ctx.TRIM())); builder.append(TOKEN_OPEN_PAREN); if (ctx.trim_specification() != null) { builder.appendExpression(visit(ctx.trim_specification())); @@ -1731,19 +1729,19 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { builder.appendExpression(visit(ctx.trim_character())); } if (ctx.FROM() != null) { - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); } builder.append(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.LOWER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.LOWER())); + builder.append(QueryTokens.token(ctx.LOWER())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); } else if (ctx.UPPER() != null) { - builder.append(JpaQueryParsingToken.token(ctx.UPPER())); + builder.append(QueryTokens.token(ctx.UPPER())); builder.append(TOKEN_OPEN_PAREN); builder.append(visit(ctx.string_expression(0))); builder.append(TOKEN_CLOSE_PAREN); @@ -1753,28 +1751,28 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitTrim_specification(JpqlParser.Trim_specificationContext ctx) { + public QueryTokenStream visitTrim_specification(JpqlParser.Trim_specificationContext ctx) { if (ctx.LEADING() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.LEADING())); + return QueryRenderer.from(QueryTokens.expression(ctx.LEADING())); } else if (ctx.TRAILING() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TRAILING())); + return QueryRenderer.from(QueryTokens.expression(ctx.TRAILING())); } else { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.BOTH())); + return QueryRenderer.from(QueryTokens.expression(ctx.BOTH())); } } @Override - public QueryRendererBuilder visitFunction_invocation(JpqlParser.Function_invocationContext ctx) { + public QueryTokenStream visitFunction_invocation(JpqlParser.Function_invocationContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.FUNCTION())); + builder.append(QueryTokens.token(ctx.FUNCTION())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.function_name())); if (!ctx.function_arg().isEmpty()) { builder.append(TOKEN_COMMA); - builder.appendInline(QueryRendererBuilder.concat(ctx.function_arg(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.function_arg(), this::visit, TOKEN_COMMA)); } builder.append(TOKEN_CLOSE_PAREN); @@ -1782,14 +1780,14 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx) { + public QueryTokenStream visitExtract_datetime_field(JpqlParser.Extract_datetime_fieldContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.EXTRACT())); + builder.append(QueryTokens.expression(ctx.EXTRACT())); builder.append(TOKEN_OPEN_PAREN); builder.appendExpression(visit(ctx.datetime_field())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.appendInline(visit(ctx.datetime_expression())); builder.append(TOKEN_CLOSE_PAREN); @@ -1797,19 +1795,19 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_field(JpqlParser.Datetime_fieldContext ctx) { + public QueryTokenStream visitDatetime_field(JpqlParser.Datetime_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx) { + public QueryTokenStream visitExtract_datetime_part(JpqlParser.Extract_datetime_partContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.EXTRACT())); + builder.append(QueryTokens.expression(ctx.EXTRACT())); builder.append(TOKEN_OPEN_PAREN); builder.appendExpression(visit(ctx.datetime_part())); - builder.append(JpaQueryParsingToken.expression(ctx.FROM())); + builder.append(QueryTokens.expression(ctx.FROM())); builder.append(visit(ctx.datetime_expression())); builder.append(TOKEN_CLOSE_PAREN); @@ -1817,12 +1815,12 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitDatetime_part(JpqlParser.Datetime_partContext ctx) { + public QueryTokenStream visitDatetime_part(JpqlParser.Datetime_partContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitFunction_arg(JpqlParser.Function_argContext ctx) { + public QueryTokenStream visitFunction_arg(JpqlParser.Function_argContext ctx) { if (ctx.literal() != null) { return visit(ctx.literal()); @@ -1836,7 +1834,7 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitCase_expression(JpqlParser.Case_expressionContext ctx) { + public QueryTokenStream visitCase_expression(JpqlParser.Case_expressionContext ctx) { if (ctx.general_case_expression() != null) { return visit(ctx.general_case_expression()); @@ -1850,51 +1848,51 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitGeneral_case_expression(JpqlParser.General_case_expressionContext ctx) { + public QueryTokenStream visitGeneral_case_expression(JpqlParser.General_case_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); - builder.appendExpression(QueryRendererBuilder.concatExpressions(ctx.when_clause(), this::visit, TOKEN_NONE)); + builder.append(QueryTokens.expression(ctx.CASE())); + builder.appendExpression(QueryTokenStream.concat(ctx.when_clause(), this::visit, TOKEN_SPACE)); - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.appendExpression(visit(ctx.scalar_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitWhen_clause(JpqlParser.When_clauseContext ctx) { + public QueryTokenStream visitWhen_clause(JpqlParser.When_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.appendExpression(visit(ctx.conditional_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.appendExpression(visit(ctx.scalar_expression())); return builder; } @Override - public QueryRendererBuilder visitSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx) { + public QueryTokenStream visitSimple_case_expression(JpqlParser.Simple_case_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.CASE())); + builder.append(QueryTokens.expression(ctx.CASE())); builder.appendExpression(visit(ctx.case_operand())); - builder.appendExpression(QueryRendererBuilder.concatExpressions(ctx.simple_when_clause(), this::visit, TOKEN_NONE)); + builder.appendExpression(QueryTokenStream.concat(ctx.simple_when_clause(), this::visit, TOKEN_SPACE)); - builder.append(JpaQueryParsingToken.expression(ctx.ELSE())); + builder.append(QueryTokens.expression(ctx.ELSE())); builder.appendExpression(visit(ctx.scalar_expression())); - builder.append(JpaQueryParsingToken.expression(ctx.END())); + builder.append(QueryTokens.expression(ctx.END())); return builder; } @Override - public QueryRendererBuilder visitCase_operand(JpqlParser.Case_operandContext ctx) { + public QueryTokenStream visitCase_operand(JpqlParser.Case_operandContext ctx) { if (ctx.state_valued_path_expression() != null) { return visit(ctx.state_valued_path_expression()); @@ -1904,37 +1902,37 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx) { + public QueryTokenStream visitSimple_when_clause(JpqlParser.Simple_when_clauseContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.WHEN())); + builder.append(QueryTokens.expression(ctx.WHEN())); builder.appendExpression(visit(ctx.scalar_expression(0))); - builder.append(JpaQueryParsingToken.expression(ctx.THEN())); + builder.append(QueryTokens.expression(ctx.THEN())); builder.appendExpression(visit(ctx.scalar_expression(1))); return builder; } @Override - public QueryRendererBuilder visitCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx) { + public QueryTokenStream visitCoalesce_expression(JpqlParser.Coalesce_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.token(ctx.COALESCE())); + builder.append(QueryTokens.token(ctx.COALESCE())); builder.append(TOKEN_OPEN_PAREN); - builder.appendInline(QueryRendererBuilder.concat(ctx.scalar_expression(), this::visit, TOKEN_COMMA)); + builder.appendInline(QueryTokenStream.concat(ctx.scalar_expression(), this::visit, TOKEN_COMMA)); builder.append(TOKEN_CLOSE_PAREN); return builder; } @Override - public QueryRendererBuilder visitNullif_expression(JpqlParser.Nullif_expressionContext ctx) { + public QueryTokenStream visitNullif_expression(JpqlParser.Nullif_expressionContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); - builder.append(JpaQueryParsingToken.expression(ctx.NULLIF())); + builder.append(QueryTokens.expression(ctx.NULLIF())); builder.append(TOKEN_OPEN_PAREN); builder.appendInline(visit(ctx.scalar_expression(0))); builder.append(TOKEN_COMMA); @@ -1945,65 +1943,65 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitTrim_character(JpqlParser.Trim_characterContext ctx) { + public QueryTokenStream visitTrim_character(JpqlParser.Trim_characterContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.character_valued_input_parameter() != null) { return visit(ctx.character_valued_input_parameter()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitIdentification_variable(JpqlParser.Identification_variableContext ctx) { + public QueryTokenStream visitIdentification_variable(JpqlParser.Identification_variableContext ctx) { if (ctx.IDENTIFICATION_VARIABLE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.IDENTIFICATION_VARIABLE())); + return QueryRenderer.from(QueryTokens.expression(ctx.IDENTIFICATION_VARIABLE())); } else if (ctx.f != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.f)); + return QueryRenderer.from(QueryTokens.token(ctx.f)); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitConstructor_name(JpqlParser.Constructor_nameContext ctx) { + public QueryTokenStream visitConstructor_name(JpqlParser.Constructor_nameContext ctx) { return visit(ctx.entity_name()); } @Override - public QueryRendererBuilder visitLiteral(JpqlParser.LiteralContext ctx) { + public QueryTokenStream visitLiteral(JpqlParser.LiteralContext ctx) { if (ctx.STRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL())); } else if (ctx.JAVASTRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.JAVASTRINGLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.JAVASTRINGLITERAL())); } else if (ctx.INTLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.INTLITERAL())); } else if (ctx.FLOATLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.FLOATLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.FLOATLITERAL())); } else if (ctx.LONGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.LONGLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.LONGLITERAL())); } else if (ctx.boolean_literal() != null) { return visit(ctx.boolean_literal()); } else if (ctx.entity_type_literal() != null) { return visit(ctx.entity_type_literal()); } - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } @Override - public QueryRendererBuilder visitInput_parameter(JpqlParser.Input_parameterContext ctx) { + public QueryTokenStream visitInput_parameter(JpqlParser.Input_parameterContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); if (ctx.INTLITERAL() != null) { builder.append(TOKEN_QUESTION_MARK); - builder.append(JpaQueryParsingToken.token(ctx.INTLITERAL())); + builder.append(QueryTokens.token(ctx.INTLITERAL())); } else if (ctx.identification_variable() != null) { builder.append(TOKEN_COLON); @@ -2014,152 +2012,152 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { } @Override - public QueryRendererBuilder visitPattern_value(JpqlParser.Pattern_valueContext ctx) { + public QueryTokenStream visitPattern_value(JpqlParser.Pattern_valueContext ctx) { return visit(ctx.string_expression()); } @Override - public QueryRendererBuilder visitDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + public QueryTokenStream visitDate_time_timestamp_literal(JpqlParser.Date_time_timestamp_literalContext ctx) { + return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL())); } @Override - public QueryRendererBuilder visitEntity_type_literal(JpqlParser.Entity_type_literalContext ctx) { + public QueryTokenStream visitEntity_type_literal(JpqlParser.Entity_type_literalContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitEscape_character(JpqlParser.Escape_characterContext ctx) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + public QueryTokenStream visitEscape_character(JpqlParser.Escape_characterContext ctx) { + return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER())); } @Override - public QueryRendererBuilder visitNumeric_literal(JpqlParser.Numeric_literalContext ctx) { + public QueryTokenStream visitNumeric_literal(JpqlParser.Numeric_literalContext ctx) { if (ctx.INTLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.INTLITERAL())); + return QueryRenderer.from(QueryTokens.token(ctx.INTLITERAL())); } else if (ctx.FLOATLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.FLOATLITERAL())); + return QueryRenderer.from(QueryTokens.token(ctx.FLOATLITERAL())); } else if (ctx.LONGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.LONGLITERAL())); + return QueryRenderer.from(QueryTokens.token(ctx.LONGLITERAL())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitBoolean_literal(JpqlParser.Boolean_literalContext ctx) { + public QueryTokenStream visitBoolean_literal(JpqlParser.Boolean_literalContext ctx) { if (ctx.TRUE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.TRUE())); + return QueryRenderer.from(QueryTokens.expression(ctx.TRUE())); } else if (ctx.FALSE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.FALSE())); + return QueryRenderer.from(QueryTokens.expression(ctx.FALSE())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitEnum_literal(JpqlParser.Enum_literalContext ctx) { + public QueryTokenStream visitEnum_literal(JpqlParser.Enum_literalContext ctx) { return visit(ctx.state_field_path_expression()); } @Override - public QueryRendererBuilder visitString_literal(JpqlParser.String_literalContext ctx) { + public QueryTokenStream visitString_literal(JpqlParser.String_literalContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.STRINGLITERAL() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.STRINGLITERAL())); + return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL())); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitSingle_valued_embeddable_object_field( + public QueryTokenStream visitSingle_valued_embeddable_object_field( JpqlParser.Single_valued_embeddable_object_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSubtype(JpqlParser.SubtypeContext ctx) { + public QueryTokenStream visitSubtype(JpqlParser.SubtypeContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx) { + public QueryTokenStream visitCollection_valued_field(JpqlParser.Collection_valued_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx) { + public QueryTokenStream visitSingle_valued_object_field(JpqlParser.Single_valued_object_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitState_field(JpqlParser.State_fieldContext ctx) { + public QueryTokenStream visitState_field(JpqlParser.State_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_value_field(JpqlParser.Collection_value_fieldContext ctx) { + public QueryTokenStream visitCollection_value_field(JpqlParser.Collection_value_fieldContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitEntity_name(JpqlParser.Entity_nameContext ctx) { - return QueryRendererBuilder.concat(ctx.reserved_word(), this::visitReserved_word, TOKEN_DOT); + public QueryTokenStream visitEntity_name(JpqlParser.Entity_nameContext ctx) { + return QueryTokenStream.concat(ctx.reserved_word(), this::visitReserved_word, TOKEN_DOT); } @Override - public QueryRendererBuilder visitResult_variable(JpqlParser.Result_variableContext ctx) { + public QueryTokenStream visitResult_variable(JpqlParser.Result_variableContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitSuperquery_identification_variable( + public QueryTokenStream visitSuperquery_identification_variable( JpqlParser.Superquery_identification_variableContext ctx) { return visit(ctx.identification_variable()); } @Override - public QueryRendererBuilder visitCollection_valued_input_parameter( + public QueryTokenStream visitCollection_valued_input_parameter( JpqlParser.Collection_valued_input_parameterContext ctx) { return visit(ctx.input_parameter()); } @Override - public QueryRendererBuilder visitSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx) { + public QueryTokenStream visitSingle_valued_input_parameter(JpqlParser.Single_valued_input_parameterContext ctx) { return visit(ctx.input_parameter()); } @Override - public QueryRendererBuilder visitFunction_name(JpqlParser.Function_nameContext ctx) { + public QueryTokenStream visitFunction_name(JpqlParser.Function_nameContext ctx) { return visit(ctx.string_literal()); } @Override - public QueryRendererBuilder visitCharacter_valued_input_parameter( + public QueryTokenStream visitCharacter_valued_input_parameter( JpqlParser.Character_valued_input_parameterContext ctx) { if (ctx.CHARACTER() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.expression(ctx.CHARACTER())); + return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER())); } else if (ctx.input_parameter() != null) { return visit(ctx.input_parameter()); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } @Override - public QueryRendererBuilder visitReserved_word(Reserved_wordContext ctx) { + public QueryTokenStream visitReserved_word(Reserved_wordContext ctx) { if (ctx.IDENTIFICATION_VARIABLE() != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.IDENTIFICATION_VARIABLE())); + return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE())); } else if (ctx.f != null) { - return QueryRendererBuilder.from(JpaQueryParsingToken.token(ctx.f)); + return QueryRenderer.from(QueryTokens.token(ctx.f)); } else { - return QueryRenderer.builder(); + return QueryTokenStream.empty(); } } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java index 4ad5bba31..a545171bb 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlSortedQueryTransformer.java @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.List; @@ -48,7 +48,7 @@ class JpqlSortedQueryTransformer extends JpqlQueryRenderer { } @Override - public QueryRendererBuilder visitSelect_statement(JpqlParser.Select_statementContext ctx) { + public QueryTokenStream visitSelect_statement(JpqlParser.Select_statementContext ctx) { QueryRendererBuilder builder = QueryRenderer.builder(); @@ -75,7 +75,7 @@ class JpqlSortedQueryTransformer extends JpqlQueryRenderer { private void doVisitOrderBy(QueryRendererBuilder builder, JpqlParser.Select_statementContext ctx) { if (ctx.orderby_clause() != null) { - QueryRendererBuilder existingOrder = visit(ctx.orderby_clause()); + QueryTokenStream existingOrder = visit(ctx.orderby_clause()); if (sort.isSorted()) { builder.appendInline(existingOrder); } else { @@ -85,7 +85,7 @@ class JpqlSortedQueryTransformer extends JpqlQueryRenderer { if (sort.isSorted()) { - List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); + List sortBy = transformerSupport.orderBy(primaryFromAlias, sort); if (ctx.orderby_clause() != null) { @@ -100,24 +100,26 @@ class JpqlSortedQueryTransformer extends JpqlQueryRenderer { } @Override - public QueryRendererBuilder visitSelect_item(JpqlParser.Select_itemContext ctx) { + public QueryTokenStream visitSelect_item(JpqlParser.Select_itemContext ctx) { - QueryRendererBuilder builder = super.visitSelect_item(ctx); + QueryTokenStream tokens = super.visitSelect_item(ctx); - if (ctx.result_variable() != null) { - transformerSupport.registerAlias(builder.lastToken()); + if (ctx.result_variable() != null && !tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); } - return builder; + return tokens; } @Override - public QueryRendererBuilder visitJoin(JpqlParser.JoinContext ctx) { + public QueryTokenStream visitJoin(JpqlParser.JoinContext ctx) { - QueryRendererBuilder builder = super.visitJoin(ctx); + QueryTokenStream tokens = super.visitJoin(ctx); - transformerSupport.registerAlias(builder.lastToken()); + if (!tokens.isEmpty()) { + transformerSupport.registerAlias(tokens.getLast()); + } - return builder; + return tokens; } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ParsedQueryIntrospector.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ParsedQueryIntrospector.java index 067371eb8..fc34eb9b6 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ParsedQueryIntrospector.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/ParsedQueryIntrospector.java @@ -29,6 +29,12 @@ import org.springframework.lang.Nullable; */ interface ParsedQueryIntrospector { + /** + * Visit the parsed tree to introspect the AST tree. + * + * @param tree + * @return + */ Void visit(ParseTree tree); /** @@ -39,7 +45,13 @@ interface ParsedQueryIntrospector { @Nullable String getAlias(); - List getProjection(); + /** + * @return the primary selection. + */ + List getProjection(); + /** + * @return {@code true} if the query uses a constructor expression. + */ boolean hasConstructorExpression(); } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryEnhancer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryEnhancer.java index 2a84cce83..55c168a4f 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryEnhancer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryEnhancer.java @@ -62,7 +62,7 @@ public interface QueryEnhancer { /** * Gets the query we want to use for enhancements. * - * @return non-null {@link DeclaredQuery} that wraps the query + * @return non-null {@link DeclaredQuery} that wraps the query. */ @Deprecated(forRemoval = true) DeclaredQuery getQuery(); diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryRenderer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryRenderer.java index 8dd6a14ec..1bdde97be 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryRenderer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryRenderer.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.function.Function; import java.util.stream.Stream; -import org.antlr.v4.runtime.TokenStream; import org.springframework.util.CompositeIterator; /** @@ -31,8 +30,7 @@ import org.springframework.util.CompositeIterator; *

* Query rendering consists of multiple building blocks: *

    - *
  • {@link JpaQueryParsingToken tokens} and - * {@link org.springframework.data.jpa.repository.query.JpaQueryParsingToken.JpaExpressionToken expression tokens}
  • + *
  • {@link QueryTokens.SimpleQueryToken tokens} and {@link QueryTokens.ExpressionToken expression tokens}
  • *
  • {@link QueryRenderer compositions} such as a composition of multiple tokens.
  • *
  • {@link QueryRenderer expressions} that are individual parts such as {@code SELECT} or {@code ORDER BY …}
  • *
  • {@link QueryRenderer inline expressions} such as composition of tokens and expressions such as function calls @@ -41,10 +39,20 @@ import org.springframework.util.CompositeIterator; * * @author Mark Paluch */ -abstract class QueryRenderer implements QueryTokenStream { +abstract class QueryRenderer implements QueryTokenStream { /** - * Creates a QueryRenderer from a collection of {@link JpaQueryParsingToken}. + * Creates a QueryRenderer from a {@link QueryToken}. + * + * @param token + * @return + */ + static QueryRenderer from(QueryToken token) { + return QueryRenderer.from(Collections.singletonList(token)); + } + + /** + * Creates a QueryRenderer from a collection of {@link QueryToken}. * * @param tokens * @return @@ -55,6 +63,25 @@ abstract class QueryRenderer implements QueryTokenStream { return new TokenRenderer(tokensToUse); } + /** + * Creates a QueryRenderer from a {@link QueryTokenStream}. + * + * @param tokens + * @return + */ + static QueryRenderer from(QueryTokenStream tokens) { + + if (tokens instanceof QueryRendererBuilder builder) { + tokens = builder.current; + } + + if (tokens instanceof QueryRenderer renderer) { + return renderer; + } + + return new QueryStreamRenderer(tokens); + } + /** * Creates a new empty {@link QueryRenderer}. * @@ -79,20 +106,72 @@ abstract class QueryRenderer implements QueryTokenStream { abstract String render(); /** - * Append a {@link QueryRenderer} to create a composed renderer. - * - * @param renderer - * @return + * @return the rendered query. */ - QueryRenderer append(QueryRenderer renderer) { - return CompositeRenderer.combine(this, renderer); + static String render(Iterable tokenStream) { + + if (tokenStream instanceof QueryRendererBuilder qrb) { + tokenStream = qrb.current; + } + + if (tokenStream instanceof QueryRenderer qr) { + return qr.render(); + } + + StringBuilder results = null; + boolean previousExpression = false; + + Iterator iterator = tokenStream.iterator(); + while (iterator.hasNext()) { + QueryToken token = iterator.next(); + + if (results == null) { + if (iterator.hasNext()) { + results = new StringBuilder(); + } else { + return token.value(); + } + } + + if (previousExpression) { + if (!results.isEmpty() && results.charAt(results.length() - 1) != ' ') { + results.append(' '); + } + } + + previousExpression = token.isExpression(); + results.append(token.value()); + } + + return results.toString(); } /** - * @return {@code true} if the query renderer represents an expression. + * Append a {@link QueryRenderer} to create a composed renderer. + * + * @param tokens + * @return */ - public boolean isExpression() { - return false; + QueryRenderer append(QueryTokenStream tokens) { + + if (tokens instanceof QueryRendererBuilder builder) { + tokens = builder.current; + } + + if (tokens instanceof QueryRenderer qr) { + + if (isEmpty()) { + return qr; + } + + return CompositeRenderer.combine(this, qr); + } + + if (isEmpty()) { + return QueryRenderer.from(tokens); + } + + return CompositeRenderer.combine(this, QueryRenderer.from(tokens)); } @Override @@ -100,13 +179,46 @@ abstract class QueryRenderer implements QueryTokenStream { return render(); } + public static QueryRenderer expression(QueryTokenStream tokenStream) { + + if (tokenStream instanceof QueryRendererBuilder builder) { + tokenStream = builder.current; + } + + if (tokenStream.isEmpty()) { + return EmptyQueryRenderer.INSTANCE; + } + + if (tokenStream.isExpression()) { + return (QueryRenderer) tokenStream; + } + + return new ExpressionRenderer((QueryRenderer) tokenStream); + } + + public static QueryRenderer inline(QueryTokenStream tokenStream) { + + if (tokenStream instanceof QueryRendererBuilder builder) { + tokenStream = builder.current; + } + + if (tokenStream.isEmpty()) { + return EmptyQueryRenderer.INSTANCE; + } + + if (!tokenStream.isExpression()) { + return (QueryRenderer) tokenStream; + } + + return new InlineRenderer((QueryRenderer) tokenStream); + } + /** * Composed renderer consisting of one or more QueryRenderers. */ static class CompositeRenderer extends QueryRenderer { private final List nested; - private int size; static CompositeRenderer combine(QueryRenderer root, QueryRenderer nested) { @@ -114,66 +226,124 @@ abstract class QueryRenderer implements QueryTokenStream { queryRenderers.add(root); queryRenderers.add(nested); - return new CompositeRenderer(queryRenderers, root.estimatedSize() + nested.estimatedSize()); + return new CompositeRenderer(queryRenderers); } - private CompositeRenderer(List nested, int size) { - + private CompositeRenderer(List nested) { this.nested = nested; - this.size = size; } @Override String render() { - StringBuilder builder = new StringBuilder(2048); + StringBuilder builder = new StringBuilder(64); + String lastAppended = null; boolean lastExpression = false; for (QueryRenderer queryRenderer : nested) { - if (!builder.isEmpty() && builder.charAt(builder.length() - 1) != ' ' - && (lastExpression || queryRenderer.isExpression())) { + if (lastAppended != null && (lastExpression || queryRenderer.isExpression()) && !builder.isEmpty() + && !lastAppended.endsWith(" ")) { builder.append(' '); } - builder.append(queryRenderer.render()); + lastAppended = queryRenderer.render(); + builder.append(lastAppended); lastExpression = queryRenderer.isExpression(); } return builder.toString(); } - @Override - QueryRenderer append(QueryRenderer renderer) { + /** + * Append a {@link QueryRenderer} to create a composed renderer. + * + * @param tokens + * @return + */ + QueryRenderer append(QueryTokenStream tokens) { - nested.add(renderer); - this.size += renderer.estimatedSize(); - return this; + if (tokens instanceof QueryRendererBuilder builder) { + tokens = builder.current; + } + + if (tokens instanceof QueryRenderer qr) { + + if (isEmpty()) { + return this; + } + + if (qr.isEmpty()) { + return qr; + } + + if (tokens instanceof CompositeRenderer cr) { + this.nested.addAll(cr.nested); + + return this; + } + + } + + return super.append(tokens); } @Override - public boolean isExpression() { - return !nested.isEmpty() && nested.get(nested.size() - 1).isExpression(); + public QueryToken getLast() { + + for (int i = nested.size() - 1; i > -1; i--) { + + QueryRenderer renderer = nested.get(i); + + if (!renderer.isEmpty()) { + return renderer.getLast(); + } + } + + return null; } @Override public Iterator iterator() { CompositeIterator iterator = new CompositeIterator<>(); - for (QueryRenderer renderer : nested) { - iterator.add(renderer.iterator()); + for (QueryTokenStream stream : nested) { + iterator.add(stream.iterator()); } return iterator; } @Override - public int estimatedSize() { + public boolean isEmpty() { + + for (QueryRenderer renderer : nested) { + if (!renderer.isEmpty()) { + return false; + } + } + + return true; + } + + @Override + public int size() { + + int size = 0; + + for (QueryTokenStream stream : nested) { + size += stream.size(); + } return size; } + + @Override + public boolean isExpression() { + return !nested.isEmpty() && nested.get(nested.size() - 1).isExpression(); + } } /** - * Renderer using {@link JpaQueryParsingToken}. + * Renderer using {@link QueryTokens.SimpleQueryToken}. */ static class TokenRenderer extends QueryRenderer { @@ -189,19 +359,14 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - QueryRenderer append(QueryRenderer renderer) { + QueryRenderer append(QueryTokenStream tokens) { - if (renderer instanceof TokenRenderer tr) { + if (tokens instanceof TokenRenderer tr) { this.tokens.addAll(tr.tokens); return this; } - return super.append(renderer); - } - - @Override - public boolean isExpression() { - return !tokens.isEmpty() && tokens.get(tokens.size() - 1).isExpression(); + return super.append(tokens); } @Override @@ -220,12 +385,32 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - public int estimatedSize() { + public QueryToken getFirst() { + return tokens.isEmpty() ? null : tokens.get(0); + } + + @Override + public QueryToken getLast() { + return tokens.isEmpty() ? null : tokens.get(tokens.size() - 1); + } + + @Override + public int size() { return tokens.size(); } + @Override + public boolean isEmpty() { + return tokens.isEmpty(); + } + + @Override + public boolean isExpression() { + return !tokens.isEmpty() && getLast().isExpression(); + } + /** - * Render a list of {@link JpaQueryParsingToken}s into a string. + * Render a list of {@link QueryTokens.SimpleQueryToken}s into a string. * * @param tokens * @return rendered string containing either a query or some subset of that query @@ -236,45 +421,67 @@ abstract class QueryRenderer implements QueryTokenStream { return render(tpr); } - if(tokens instanceof QueryRendererBuilder qrb) { + if (tokens instanceof QueryRendererBuilder qrb) { return qrb.build().render(); } - if(tokens instanceof QueryRenderer qr) { + if (tokens instanceof QueryRenderer qr) { return qr.render(); } throw new IllegalArgumentException("Unknown token type %s".formatted(tokens)); } + } - static String render(Collection tokens) { + static class QueryStreamRenderer extends QueryRenderer { - StringBuilder results = new StringBuilder(); + private final QueryTokenStream tokens; - boolean previousExpression = false; - - for (QueryToken jpaQueryParsingToken : tokens) { - - if (previousExpression) { - if (!results.isEmpty() && results.charAt(results.length() - 1) != ' ') { - results.append(' '); - } - } - - previousExpression = jpaQueryParsingToken.isExpression(); - results.append(jpaQueryParsingToken.value()); - } - - return results.toString(); + public QueryStreamRenderer(QueryTokenStream tokens) { + this.tokens = tokens; } + @Override + String render() { + return render(tokens); + } + + @Override + public Iterator iterator() { + return tokens.iterator(); + } + + @Override + public QueryToken getFirst() { + return tokens.getFirst(); + } + + @Override + public QueryToken getLast() { + return tokens.getLast(); + } + + @Override + public int size() { + return tokens.size(); + } + + @Override + public boolean isEmpty() { + return tokens.isEmpty(); + } + + @Override + public boolean isExpression() { + return !tokens.isEmpty() && tokens.getLast().isExpression(); + } } /** * Builder for {@link QueryRenderer}. */ - static class QueryRendererBuilder implements QueryTokenStream { + static class QueryRendererBuilder implements QueryTokenStream { protected QueryRenderer current = QueryRenderer.empty(); @@ -289,7 +496,7 @@ abstract class QueryRenderer implements QueryTokenStream { * @param */ public static QueryRendererBuilder concat(Collection elements, Function visitor, - QueryToken separator) { + QueryToken separator) { return concat(elements, visitor, QueryRendererBuilder::toInline, separator); } @@ -334,7 +541,7 @@ abstract class QueryRenderer implements QueryTokenStream { } /** - * Create and initialize a QueryRendererBuilder from a {@link JpaQueryParsingToken}. + * Create and initialize a QueryRendererBuilder from a {@link QueryTokens.SimpleQueryToken}. * * @param token * @return @@ -344,39 +551,25 @@ abstract class QueryRenderer implements QueryTokenStream { } /** - * Append a {@link JpaQueryParsingToken}. + * Append a {@link QueryTokens.SimpleQueryToken}. * * @param token * @return {@code this} builder. */ QueryRendererBuilder append(QueryToken token) { - return append(List.of(token)); + return append(QueryRenderer.from(token)); } /** - * Append a collection of {@link JpaQueryParsingToken}. + * Append a collection of {@link QueryTokens.SimpleQueryToken}. * * @param tokens * @return {@code this} builder. */ - QueryRendererBuilder append(Collection tokens) { + QueryRendererBuilder append(List tokens) { return append(QueryRenderer.from(tokens)); } - QueryRendererBuilder append(QueryTokenStream tokens) { - return append(QueryRenderer.from(tokens.toList())); - } - - /** - * Append a QueryRendererBuilder. - * - * @param builder - * @return {@code this} builder. - */ - QueryRendererBuilder append(QueryRendererBuilder builder) { - return append(builder.current); - } - /** * Append a QueryRendererBuilder as expression. * @@ -387,29 +580,19 @@ abstract class QueryRenderer implements QueryTokenStream { return appendExpression(builder.current); } - /** - * Append a QueryRendererBuilder as inline. - * - * @param builder - * @return {@code this} builder. - */ - QueryRendererBuilder appendInline(QueryRendererBuilder builder) { - return appendInline(builder.current); - } - /** * Append a QueryRenderer. * - * @param renderer + * @param stream * @return {@code this} builder. */ - QueryRendererBuilder append(QueryRenderer renderer) { + QueryRendererBuilder append(QueryTokenStream stream) { - if (renderer instanceof EmptyQueryRenderer) { + if (stream.isEmpty()) { return this; } - current = current.append(renderer); + current = current.append(stream); return this; } @@ -417,16 +600,16 @@ abstract class QueryRenderer implements QueryTokenStream { /** * Append a QueryRenderer inline. * - * @param renderer + * @param stream * @return {@code this} builder. */ - QueryRendererBuilder appendInline(QueryRenderer renderer) { + QueryRendererBuilder appendInline(QueryTokenStream stream) { - if (renderer instanceof EmptyQueryRenderer) { + if (stream.isEmpty()) { return this; } - current = current.append(!renderer.isExpression() ? renderer : new InlineRenderer(renderer)); + current = current.append(QueryRenderer.inline(stream)); return this; } @@ -434,51 +617,20 @@ abstract class QueryRenderer implements QueryTokenStream { /** * Append a QueryRenderer as expression. * - * @param renderer + * @param tokens * @return {@code this} builder. */ - QueryRendererBuilder appendExpression(QueryRenderer renderer) { + QueryRendererBuilder appendExpression(QueryTokenStream tokens) { - if (renderer instanceof EmptyQueryRenderer) { + if (tokens.isEmpty()) { return this; } - current = current.append(renderer.isExpression() ? renderer : new ExpressionRenderer(renderer)); + current = current.append(QueryRenderer.expression(tokens)); return this; } - /** - * Return whet the builder is empty. - * - * @return - */ - public boolean isEmpty() { - return current.isEmpty(); - } - - public QueryRenderer build() { - return current; - } - - @Override - public String toString() { - return current.render(); - } - - private QueryRenderer toExpression() { - - if (current instanceof ExpressionRenderer) { - return current; - } - - return new ExpressionRenderer(current); - } - - public QueryRenderer toInline() { - return new InlineRenderer(current); - } - @Override public List toList() { return current.toList(); @@ -490,14 +642,62 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - public int estimatedSize() { - return current.estimatedSize(); + public QueryToken getFirst() { + return current.getFirst(); + } + + @Override + public QueryToken getLast() { + return current.getLast(); + } + + @Override + public boolean isExpression() { + return current.isExpression(); + } + + /** + * Return whet the builder is empty. + * + * @return + */ + @Override + public boolean isEmpty() { + return current.isEmpty(); + } + + @Override + public int size() { + return current.size(); } @Override public Iterator iterator() { return current.iterator(); } + + @Override + public String toString() { + return current.render(); + } + + public QueryRenderer build() { + return current; + } + + QueryRenderer toExpression() { + + if (current instanceof ExpressionRenderer) { + return current; + } + + return QueryRenderer.expression(current); + } + + public QueryRenderer toInline() { + return new InlineRenderer(current); + } + } private static class InlineRenderer extends QueryRenderer { @@ -529,8 +729,28 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - public int estimatedSize() { - return delegate.estimatedSize(); + public QueryToken getFirst() { + return delegate.getFirst(); + } + + @Override + public QueryToken getLast() { + return delegate.getLast(); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isExpression() { + return false; } } @@ -547,11 +767,6 @@ abstract class QueryRenderer implements QueryTokenStream { return delegate.render(); } - @Override - public boolean isExpression() { - return true; - } - @Override public Stream stream() { return delegate.stream(); @@ -568,9 +783,30 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - public int estimatedSize() { - return delegate.estimatedSize(); + public QueryToken getFirst() { + return delegate.getFirst(); } + + @Override + public QueryToken getLast() { + return delegate.getLast(); + } + + @Override + public boolean isEmpty() { + return delegate.isEmpty(); + } + + @Override + public int size() { + return delegate.size(); + } + + @Override + public boolean isExpression() { + return true; + } + } private static class EmptyQueryRenderer extends QueryRenderer { @@ -583,13 +819,17 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - QueryRenderer append(QueryRenderer renderer) { - return renderer; - } + QueryRenderer append(QueryTokenStream tokens) { - @Override - public boolean isEmpty() { - return true; + if (tokens.isEmpty()) { + return this; + } + + if (tokens instanceof QueryRenderer qr) { + return qr; + } + + return QueryRenderer.from(tokens); } @Override @@ -608,8 +848,18 @@ abstract class QueryRenderer implements QueryTokenStream { } @Override - public int estimatedSize() { + public boolean isEmpty() { + return true; + } + + @Override + public int size() { return 0; } + + @Override + public boolean isExpression() { + return false; + } } } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryToken.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryToken.java index c4b85109f..9b3c798f1 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryToken.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryToken.java @@ -16,15 +16,24 @@ package org.springframework.data.jpa.repository.query; /** + * Interface defining a token. Tokens are atomic elements from which queries are built. Tokens can be inline tokens that + * do not require spacing or expressions that must be separated by spaces, commas, etc. + * * @author Christoph Strobl + * @since 3.4 */ -public interface QueryToken { +interface QueryToken { + /** + * @return the token value (i.e. its content). + */ String value(); + /** + * @return {@code true} if the token represents an expression. + */ default boolean isExpression() { return false; } - boolean isA(QueryToken queryToken); } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokenStream.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokenStream.java index fb61a5e80..4c554ed57 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokenStream.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokenStream.java @@ -15,24 +15,134 @@ */ package org.springframework.data.jpa.repository.query; +import java.util.Collection; +import java.util.Iterator; +import java.util.function.Function; + import org.springframework.data.util.Streamable; import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; /** + * Stream of {@link QueryToken}. + * * @author Christoph Strobl + * @author Mark Paluch + * @since 3.4 */ -public interface QueryTokenStream extends Streamable { +interface QueryTokenStream extends Streamable { - @Nullable - default T firstToken() { - return CollectionUtils.firstElement(toList()); + /** + * Creates an empty stream. + * + * @return + */ + static QueryTokenStream empty() { + return EmptyQueryTokenStream.INSTANCE; } + /** + * Compose a {@link QueryTokenStream} from a collection of inline elements. + * + * @param elements collection of elements. + * @param visitor visitor function converting the element into a {@link QueryTokenStream}. + * @param separator separator token. + * @return the composed token stream. + */ + static QueryTokenStream concat(Collection elements, Function visitor, + QueryToken separator) { + return concat(elements, visitor, QueryRenderer::inline, separator); + } + + /** + * Compose a {@link QueryTokenStream} from a collection of expression elements. + * + * @param elements collection of elements. + * @param visitor visitor function converting the element into a {@link QueryTokenStream}. + * @param separator separator token. + * @return the composed token stream. + */ + static QueryTokenStream concatExpressions(Collection elements, Function visitor, + QueryToken separator) { + return concat(elements, visitor, QueryRenderer::expression, separator); + } + + /** + * Compose a {@link QueryTokenStream} from a collection of elements. + * + * @param elements collection of elements. + * @param visitor visitor function converting the element into a {@link QueryTokenStream}. + * @param separator separator token. + * @param postProcess post-processing function to map {@link QueryTokenStream}. + * @return the composed token stream. + */ + static QueryTokenStream concat(Collection elements, Function visitor, + Function postProcess, QueryToken separator) { + + QueryRenderer.QueryRendererBuilder builder = null; + QueryTokenStream firstElement = null; + for (T element : elements) { + + QueryTokenStream tokenStream = postProcess.apply(visitor.apply(element)); + + if (firstElement == null) { + firstElement = tokenStream; + continue; + } + + if (builder == null) { + builder = QueryRenderer.builder(); + builder.append(firstElement); + } + + if (!builder.isEmpty()) { + builder.append(separator); + } + builder.append(tokenStream); + } + + if (builder != null) { + return builder; + } + + if (firstElement != null) { + return firstElement; + } + + return QueryTokenStream.empty(); + } + + /** + * @return the first query token or {@code null} if empty. + */ @Nullable - default T lastToken() { + default QueryToken getFirst() { + + Iterator it = iterator(); + return it.hasNext() ? it.next() : null; + } + + /** + * @return the last query token or {@code null} if empty. + */ + @Nullable + default QueryToken getLast() { return CollectionUtils.lastElement(toList()); } - int estimatedSize(); + /** + * @return {@code true} if this stream represents a query expression. + */ + boolean isExpression(); + + /** + * @return the number of tokens. + */ + int size(); + + /** + * @return {@code true} if this stream contains no tokens. + */ + boolean isEmpty(); + } diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokens.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokens.java new file mode 100644 index 000000000..80df0b330 --- /dev/null +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryTokens.java @@ -0,0 +1,190 @@ +/* + * Copyright 2024 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.data.jpa.repository.query; + +import java.util.function.Supplier; + +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * Utility class to create query tokens. + * + * @author Mark Paluch + * @since 3.4 + */ +class QueryTokens { + + /** + * Commonly use tokens. + */ + static final QueryToken TOKEN_NONE = token(""); + static final QueryToken TOKEN_COMMA = token(", "); + static final QueryToken TOKEN_SPACE = token(" "); + static final QueryToken TOKEN_DOT = token("."); + static final QueryToken TOKEN_EQUALS = token(" = "); + static final QueryToken TOKEN_OPEN_PAREN = token("("); + static final QueryToken TOKEN_CLOSE_PAREN = token(")"); + static final QueryToken TOKEN_ORDER_BY = expression("order by"); + static final QueryToken TOKEN_LOWER_FUNC = token("lower("); + static final QueryToken TOKEN_SELECT_COUNT = token("select count("); + static final QueryToken TOKEN_COUNT_FUNC = token("count("); + static final QueryToken TOKEN_DOUBLE_PIPE = token(" || "); + static final QueryToken TOKEN_OPEN_SQUARE_BRACKET = token("["); + static final QueryToken TOKEN_CLOSE_SQUARE_BRACKET = token("]"); + static final QueryToken TOKEN_COLON = token(":"); + static final QueryToken TOKEN_QUESTION_MARK = token("?"); + static final QueryToken TOKEN_OPEN_BRACE = token("{"); + static final QueryToken TOKEN_CLOSE_BRACE = token("}"); + static final QueryToken TOKEN_DOUBLE_UNDERSCORE = token("__"); + static final QueryToken TOKEN_AS = expression("AS"); + static final QueryToken TOKEN_DESC = expression("desc"); + static final QueryToken TOKEN_ASC = expression("asc"); + static final QueryToken TOKEN_WITH = expression("WITH"); + static final QueryToken TOKEN_NOT = expression("NOT"); + static final QueryToken TOKEN_MATERIALIZED = expression("materialized"); + static final QueryToken TOKEN_NULLS = expression("NULLS"); + static final QueryToken TOKEN_FIRST = expression("FIRST"); + static final QueryToken TOKEN_LAST = expression("LAST"); + + /** + * Creates a {@link QueryToken token} from an ANTLR {@link TerminalNode}. + * + * @param node + * @return + */ + static QueryToken token(TerminalNode node) { + return token(node.getText()); + } + + /** + * Creates a {@link QueryToken token} from an ANTLR {@link Token}. + * + * @param token + * @return + */ + static QueryToken token(Token token) { + return token(token.getText()); + } + + /** + * Creates a {@link QueryToken token} from a string {@code token}. + * + * @param token + * @return + */ + static QueryToken token(String token) { + return new SimpleQueryToken(token); + } + + /** + * Creates a ventilated token that is embedded in spaces. + * + * @param token + * @return + */ + static QueryToken ventilated(Token token) { + return new SimpleQueryToken(" " + token.getText() + " "); + } + + /** + * Creates a {@link QueryToken expression} from an ANTLR {@link TerminalNode}. + * + * @param node + * @return + */ + static QueryToken expression(TerminalNode node) { + return expression(node.getText()); + } + + /** + * Creates a {@link QueryToken expression} from an ANTLR {@link Token}. + * + * @param token + * @return + */ + static QueryToken expression(Token token) { + return expression(token.getText()); + } + + /** + * Creates a {@link QueryToken token} from a string {@code expression}. + * + * @param expression + * @return + */ + static QueryToken expression(String expression) { + return new ExpressionToken(expression); + } + + /** + * A value type used to represent a JPA query token. NOTE: Sometimes the token's value is based upon a value found + * later in the parsing process, so the text itself is wrapped in a {@link Supplier}. + * + * @author Greg Turnquist + * @author Christoph Strobl + * @since 3.1 + */ + static class SimpleQueryToken implements QueryToken { + + /** + * The text value of the token. + */ + private final String token; + + SimpleQueryToken(String token) { + this.token = token; + } + + public String value() { + return token; + } + + @Override + public final boolean equals(Object object) { + if (this == object) { + return true; + } + + if (!(object instanceof QueryToken that)) { + return false; + } + + return value().equalsIgnoreCase(that.value()); + } + + @Override + public int hashCode() { + return value().hashCode(); + } + + @Override + public String toString() { + return value(); + } + } + + static class ExpressionToken extends SimpleQueryToken { + + ExpressionToken(String token) { + super(token); + } + + public boolean isExpression() { + return true; + } + } +} 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 32240a807..7481000ff 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 @@ -15,7 +15,7 @@ */ package org.springframework.data.jpa.repository.query; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; +import static org.springframework.data.jpa.repository.query.QueryTokens.*; import java.util.ArrayList; import java.util.Iterator; @@ -29,30 +29,29 @@ import java.util.List; */ class QueryTransformers { - static CountSelectionTokenStream filterCountSelection(QueryTokenStream selection) { + static CountSelectionTokenStream filterCountSelection(QueryTokenStream selection) { - List target = new ArrayList<>(selection.estimatedSize()); + List target = new ArrayList<>(selection.size()); boolean skipNext = false; boolean containsNew = false; for (QueryToken token : selection) { - if (skipNext) { skipNext = false; continue; } - if (token.isA(TOKEN_AS)) { + if (token.equals(TOKEN_AS)) { skipNext = true; continue; } - if (!token.isA(TOKEN_COMMA) && token.isExpression()) { - token = JpaQueryParsingToken.token(token.value()); + if (!token.equals(TOKEN_COMMA) && token.isExpression()) { + token = QueryTokens.token(token.value()); } - if(!containsNew && token.value().contains("new")) { + if (!containsNew && token.value().contains("new")) { containsNew = true; } @@ -62,19 +61,14 @@ class QueryTransformers { return new CountSelectionTokenStream(target, containsNew); } - static class CountSelectionTokenStream implements QueryTokenStream { + static class CountSelectionTokenStream implements QueryTokenStream { private final List tokens; private final boolean requiresPrimaryAlias; - public CountSelectionTokenStream(List tokens, boolean containsNew) { + public CountSelectionTokenStream(List tokens, boolean requiresPrimaryAlias) { this.tokens = tokens; - this.requiresPrimaryAlias = containsNew; - } - - @Override - public int estimatedSize() { - return tokens.size(); + this.requiresPrimaryAlias = requiresPrimaryAlias; } @Override @@ -87,9 +81,25 @@ class QueryTransformers { return tokens; } + @Override + public int size() { + return tokens.size(); + } + + @Override + public boolean isExpression() { + return true; + } + + @Override + public boolean isEmpty() { + return tokens.isEmpty(); + } + public boolean requiresPrimaryAlias() { return requiresPrimaryAlias; } + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java index f8b0fe0e7..bbfbffe1a 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java index c80185ce7..91a4bb761 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlQueryRendererTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import java.util.stream.Stream; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlSpecificationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlSpecificationTests.java index b5c6aabe4..b6ed4fc8b 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlSpecificationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlSpecificationTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java index 22a5b18eb..8a23e279c 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryRendererTests.java @@ -55,7 +55,8 @@ class HqlQueryRendererTests { HqlParser.StartContext parsedQuery = parser.start(); - return new HqlQueryRenderer().visit(parsedQuery).build().render(); + QueryTokenStream tokens = new HqlQueryRenderer().visit(parsedQuery); + return QueryRenderer.from(tokens).render(); } static Stream reservedWords() { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java index 5cc6b6ddb..b4ce21db0 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlQueryTransformerTests.java @@ -499,7 +499,7 @@ class HqlQueryTransformerTests { select sr from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId """); - assertThat(countQuery).startsWith("WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr") + assertThat(countQuery).startsWith("WITH maxId AS (select max(sr.snapshot.id) snapshotId from SnapshotReference sr") .endsWith("select count(m) from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId"); } @@ -514,7 +514,7 @@ class HqlQueryTransformerTests { """, Sort.by("sr.snapshot")); assertThat(sortedQuery).startsWith( - "WITH maxId AS(select max(sr.snapshot.id) snapshotId from SnapshotReference sr where sr.id.selectionId = ?1 and sr.enabled group by sr.userId )") + "WITH maxId AS (select max(sr.snapshot.id) snapshotId from SnapshotReference sr where sr.id.selectionId = ?1 and sr.enabled group by sr.userId)") .endsWith( "select sr from maxId m join SnapshotReference sr on sr.snapshot.id = m.snapshotId order by sr.snapshot asc"); } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlSpecificationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlSpecificationTests.java index 74e474f7c..9e07c2a75 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlSpecificationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/HqlSpecificationTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlComplianceTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlComplianceTests.java index 8dc22aa44..aadf2c258 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlComplianceTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlComplianceTests.java @@ -16,18 +16,16 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.junit.jupiter.api.Test; -import org.springframework.data.jpa.repository.query.QueryRenderer.TokenRenderer; /** * Test to verify compliance of {@link JpqlParser} with standard SQL. Other than {@link JpqlSpecificationTests} tests in * this class check that the parser follows a lenient approach and does not error on well known concepts like numeric * suffix. - * + * * @author Christoph Strobl */ class JpqlComplianceTests { @@ -41,7 +39,7 @@ class JpqlComplianceTests { JpqlParser.StartContext parsedQuery = parser.start(); - return TokenRenderer.render(new JpqlQueryRenderer().visit(parsedQuery)); + return QueryRenderer.render(new JpqlQueryRenderer().visit(parsedQuery)); } private void assertQuery(String query) { @@ -60,11 +58,11 @@ class JpqlComplianceTests { @Test // GH-3277 void numericLiterals() { - assertQuery("SELECT e FROM Employee e WHERE e.id = 1234"); - assertQuery("SELECT e FROM Employee e WHERE e.id = 1234L"); - assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14"); - assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14F"); - assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14e32D"); + assertQuery("SELECT e FROM Employee e WHERE e.id = 1234"); + assertQuery("SELECT e FROM Employee e WHERE e.id = 1234L"); + assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14"); + assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14F"); + assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14e32D"); } @Test // GH-3308 diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java index 9bd2d8bfa..c50f07c59 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlQueryRendererTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import java.util.stream.Stream; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlSpecificationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlSpecificationTests.java index 3b8d9ac37..f32a9d1c7 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlSpecificationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlSpecificationTests.java @@ -16,7 +16,6 @@ package org.springframework.data.jpa.repository.query; import static org.assertj.core.api.Assertions.*; -import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream;