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 a1f2bcde6..f88cfa3e2 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 @@ -32,10 +32,10 @@ import org.springframework.util.CollectionUtils; /** * An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that renders an EQL query without making any changes. * - * @author TaeHyun Kang(polyglot-k) * @author Greg Turnquist * @author Christoph Strobl * @author Mark Paluch + * @author TaeHyun Kang * @since 3.2 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode" }) @@ -44,19 +44,23 @@ class EqlQueryRenderer extends EqlBaseVisitor { /** * Is this AST tree a {@literal subquery}? * - * @return boolean + * @return {@literal true} is the query is a subquery; {@literal false} otherwise. */ static boolean isSubquery(ParserRuleContext ctx) { while (ctx != null) { + if (ctx instanceof EqlParser.SubqueryContext) { return true; } + if (ctx instanceof EqlParser.Update_statementContext || ctx instanceof EqlParser.Delete_statementContext) { return false; } + ctx = ctx.getParent(); } + return false; } @@ -68,11 +72,14 @@ class EqlQueryRenderer extends EqlBaseVisitor { static boolean isSetQuery(ParserRuleContext ctx) { while (ctx != null) { + if (ctx instanceof EqlParser.Set_fuctionContext) { return true; } + ctx = ctx.getParent(); } + return false; } 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 45300c218..72b329677 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 @@ -32,11 +32,11 @@ import org.springframework.util.CollectionUtils; /** * An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that renders an HQL query without making any changes. * - * @author TaeHyun Kang(polyglot-k) * @author Greg Turnquist * @author Christoph Strobl * @author Oscar Fanchin * @author Mark Paluch + * @author TaeHyun Kang * @since 3.1 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode", "UnreachableCode" }) @@ -45,42 +45,48 @@ class HqlQueryRenderer extends HqlBaseVisitor { /** * Is this AST tree a {@literal subquery}? * - * @return boolean + * @return {@literal true} is the query is a subquery; {@literal false} otherwise. */ static boolean isSubquery(ParserRuleContext ctx) { while (ctx != null) { + if (ctx instanceof HqlParser.SubqueryContext || ctx instanceof HqlParser.CteContext) { return true; } + if (ctx instanceof HqlParser.SelectStatementContext || ctx instanceof HqlParser.InsertStatementContext || ctx instanceof HqlParser.DeleteStatementContext || - ctx instanceof HqlParser.UpdateStatementContext - ) { + ctx instanceof HqlParser.UpdateStatementContext) { return false; } + ctx = ctx.getParent(); } + return false; } /** * Is this AST tree a {@literal set} query that has been added through {@literal UNION|INTERSECT|EXCEPT}? * - * @return boolean + * @return {@literal true} is the query is a set query; {@literal false} otherwise. */ static boolean isSetQuery(ParserRuleContext ctx) { while (ctx != null) { - ParserRuleContext parent = ctx.getParent(); - if (ctx instanceof HqlParser.OrderedQueryContext && parent instanceof HqlParser.QueryExpressionContext qec) { + + if (ctx instanceof HqlParser.OrderedQueryContext + && ctx.getParent() instanceof HqlParser.QueryExpressionContext qec) { if (qec.orderedQuery().indexOf(ctx) != 0) { return true; } } - ctx = parent; + + ctx = ctx.getParent(); } + return false; } 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 f9da5749c..4dd74b1c2 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 @@ -32,10 +32,10 @@ import org.springframework.util.CollectionUtils; /** * An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that renders a JPQL query without making any changes. * - * @author TaeHyun Kang(polyglot-k) * @author Greg Turnquist * @author Christoph Strobl * @author Mark Paluch + * @author TaeHyun Kang * @since 3.1 */ @SuppressWarnings({ "ConstantConditions", "DuplicatedCode" }) @@ -44,19 +44,23 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { /** * Is this AST tree a {@literal subquery}? * - * @return boolean + * @return {@literal true} is the query is a subquery; {@literal false} otherwise. */ static boolean isSubquery(ParserRuleContext ctx) { while (ctx != null) { + if (ctx instanceof JpqlParser.SubqueryContext) { return true; } + if (ctx instanceof JpqlParser.Update_statementContext || ctx instanceof JpqlParser.Delete_statementContext) { return false; } + ctx = ctx.getParent(); } + return false; } @@ -68,11 +72,14 @@ class JpqlQueryRenderer extends JpqlBaseVisitor { static boolean isSetQuery(ParserRuleContext ctx) { while (ctx != null) { + if (ctx instanceof JpqlParser.Set_fuctionContext) { return true; } + ctx = ctx.getParent(); } + return false; }