diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/OrQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/OrQuery.java deleted file mode 100644 index 9060ecef3..000000000 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/OrQuery.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2010-2011 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.springframework.data.mongodb.core.query; - -import java.util.ArrayList; -import java.util.List; - -public class OrQuery extends Query { - - public OrQuery(Query... q) { - super(getOrCriteria(q)); - } - - private static Criteria getOrCriteria(Query[] queries) { - List criteriaList = new ArrayList(); - for (Query q : queries) { - criteriaList.addAll(q.getCriteria()); - } - return new Criteria(criteriaList, "$or"); - } - -} 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 2188713f3..c91fcf4cf 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 @@ -31,7 +31,6 @@ import org.springframework.data.mongodb.core.geo.Shape; import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.CriteriaDefinition; -import org.springframework.data.mongodb.core.query.OrQuery; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.repository.query.ConvertingParameterAccessor.PotentiallyConvertingIterator; import org.springframework.data.repository.query.parser.AbstractQueryCreator; @@ -45,7 +44,7 @@ import org.springframework.util.Assert; * * @author Oliver Gierke */ -class MongoQueryCreator extends AbstractQueryCreator { +class MongoQueryCreator extends AbstractQueryCreator { private static final Logger LOG = LoggerFactory.getLogger(MongoQueryCreator.class); private final MongoParameterAccessor accessor; @@ -92,7 +91,7 @@ class MongoQueryCreator extends AbstractQueryCreator { * @see org.springframework.data.repository.query.parser.AbstractQueryCreator#create(org.springframework.data.repository.query.parser.Part, java.util.Iterator) */ @Override - protected Query create(Part part, Iterator iterator) { + protected Criteria create(Part part, Iterator iterator) { if (isGeoNearQuery && part.getType().equals(Type.NEAR)) { return null; @@ -103,7 +102,7 @@ class MongoQueryCreator extends AbstractQueryCreator { where(path.toDotPath(MongoPersistentProperty.PropertyToFieldNameConverter.INSTANCE)), (PotentiallyConvertingIterator) iterator); - return new Query(criteria); + return criteria; } /* @@ -111,7 +110,7 @@ class MongoQueryCreator extends AbstractQueryCreator { * @see org.springframework.data.repository.query.parser.AbstractQueryCreator#and(org.springframework.data.repository.query.parser.Part, java.lang.Object, java.util.Iterator) */ @Override - protected Query and(Part part, Query base, Iterator iterator) { + protected Criteria and(Part part, Criteria base, Iterator iterator) { if (base == null) { return create(part, iterator); @@ -122,7 +121,8 @@ class MongoQueryCreator extends AbstractQueryCreator { Criteria criteria = from(part.getType(), where(path2.toDotPath(MongoPersistentProperty.PropertyToFieldNameConverter.INSTANCE)), (PotentiallyConvertingIterator) iterator); - return base.addCriteria(criteria); + + return criteria.andOperator(criteria); } /* @@ -133,8 +133,10 @@ class MongoQueryCreator extends AbstractQueryCreator { * #or(java.lang.Object, java.lang.Object) */ @Override - protected Query or(Query base, Query query) { - return new OrQuery(new Query[] { base, query }); + protected Criteria or(Criteria base, Criteria criteria) { + + Criteria result = new Criteria(); + return result.orOperator(base, criteria); } /* @@ -145,12 +147,13 @@ class MongoQueryCreator extends AbstractQueryCreator { * #complete(java.lang.Object, org.springframework.data.domain.Sort) */ @Override - protected Query complete(Query query, Sort sort) { + protected Query complete(Criteria criteria, Sort sort) { - if (query == null) { + if (criteria == null) { return null; } + Query query = new Query(criteria); QueryUtils.applySorting(query, sort); if (LOG.isDebugEnabled()) { 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 5eccee996..e5a221610 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 @@ -1,5 +1,5 @@ /* - * Copyright 2011 the original author or authors. + * Copyright 2011-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -211,6 +211,20 @@ public class MongoQueryCreatorUnitTests { assertThat(creator.createQuery().getQueryObject(), is(query.getQueryObject())); } + /** + * @see DATAMONGO + */ + @Test + public void createsOrQueryCorrectly() { + + PartTree tree = new PartTree("findByFirstNameOrAge", Person.class); + 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())); + } + private void assertBindsDistanceToQuery(Point point, Distance distance, Query reference) throws Exception { when(converter.convertToMongoType("Dave")).thenReturn("Dave");