diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java index 0e5859983..2b8f3db9f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java @@ -134,7 +134,7 @@ class MongoQueryCreator extends AbstractQueryCreator { */ @Override protected Query or(Query base, Query query) { - return new OrQuery(new Query[] {base, query}); + return new OrQuery(new Query[] { base, query }); } /* @@ -192,6 +192,14 @@ class MongoQueryCreator extends AbstractQueryCreator { case LIKE: String value = parameters.next().toString(); return criteria.regex(toLikeRegex(value)); + case REGEX: + return criteria.regex(parameters.next().toString()); + case EXISTS: + return criteria.exists((Boolean) parameters.next()); + case TRUE: + return criteria.is(true); + case FALSE: + return criteria.is(false); case NEAR: Distance distance = accessor.getMaxDistance(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java index 6f056b381..3d6f2148a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java @@ -27,6 +27,8 @@ public class Person { private Person friend; + private boolean active = true; + public Person() { this.id = new ObjectId(); } @@ -80,6 +82,13 @@ public class Person { this.friend = friend; } + /** + * @return the active + */ + public boolean isActive() { + return active; + } + /* * (non-Javadoc) * diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java index 47b89d1fa..5eccee996 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java @@ -66,9 +66,9 @@ public class MongoQueryCreatorUnitTests { @Before public void setUp() throws SecurityException, NoSuchMethodException { - + context = new MongoMappingContext(); - + doAnswer(new Answer() { public Object answer(InvocationOnMock invocation) throws Throwable { return invocation.getArguments()[0]; @@ -151,18 +151,66 @@ public class MongoQueryCreatorUnitTests { } /** - * DATADOC-291 + * @see DATAMONGO-291 */ @Test public void honoursMappingInformationForPropertyPaths() { PartTree partTree = new PartTree("findByUsername", User.class); - + MongoQueryCreator creator = new MongoQueryCreator(partTree, getAccessor(converter, "Oliver"), context); Query reference = query(where("foo").is("Oliver")); assertThat(creator.createQuery().getQueryObject(), is(reference.getQueryObject())); } + /** + * @see DATAMONGO-338 + */ + @Test + public void createsExistsClauseCorrectly() { + + PartTree tree = new PartTree("findByAgeExists", Person.class); + MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, true), context); + Query query = query(where("age").exists(true)); + assertThat(creator.createQuery().getQueryObject(), is(query.getQueryObject())); + } + + /** + * @see DATAMONGO-338 + */ + @Test + public void createsRegexClauseCorrectly() { + + PartTree tree = new PartTree("findByFirstNameRegex", Person.class); + MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, ".*"), context); + Query query = query(where("firstName").regex(".*")); + assertThat(creator.createQuery().getQueryObject(), is(query.getQueryObject())); + } + + /** + * @see DATAMONGO-338 + */ + @Test + public void createsTrueClauseCorrectly() { + + PartTree tree = new PartTree("findByActiveTrue", Person.class); + MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter), context); + Query query = query(where("active").is(true)); + assertThat(creator.createQuery().getQueryObject(), is(query.getQueryObject())); + } + + /** + * @see DATAMONGO-338 + */ + @Test + public void createsFalseClauseCorrectly() { + + PartTree tree = new PartTree("findByActiveFalse", Person.class); + MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter), context); + Query query = query(where("active").is(false)); + assertThat(creator.createQuery().getQueryObject(), is(query.getQueryObject())); + } + private void assertBindsDistanceToQuery(Point point, Distance distance, Query reference) throws Exception { when(converter.convertToMongoType("Dave")).thenReturn("Dave"); @@ -185,9 +233,9 @@ public class MongoQueryCreatorUnitTests { List findByLocationNearAndFirstname(Point location, Distance maxDistance, String firstname); } - + class User { - + @Field("foo") String username; }