From f1dc4fe2428d3940e391bd5411e364462ea589ff 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 740b540cf..0e8112fd4 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 @@ -95,7 +95,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 1afe9d832..68a90d4c7 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 @@ -413,6 +413,15 @@ public class QueryUtilsUnitTests { assertThat(detectAlias("select * from User u order by name")).isEqualTo("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)); }