Skip to content

Commit 84142a3

Browse files
committed
Apply hint, min, and max to explainable find operation
As part of the changes in DBCursor for JAVA-3022, hint, min, and max are set as individual properties on FindOperation rather than via modifiers. However, FindOperation was not correctly applying them to a $explain query in pre-3.2 MongoDB servers. Now it is. JAVA-3022
1 parent 16a1558 commit 84142a3

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

driver-core/src/main/com/mongodb/operation/FindOperation.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import static com.mongodb.assertions.Assertions.notNull;
6262
import static com.mongodb.connection.ServerType.SHARD_ROUTER;
6363
import static com.mongodb.internal.async.ErrorHandlingResultCallback.errorHandlingCallback;
64+
import static com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo;
6465
import static com.mongodb.operation.CommandOperationHelper.CommandTransformer;
6566
import static com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol;
6667
import static com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocolAsync;
@@ -69,7 +70,6 @@
6970
import static com.mongodb.operation.OperationHelper.LOGGER;
7071
import static com.mongodb.operation.OperationHelper.cursorDocumentToQueryResult;
7172
import static com.mongodb.operation.OperationHelper.releasingCallback;
72-
import static com.mongodb.internal.operation.ServerVersionHelper.serverIsAtLeastVersionThreeDotTwo;
7373
import static com.mongodb.operation.OperationHelper.validateReadConcernAndCollation;
7474
import static com.mongodb.operation.OperationHelper.withConnection;
7575
import static com.mongodb.operation.OperationReadConcernHelper.appendReadConcernToCommand;
@@ -911,6 +911,9 @@ private FindOperation<BsonDocument> createExplainableQueryOperation() {
911911
.sort(sort)
912912
.skip(skip)
913913
.limit(Math.abs(limit) * -1)
914+
.hint(hint)
915+
.min(min)
916+
.max(max)
914917
.modifiers(explainModifiers);
915918

916919
}

driver-core/src/test/functional/com/mongodb/operation/FindOperationSpecification.groovy

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,9 @@ class FindOperationSpecification extends OperationFunctionalSpecification {
636636
.projection(new BsonDocument('x', new BsonInt32(1)))
637637
.sort(new BsonDocument('y', new BsonInt32(-1)))
638638
.filter(new BsonDocument('z', new BsonString('val')))
639+
.hint(new BsonDocument('a', new BsonInt32(1)))
640+
.min(new BsonDocument('min', new BsonInt32(1)))
641+
.max(new BsonDocument('max', new BsonInt32(1)))
639642
def binding = Stub(ReadBinding)
640643
def source = Stub(ConnectionSource)
641644
def connection = Mock(Connection)
@@ -652,7 +655,10 @@ class FindOperationSpecification extends OperationFunctionalSpecification {
652655
new ServerVersion(2, 6), STANDALONE, 1000, 100000, 100000, [])
653656

654657
1 * connection.query(getNamespace(), new BsonDocument('$query', operation.filter)
655-
.append('$explain', BsonBoolean.TRUE).append('$orderby', operation.sort),
658+
.append('$explain', BsonBoolean.TRUE).append('$orderby', operation.sort)
659+
.append('$hint', operation.hint)
660+
.append('$min', operation.min)
661+
.append('$max', operation.max),
656662
operation.projection, 0, -20, 0, false, false, false, false, false, false, _) >>
657663
new QueryResult(getNamespace(), [new BsonDocument('n', new BsonInt32(1))], 0, new ServerAddress())
658664

0 commit comments

Comments
 (0)