From 9ffd61b57d59e7d73c244609ceabffd0a06728b0 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 25 Oct 2024 13:32:48 +0200 Subject: [PATCH 1/3] Prepare issue branch. --- pom.xml | 2 +- spring-data-envers/pom.xml | 4 ++-- spring-data-jpa-distribution/pom.xml | 2 +- spring-data-jpa/pom.xml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index c2fdc724c7..a03346a2fd 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT pom Spring Data JPA Parent diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml index 811159a7d7..93acc9969f 100755 --- a/spring-data-envers/pom.xml +++ b/spring-data-envers/pom.xml @@ -5,12 +5,12 @@ org.springframework.data spring-data-envers - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT org.springframework.data spring-data-jpa-parent - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml index 0ffbe0ec49..f4275c71bb 100644 --- a/spring-data-jpa-distribution/pom.xml +++ b/spring-data-jpa-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml index 93c168fec7..b21a1d3085 100644 --- a/spring-data-jpa/pom.xml +++ b/spring-data-jpa/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-jpa - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT Spring Data JPA Spring Data module for JPA repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.12-SNAPSHOT + 3.2.x-GH-3649-SNAPSHOT ../pom.xml From 0f9cc885241e31eca17abd79b77af8b40bdf02b5 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 25 Oct 2024 13:35:13 +0200 Subject: [PATCH 2/3] Fix NPE when parsing modifying HQL. --- .../repository/query/HqlQueryTransformer.java | 4 +++ .../query/HqlQueryTransformerTests.java | 27 ++++++++++++------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java index dc0445263d..ccf0e53a64 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java @@ -101,6 +101,10 @@ private static boolean isSubquery(ParserRuleContext ctx) { return false; } else if (ctx instanceof HqlParser.InsertStatementContext) { return false; + } else if (ctx instanceof HqlParser.DeleteStatementContext) { + return false; + } else if (ctx instanceof HqlParser.UpdateStatementContext) { + return false; } else { return isSubquery(ctx.getParent()); } 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 648c03e055..5dab8c1cfe 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 @@ -995,16 +995,23 @@ void fromWithoutAPrimaryAliasShouldWork() { .isEqualTo("FROM Story WHERE enabled = true order by created desc"); } - @Test // GH-2977 - void isSubqueryThrowsException() { - - String query = """ - insert into MyEntity (id, col) - select max(id), col - from MyEntityStaging - group by col - """; - + @ParameterizedTest + @ValueSource(strings = { """ + insert into MyEntity (id, col) + select max(id), col + from MyEntityStaging + group by col + """, """ + update MyEntity AS mes + set mes.col = 'test' + where mes.id = 1 + """, """ + delete MyEntity AS mes + where mes.col = 'test' + """ + + }) // GH-2977, GH-3649 + void isSubqueryThrowsException(String query) { assertThat(createQueryFor(query, Sort.unsorted())).isEqualToIgnoringWhitespace(query); } From e09eb0de68bcddc540b67cd2748d84e693068b61 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 25 Oct 2024 15:10:39 +0200 Subject: [PATCH 3/3] add null check for parent context as last line of defence. --- .../data/jpa/repository/query/HqlQueryTransformer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java index ccf0e53a64..4c7a7e359e 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryTransformer.java @@ -106,7 +106,7 @@ private static boolean isSubquery(ParserRuleContext ctx) { } else if (ctx instanceof HqlParser.UpdateStatementContext) { return false; } else { - return isSubquery(ctx.getParent()); + return ctx.getParent() != null ? isSubquery(ctx.getParent()) : false; } }