diff --git a/pom.xml b/pom.xml index c77686453f..13e533e55e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT pom Spring Data JPA Parent diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml index db915d7c3b..13fed4dfe1 100755 --- a/spring-data-envers/pom.xml +++ b/spring-data-envers/pom.xml @@ -5,12 +5,12 @@ org.springframework.data spring-data-envers - 3.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml index a5cb2f09b5..67e15d3a81 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.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml index 27313e9e3c..d2529cd6c7 100644 --- a/spring-data-jpa/pom.xml +++ b/spring-data-jpa/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-jpa - 3.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT Spring Data JPA Spring Data module for JPA repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-jpa-parent - 3.1.0-SNAPSHOT + 3.1.0-gh-2884-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index f581f191ff..0d2c65072b 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -186,7 +186,7 @@ public abstract class QueryUtils { builder = new StringBuilder(); // any function call including parameters within the brackets - builder.append("\\w+\\s*\\([\\w\\.,\\s'=:\\\\?]+\\)"); + builder.append("\\w+\\s*\\([\\w\\.,\\s'=:;\\\\?]+\\)"); // the potential alias builder.append("\\s+[as|AS]+\\s+(([\\w\\.]+))"); diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java index 2ee00f42a2..99dada4923 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java @@ -15,14 +15,8 @@ */ package org.springframework.data.jpa.repository.query; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; -import static org.springframework.data.jpa.repository.query.QueryUtils.applySorting; -import static org.springframework.data.jpa.repository.query.QueryUtils.createCountQueryFor; -import static org.springframework.data.jpa.repository.query.QueryUtils.detectAlias; -import static org.springframework.data.jpa.repository.query.QueryUtils.getOuterJoinAliases; -import static org.springframework.data.jpa.repository.query.QueryUtils.hasConstructorExpression; -import static org.springframework.data.jpa.repository.query.QueryUtils.removeSubqueries; +import static org.assertj.core.api.Assertions.*; +import static org.springframework.data.jpa.repository.query.QueryUtils.*; import java.util.Collections; import java.util.Set; @@ -891,4 +885,30 @@ void orderByShouldWorkWithSubSelectStatements() { + ") as timestamp\n" // + "from foo f", sort)).endsWith("order by f.age desc"); } + + @Test // GH-2884 + void functionAliasShouldSupportArgumentsWithCommasOrArgumentsWithSemiColons() { + + assertThat(QueryUtils.getFunctionAliases(""" + select s.id as id, s.name as name, gp.points + from specialist s + left join ( + select q.specialist_id, listagg(q.points, ',') as points + from qualification q + group by q.specialist_id + ) gp on gp.specialist_id = s.id + where name like :name + """)).containsExactly("points"); + + assertThat(QueryUtils.getFunctionAliases(""" + select s.id as id, s.name as name, gp.points + from specialist s + left join ( + select q.specialist_id, listagg(q.points, ';') as points + from qualification q + group by q.specialist_id + ) gp on gp.specialist_id = s.id + where name like :name + """)).containsExactly("points"); + } }