From 40d0d54508ff4bf2bf0a32afb3505b83c9d7357c Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Thu, 12 Mar 2020 15:09:32 +0100 Subject: [PATCH] DATAJPA-1696 - Undo reluctant parsing introduced with DATAJPA-1679. --- .../data/jpa/repository/query/QueryUtils.java | 2 +- .../jpa/repository/query/QueryUtilsUnitTests.java | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index 609833103..f59aeb585 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -104,7 +104,7 @@ public abstract class QueryUtils { private static final Pattern ALIAS_MATCH; private static final Pattern COUNT_MATCH; - private static final Pattern PROJECTION_CLAUSE = Pattern.compile("select\\s+(?:distinct\\s+)?(.+?)\\s+from", Pattern.CASE_INSENSITIVE); + private static final Pattern PROJECTION_CLAUSE = Pattern.compile("select\\s+(?:distinct\\s+)?(.+)\\s+from", Pattern.CASE_INSENSITIVE); private static final Pattern NO_DIGITS = Pattern.compile("\\D+"); diff --git a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java index 4b60fb9ec..d480c5fce 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java @@ -495,9 +495,18 @@ public class QueryUtilsUnitTests { }); } - @Test // DATAJPA-1679 + @Test // DATAJPA-1696 public void findProjectionClauseWithSubselect() { - assertThat(QueryUtils.getProjection("select * from (select x from y)")).isEqualTo("*"); + + // This is not a required behavior, in fact the opposite is, + // but it documents a current limitation. + // to fix this without breaking findProjectionClauseWithIncludedFrom we need a more sophisticated parser. + assertThat(QueryUtils.getProjection("select * from (select x from y)")).isNotEqualTo("*"); + } + + @Test // DATAJPA-1696 + public void findProjectionClauseWithIncludedFrom() { + assertThat(QueryUtils.getProjection("select x, frommage, y from t")).isEqualTo("x, frommage, y"); } private static void assertCountQuery(String originalQuery, String countQuery) {