From f7b796dcee62dc010f87320edff3bba019f423c9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 5 Dec 2011 12:39:42 +0100 Subject: [PATCH] DATACMNS-94 - Added Regex and Exists keywords for query parser. --- .../data/repository/query/parser/Part.java | 22 ++++------------ .../query/parser/PartTreeUnitTests.java | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 17 deletions(-) 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 711bfc954..7e44630f0 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 @@ -173,42 +173,30 @@ public class Part { public static enum Type { 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"), 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, NEGATING_SIMPLE_PROPERTY, SIMPLE_PROPERTY); + NOT_LIKE, LIKE, NOT_IN, IN, NEAR, WITHIN, REGEX, EXISTS, NEGATING_SIMPLE_PROPERTY, SIMPLE_PROPERTY); - private List keywords; - private int numberOfArguments; + private final List keywords; + private final int numberOfArguments; /** * Creates a new {@link Type} using the given keyword, number of arguments to be bound and operator. Keyword and 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 d33245943..c4757c784 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 @@ -233,6 +233,32 @@ public class PartTreeUnitTests { assertThat(parts, is(hasSize(1))); } + /** + * @see DATACMNS-94 + */ + @Test + public void parsesExistsKeywordCorrectly() { + + Part part = part("lastnameExists"); + assertThat(part.getType(), is(Type.EXISTS)); + assertThat(part.getProperty().toDotPath(), is("lastname")); + assertThat(part.getNumberOfArguments(), is(0)); + assertThat(part.getParameterRequired(), is(false)); + } + + /** + * @see DATACMNS-94 + */ + @Test + public void parsesRegexKeywordCorrectly() { + + Part part = part("lastnameRegex"); + assertThat(part.getType(), is(Type.REGEX)); + assertThat(part.getProperty().toDotPath(), is("lastname")); + assertThat(part.getNumberOfArguments(), is(1)); + assertThat(part.getParameterRequired(), is(true)); + } + private PartTree partTree(String source) { return new PartTree(source, User.class); }