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. 60
      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> { @@ -134,7 +134,7 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Query> {
*/
@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<Query, Query> { @@ -192,6 +192,14 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Query> {
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();

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

@ -27,6 +27,8 @@ public class Person { @@ -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 { @@ -80,6 +82,13 @@ public class Person {
this.friend = friend;
}
/**
* @return the active
*/
public boolean isActive() {
return active;
}
/*
* (non-Javadoc)
*

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

@ -66,9 +66,9 @@ public class MongoQueryCreatorUnitTests { @@ -66,9 +66,9 @@ public class MongoQueryCreatorUnitTests {
@Before
public void setUp() throws SecurityException, NoSuchMethodException {
context = new MongoMappingContext();
doAnswer(new Answer<Object>() {
public Object answer(InvocationOnMock invocation) throws Throwable {
return invocation.getArguments()[0];
@ -151,18 +151,66 @@ public class MongoQueryCreatorUnitTests { @@ -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 { @@ -185,9 +233,9 @@ public class MongoQueryCreatorUnitTests {
List<Person> findByLocationNearAndFirstname(Point location, Distance maxDistance, String firstname);
}
class User {
@Field("foo")
String username;
}

Loading…
Cancel
Save