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 f54e4ae8d..65587ad4d 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 @@ -190,6 +190,15 @@ public class PartTree implements Streamable { return getParts().filter(part -> part.getType().equals(type)); } + /** + * Returns whether the {@link PartTree} contains predicate {@link Part}s. + * + * @return + */ + public boolean hasPredicate() { + return predicate.iterator().hasNext(); + } + /* * (non-Javadoc) * @see java.lang.Object#toString() @@ -364,8 +373,9 @@ public class PartTree implements Streamable { throw new IllegalArgumentException("OrderBy must not be used more than once in a method name!"); } - this.nodes = Arrays.stream(split(parts[0], "Or"))// - .map(part -> new OrPart(part, domainClass, alwaysIgnoreCase))// + this.nodes = Arrays.stream(split(parts[0], "Or")) // + .filter(part -> StringUtils.hasText(part)) // + .map(part -> new OrPart(part, domainClass, alwaysIgnoreCase)) // .collect(Collectors.toList()); this.orderBySource = parts.length == 2 ? new OrderBySource(parts[1], Optional.of(domainClass)) 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 e9d8f6c11..64f91f792 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 @@ -589,6 +589,20 @@ public class PartTreeUnitTests { assertType(asList("emptyIs"), SIMPLE_PROPERTY, "empty", 1, true); } + @Test // DATACMNS-1129 + public void emptyTreeDoesNotContainParts() { + + PartTree tree = partTree(""); + + assertThat(tree).isEmpty(); + assertThat(tree.hasPredicate()).isFalse(); + + tree = partTree("findByOrderByFirstname"); + + assertThat(tree).isEmpty(); + assertThat(tree.hasPredicate()).isFalse(); + } + private static void assertLimiting(String methodName, Class entityType, boolean limiting, Integer maxResults) { assertLimiting(methodName, entityType, limiting, maxResults, false); }