From dd122a7ddb10cf37d03ef669931728251217d7ba Mon Sep 17 00:00:00 2001 From: John Willemin Date: Wed, 2 Mar 2016 21:46:34 -0500 Subject: [PATCH] Fix Query/BasicQuery getFieldsObject() inconsistency Previously, Query.getFieldsObject() and BasicQuery.getFieldsObject() would behave differently in the case of fields().include(). For example: Query query = new Query(jsonStr); query.fields().include("name"); DBObject fieldsObject = query.getFieldsObject(); // fieldsObject contains name, based on the fieldspec However, Query query = new BasicQuery(jsonStr); query.fields().include("name"); DBObject fieldsObject = query.getFieldsObject(); // fieldsObject is null, because BasicQuery was not created // with a fieldsObject in the constructor This fix changes BasicQuery to use the parent's getFieldsObject() in the event that the BasicQuery was created without an explicit fieldsObject in the constructor. Issue: DATAMONGO-1387 --- .../data/mongodb/core/query/BasicQuery.java | 6 +++++- .../mongodb/core/query/BasicQueryUnitTests.java | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/BasicQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/BasicQuery.java index ac36d0de76..da81a0fa61 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/BasicQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/BasicQuery.java @@ -70,7 +70,11 @@ public DBObject getQueryObject() { @Override public DBObject getFieldsObject() { - return fieldsObject; + if(fieldsObject != null) { + return fieldsObject; + } else { + return super.getFieldsObject(); + } } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/BasicQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/BasicQueryUnitTests.java index 1890267c36..aa839cd10d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/BasicQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/BasicQueryUnitTests.java @@ -137,4 +137,21 @@ public void handlesEqualsAndHashCodeCorrectlyWhenQuerySettingsDiffer() { assertThat(query1, is(not(equalTo(query2)))); assertThat(query1.hashCode(), is(not(query2.hashCode()))); } + + /** + * @see DATAMONGO-1387 + */ + @Test + public void handlesFieldsIncludeCorrectly() { + + String qry = "{ \"name\" : \"Thomas\"}"; + + BasicQuery query1 = new BasicQuery(qry); + query1.fields().include("name"); + + DBObject fieldsObject = query1.getFieldsObject(); + fieldsObject.containsField("name"); + assertThat(query1.getFieldsObject(), notNullValue()); + assertThat(query1.getFieldsObject().containsField("name"), is(true)); + } }