diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java index c000d4e32..ace202e65 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java @@ -31,6 +31,7 @@ import com.mongodb.DBObject; * * @author Oliver Gierke * @author Thomas Darimont + * @author Christoph Strobl */ public class NearQuery { @@ -143,10 +144,12 @@ public class NearQuery { /** * Configures the {@link Pageable} to use. * - * @param pageable + * @param pageable must not be {@literal null} * @return */ public NearQuery with(Pageable pageable) { + + Assert.notNull(pageable, "Pageable must not be 'null'."); this.num = pageable.getOffset() + pageable.getPageSize(); this.skip = pageable.getOffset(); return this; @@ -311,13 +314,18 @@ public class NearQuery { /** * Adds an actual query to the {@link NearQuery} to restrict the objects considered for the actual near operation. * - * @param query + * @param query must not be {@literal null}. * @return */ public NearQuery query(Query query) { + + Assert.notNull(query, "Cannot apply 'null' query on NearQuery."); this.query = query; this.skip = query.getSkip(); - this.num = query.getLimit(); + + if (query.getLimit() != 0) { + this.num = query.getLimit(); + } return this; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DBObjectUtils.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DBObjectUtils.java index a9be3ba3a..52bad476f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DBObjectUtils.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DBObjectUtils.java @@ -70,7 +70,7 @@ public abstract class DBObjectUtils { } @SuppressWarnings("unchecked") - private static T getTypedValue(DBObject source, String key, Class type) { + public static T getTypedValue(DBObject source, String key, Class type) { Object value = source.get(key); assertThat(value, is(notNullValue())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java index b97bf90d7..57f31dc93 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/NearQueryUnitTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2013 the original author or authors. + * Copyright 2011-2014 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. @@ -21,6 +21,7 @@ import static org.junit.Assert.*; import org.junit.Test; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.data.mongodb.core.DBObjectUtils; import org.springframework.data.mongodb.core.geo.Distance; import org.springframework.data.mongodb.core.geo.Metric; import org.springframework.data.mongodb.core.geo.Metrics; @@ -31,6 +32,7 @@ import org.springframework.data.mongodb.core.geo.Point; * * @author Oliver Gierke * @author Thomas Darimont + * @author Christoph Strobl */ public class NearQueryUnitTests { @@ -123,4 +125,36 @@ public class NearQueryUnitTests { assertThat(query.getSkip(), is(pageable.getPageNumber() * pageable.getPageSize())); assertThat((Integer) query.toDBObject().get("num"), is((pageable.getPageNumber() + 1) * pageable.getPageSize())); } + + /** + * @see DATAMONGO-829 + */ + @Test + public void nearQueryShouldInoreZeroLimitFromQuery() { + + NearQuery query = NearQuery.near(new Point(1, 2)).query(Query.query(Criteria.where("foo").is("bar"))); + assertThat(query.toDBObject().get("num"), nullValue()); + } + + /** + * @see DATAMONOGO-829 + */ + @Test(expected = IllegalArgumentException.class) + public void nearQueryShouldThrowExceptionWhenGivenANullQuery() { + NearQuery.near(new Point(1, 2)).query(null); + } + + /** + * @see DATAMONGO-829 + */ + @Test + public void numShouldNotBeAlteredByQueryWithoutPageable() { + + int num = 100; + NearQuery query = NearQuery.near(new Point(1, 2)); + query.num(num); + query.query(Query.query(Criteria.where("foo").is("bar"))); + + assertThat(DBObjectUtils.getTypedValue(query.toDBObject(), "num", Integer.class), is(num)); + } }