Browse Source

DATAMONGO-338 - Query parser implementation go Regex, Exists, True and False keywords.

pull/1/head
Oliver Gierke 14 years ago
parent
commit
b5958fb5cc
  1. 10
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java
  2. 9
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java
  3. 50
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java

10
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java

@ -134,7 +134,7 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Query> {
*/ */
@Override @Override
protected Query or(Query base, Query query) { 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<Query, Query> {
case LIKE: case LIKE:
String value = parameters.next().toString(); String value = parameters.next().toString();
return criteria.regex(toLikeRegex(value)); 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: case NEAR:
Distance distance = accessor.getMaxDistance(); Distance distance = accessor.getMaxDistance();

9
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Person.java

@ -27,6 +27,8 @@ public class Person {
private Person friend; private Person friend;
private boolean active = true;
public Person() { public Person() {
this.id = new ObjectId(); this.id = new ObjectId();
} }
@ -80,6 +82,13 @@ public class Person {
this.friend = friend; this.friend = friend;
} }
/**
* @return the active
*/
public boolean isActive() {
return active;
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* *

50
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java

@ -151,7 +151,7 @@ public class MongoQueryCreatorUnitTests {
} }
/** /**
* DATADOC-291 * @see DATAMONGO-291
*/ */
@Test @Test
public void honoursMappingInformationForPropertyPaths() { public void honoursMappingInformationForPropertyPaths() {
@ -163,6 +163,54 @@ public class MongoQueryCreatorUnitTests {
assertThat(creator.createQuery().getQueryObject(), is(reference.getQueryObject())); 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 { private void assertBindsDistanceToQuery(Point point, Distance distance, Query reference) throws Exception {
when(converter.convertToMongoType("Dave")).thenReturn("Dave"); when(converter.convertToMongoType("Dave")).thenReturn("Dave");

Loading…
Cancel
Save