Browse Source

DATAMONGO-469 - Fixed parsing of And keyword in derived queries.

1.0.x
Oliver Gierke 14 years ago
parent
commit
5cf7a86023
  1. 8
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java
  2. 41
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/MongoQueryCreatorUnitTests.java

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

@ -116,13 +116,9 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> { @@ -116,13 +116,9 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> {
return create(part, iterator);
}
PersistentPropertyPath<MongoPersistentProperty> path2 = context.getPersistentPropertyPath(part.getProperty());
Criteria criteria = from(part.getType(),
where(path2.toDotPath(MongoPersistentProperty.PropertyToFieldNameConverter.INSTANCE)),
PersistentPropertyPath<MongoPersistentProperty> path = context.getPersistentPropertyPath(part.getProperty());
return from(part.getType(), where(path.toDotPath(MongoPersistentProperty.PropertyToFieldNameConverter.INSTANCE)),
(PotentiallyConvertingIterator) iterator);
return criteria.andOperator(criteria);
}
/*

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

@ -82,12 +82,22 @@ public class MongoQueryCreatorUnitTests { @@ -82,12 +82,22 @@ public class MongoQueryCreatorUnitTests {
PartTree tree = new PartTree("findByFirstName", Person.class);
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "Oliver"), context);
Query query = creator.createQuery();
assertThat(query, is(query(where("firstName").is("Oliver"))));
}
creator.createQuery();
/**
* @see DATAMONGO-469
*/
@Test
public void createsAndQueryCorrectly() {
Person person = new Person();
MongoQueryCreator creator = new MongoQueryCreator(new PartTree("findByFirstNameAndFriend", Person.class),
getAccessor(converter, "Oliver", person), context);
Query query = creator.createQuery();
creator = new MongoQueryCreator(new PartTree("findByFirstNameAndFriend", Person.class), getAccessor(converter,
"Oliver", new Person()), context);
creator.createQuery();
assertThat(query, is(query(where("firstName").is("Oliver").and("friend").is(person))));
}
@Test
@ -96,7 +106,7 @@ public class MongoQueryCreatorUnitTests { @@ -96,7 +106,7 @@ public class MongoQueryCreatorUnitTests {
PartTree tree = new PartTree("findByFirstNameNotNull", Person.class);
Query query = new MongoQueryCreator(tree, getAccessor(converter), context).createQuery();
assertThat(query.getQueryObject(), is(new Query(Criteria.where("firstName").ne(null)).getQueryObject()));
assertThat(query, is(new Query(Criteria.where("firstName").ne(null))));
}
@Test
@ -105,7 +115,7 @@ public class MongoQueryCreatorUnitTests { @@ -105,7 +115,7 @@ public class MongoQueryCreatorUnitTests {
PartTree tree = new PartTree("findByFirstNameIsNull", Person.class);
Query query = new MongoQueryCreator(tree, getAccessor(converter), context).createQuery();
assertThat(query.getQueryObject(), is(new Query(Criteria.where("firstName").is(null)).getQueryObject()));
assertThat(query, is(new Query(Criteria.where("firstName").is(null))));
}
@Test
@ -137,7 +147,7 @@ public class MongoQueryCreatorUnitTests { @@ -137,7 +147,7 @@ public class MongoQueryCreatorUnitTests {
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, 18), context);
Query reference = query(where("age").lte(18));
assertThat(creator.createQuery().getQueryObject(), is(reference.getQueryObject()));
assertThat(creator.createQuery(), is(reference));
}
@Test
@ -147,7 +157,7 @@ public class MongoQueryCreatorUnitTests { @@ -147,7 +157,7 @@ public class MongoQueryCreatorUnitTests {
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, 18), context);
Query reference = query(where("age").gte(18));
assertThat(creator.createQuery().getQueryObject(), is(reference.getQueryObject()));
assertThat(creator.createQuery(), is(reference));
}
/**
@ -160,7 +170,7 @@ public class MongoQueryCreatorUnitTests { @@ -160,7 +170,7 @@ public class MongoQueryCreatorUnitTests {
MongoQueryCreator creator = new MongoQueryCreator(partTree, getAccessor(converter, "Oliver"), context);
Query reference = query(where("foo").is("Oliver"));
assertThat(creator.createQuery().getQueryObject(), is(reference.getQueryObject()));
assertThat(creator.createQuery(), is(reference));
}
/**
@ -172,7 +182,7 @@ public class MongoQueryCreatorUnitTests { @@ -172,7 +182,7 @@ public class MongoQueryCreatorUnitTests {
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()));
assertThat(creator.createQuery(), is(query));
}
/**
@ -184,7 +194,7 @@ public class MongoQueryCreatorUnitTests { @@ -184,7 +194,7 @@ public class MongoQueryCreatorUnitTests {
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()));
assertThat(creator.createQuery(), is(query));
}
/**
@ -196,7 +206,7 @@ public class MongoQueryCreatorUnitTests { @@ -196,7 +206,7 @@ public class MongoQueryCreatorUnitTests {
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()));
assertThat(creator.createQuery(), is(query));
}
/**
@ -208,7 +218,7 @@ public class MongoQueryCreatorUnitTests { @@ -208,7 +218,7 @@ public class MongoQueryCreatorUnitTests {
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()));
assertThat(creator.createQuery(), is(query));
}
/**
@ -221,8 +231,7 @@ public class MongoQueryCreatorUnitTests { @@ -221,8 +231,7 @@ public class MongoQueryCreatorUnitTests {
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "Dave", 42), context);
Query query = creator.createQuery();
assertThat(query.getQueryObject(),
is(query(new Criteria().orOperator(where("firstName").is("Dave"), where("age").is(42))).getQueryObject()));
assertThat(query, is(query(new Criteria().orOperator(where("firstName").is("Dave"), where("age").is(42)))));
}
private void assertBindsDistanceToQuery(Point point, Distance distance, Query reference) throws Exception {
@ -240,7 +249,7 @@ public class MongoQueryCreatorUnitTests { @@ -240,7 +249,7 @@ public class MongoQueryCreatorUnitTests {
Query query = new MongoQueryCreator(tree, new ConvertingParameterAccessor(converter, accessor), context)
.createQuery();
assertThat(query.getQueryObject(), is(query.getQueryObject()));
assertThat(query, is(query));
}
interface PersonRepository extends Repository<Person, Long> {

Loading…
Cancel
Save