diff --git a/spring-data-commons-core/src/main/java/org/springframework/data/repository/query/parser/Part.java b/spring-data-commons-core/src/main/java/org/springframework/data/repository/query/parser/Part.java index 60b26a645..721cc8739 100644 --- a/spring-data-commons-core/src/main/java/org/springframework/data/repository/query/parser/Part.java +++ b/spring-data-commons-core/src/main/java/org/springframework/data/repository/query/parser/Part.java @@ -175,14 +175,15 @@ public class Part { BETWEEN(2, "Between"), IS_NOT_NULL(0, "IsNotNull", "NotNull"), IS_NULL(0, "IsNull", "Null"), LESS_THAN("LessThan"), LESS_THAN_EQUAL( "LessThanEqual"), GREATER_THAN("GreaterThan"), GREATER_THAN_EQUAL("GreaterThanEqual"), NOT_LIKE("NotLike"), LIKE( - "Like"), NOT_IN("NotIn"), IN("In"), NEAR("Near"), WITHIN("Within"), REGEX("Regex"), EXISTS(0, "Exists"), TRUE( - 0, "IsTrue", "True"), FALSE(0, "IsFalse", "False"), NEGATING_SIMPLE_PROPERTY("Not"), SIMPLE_PROPERTY; + "Like"), STARTING_WITH("StartingWith", "StartsWith"), ENDING_WITH("EndingWith", "EndsWith"), CONTAINING( + "Containing", "Contains"), NOT_IN("NotIn"), IN("In"), NEAR("Near"), WITHIN("Within"), REGEX("Regex"), EXISTS(0, + "Exists"), TRUE(0, "IsTrue", "True"), FALSE(0, "IsFalse", "False"), NEGATING_SIMPLE_PROPERTY("Not"), SIMPLE_PROPERTY; // Need to list them again explicitly as the order is important // (esp. for IS_NULL, IS_NOT_NULL) private static final List ALL = Arrays.asList(IS_NOT_NULL, IS_NULL, BETWEEN, LESS_THAN, LESS_THAN_EQUAL, - GREATER_THAN, GREATER_THAN_EQUAL, NOT_LIKE, LIKE, NOT_IN, IN, NEAR, WITHIN, REGEX, EXISTS, TRUE, FALSE, - NEGATING_SIMPLE_PROPERTY, SIMPLE_PROPERTY); + GREATER_THAN, GREATER_THAN_EQUAL, NOT_LIKE, LIKE, STARTING_WITH, ENDING_WITH, CONTAINING, NOT_IN, IN, NEAR, + WITHIN, REGEX, EXISTS, TRUE, FALSE, NEGATING_SIMPLE_PROPERTY, SIMPLE_PROPERTY); private final List keywords; private final int numberOfArguments; diff --git a/spring-data-commons-core/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java b/spring-data-commons-core/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java index 8cb0166f0..18161846c 100644 --- a/spring-data-commons-core/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java +++ b/spring-data-commons-core/src/test/java/org/springframework/data/repository/query/parser/PartTreeUnitTests.java @@ -290,6 +290,51 @@ public class PartTreeUnitTests { } } + /** + * @see DATACMNS-111 + */ + @Test + public void parsesStartingWithKeywordCorrectly() { + + for (String source : Arrays.asList("firstnameStartsWith", "firstnameStartingWith")) { + Part part = part(source); + assertThat(part.getType(), is(Type.STARTING_WITH)); + assertThat(part.getProperty().toDotPath(), is("firstname")); + assertThat(part.getNumberOfArguments(), is(1)); + assertThat(part.getParameterRequired(), is(true)); + } + } + + /** + * @see DATACMNS-111 + */ + @Test + public void parsesEndingWithKeywordCorrectly() { + + for (String source : Arrays.asList("firstnameEndsWith", "firstnameEndingWith")) { + Part part = part(source); + assertThat(part.getType(), is(Type.ENDING_WITH)); + assertThat(part.getProperty().toDotPath(), is("firstname")); + assertThat(part.getNumberOfArguments(), is(1)); + assertThat(part.getParameterRequired(), is(true)); + } + } + + /** + * @see DATACMNS-111 + */ + @Test + public void parsesContainingKeywordCorrectly() { + + for (String source : Arrays.asList("firstnameContains", "firstnameContaining")) { + Part part = part(source); + assertThat(part.getType(), is(Type.CONTAINING)); + assertThat(part.getProperty().toDotPath(), is("firstname")); + assertThat(part.getNumberOfArguments(), is(1)); + assertThat(part.getParameterRequired(), is(true)); + } + } + private PartTree partTree(String source) { return new PartTree(source, User.class); }