From b69141ac17a8e4208a053abe313b26b441820010 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 13 Jan 2020 15:34:24 +0100 Subject: [PATCH] DATACMNS-1645 - Add search prefix for part tree queries. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We're adding search as prefix for derived repository query methods to improve readability when a Spring Data module is integrated with a search engine. Now it's possible to create a `search…By…` query like `searchByFirstname`. --- .../data/repository/query/parser/PartTree.java | 2 +- .../repository/query/parser/PartTreeUnitTests.java | 12 +++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/repository/query/parser/PartTree.java b/src/main/java/org/springframework/data/repository/query/parser/PartTree.java index 9764bca38..4fd5a9ea6 100644 --- a/src/main/java/org/springframework/data/repository/query/parser/PartTree.java +++ b/src/main/java/org/springframework/data/repository/query/parser/PartTree.java @@ -57,7 +57,7 @@ public class PartTree implements Streamable { * @see Pattern */ private static final String KEYWORD_TEMPLATE = "(%s)(?=(\\p{Lu}|\\P{InBASIC_LATIN}))"; - private static final String QUERY_PATTERN = "find|read|get|query|stream"; + private static final String QUERY_PATTERN = "find|read|get|query|search|stream"; private static final String COUNT_PATTERN = "count"; private static final String EXISTS_PATTERN = "exists"; private static final String DELETE_PATTERN = "delete|remove"; diff --git a/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java b/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java index 47a18c78e..4dd4208f6 100755 --- a/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java +++ b/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java @@ -50,7 +50,8 @@ import org.springframework.data.repository.query.parser.PartTree.OrPart; */ public class PartTreeUnitTests { - private String[] PREFIXES = { "find", "read", "get", "query", "stream", "count", "delete", "remove", "exists" }; + private String[] PREFIXES = { "find", "read", "get", "query", "search", "stream", "count", "delete", "remove", + "exists" }; @Test public void rejectsNullSource() { @@ -400,6 +401,15 @@ public class PartTreeUnitTests { assertThat(parts).containsExactly(part("firstname"), part("lastname")); } + @Test // DATACMNS-1645 + public void searchPrefixShouldBeSupportedInRepositoryQueryMethods() { + + PartTree tree = new PartTree("searchByFirstnameAndLastname", User.class); + Iterable parts = tree.getParts(); + + assertThat(parts).containsExactly(part("firstname"), part("lastname")); + } + @Test // DATACMNS-303 public void identifiesExtendedCountByCorrectly() {