From 1999da61ba7cc0ae901acc63ccceae53ca5d985e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20L=C3=BCdiger?= Date: Fri, 17 May 2019 11:43:21 +0200 Subject: [PATCH] DATAJPA-1500 - Fix RegEx to support whitespace characters at the end. When using the creteCountQueryFor method before, the order by clause did not get removed when having a specific combination of whitespace characters at the end of the input. By removing the $ for matching the end of the line, this is now fixed. Original pull request: #380. --- .../data/jpa/repository/query/QueryUtils.java | 2 +- .../data/jpa/repository/query/QueryUtilsUnitTests.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 48c61c893..8ee2bbdb6 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 @@ -81,7 +81,7 @@ public abstract class QueryUtils { private static final String COUNT_REPLACEMENT_TEMPLATE = "select count(%s) $5$6$7"; private static final String SIMPLE_COUNT_VALUE = "$2"; private static final String COMPLEX_COUNT_VALUE = "$3$6"; - private static final String ORDER_BY_PART = "(?iu)\\s+order\\s+by\\s+.*$"; + private static final String ORDER_BY_PART = "(?iu)\\s+order\\s+by\\s+.*"; private static final Pattern ALIAS_MATCH; private static final Pattern COUNT_MATCH; 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 aea672c58..d9853549c 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 @@ -411,6 +411,15 @@ public class QueryUtilsUnitTests { assertThat(detectAlias("select * from User u order by name"), is("u")); } + @Test // DATAJPA-1500 + public void createCountQuerySupportsWhitespaceCharacters() { + assertThat(createCountQueryFor("select * from User user\n" + + " where user.age = 18\n" + + " order by user.name\n "), + is("select count(user) from User user\n" + + " where user.age = 18\n ")); + } + private static void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery), is(countQuery)); }