@@ -74,15 +74,17 @@ class DBCursorFunctionalSpecification extends FunctionalSpecification {
74
74
75
75
when :
76
76
dbCursor = collection. find(). hint(new BasicDBObject (' a' , 1 ))
77
+ def explainPlan = dbCursor. explain()
77
78
78
79
then :
79
- dbCursor . explain() . queryPlanner . winningPlan . inputStage . keyPattern == cursorMap
80
+ getKeyPattern(explainPlan) == cursorMap
80
81
81
82
when :
82
83
dbCursor = collection. find(). addSpecial(' $hint' , new BasicDBObject (' a' , 1 ))
84
+ explainPlan = dbCursor. explain()
83
85
84
86
then :
85
- dbCursor . explain() . queryPlanner . winningPlan . inputStage . keyPattern == cursorMap
87
+ getKeyPattern(explainPlan) == cursorMap
86
88
}
87
89
88
90
def ' should use provided hint for count' () {
@@ -118,15 +120,17 @@ class DBCursorFunctionalSpecification extends FunctionalSpecification {
118
120
119
121
when :
120
122
dbCursor = collection. find(). hint(' a_1' )
123
+ def explainPlan = dbCursor. explain()
121
124
122
125
then :
123
- dbCursor . explain() . queryPlanner . winningPlan . inputStage . keyPattern == cursorMap
126
+ getKeyPattern(explainPlan) == cursorMap
124
127
125
128
when :
126
129
dbCursor = collection. find(). addSpecial(' $hint' , ' a_1' )
130
+ explainPlan = dbCursor. explain()
127
131
128
132
then :
129
- dbCursor . explain() . queryPlanner . winningPlan . inputStage . keyPattern == cursorMap
133
+ getKeyPattern(explainPlan) == cursorMap
130
134
}
131
135
132
136
def ' should use provided hints for count' () {
@@ -209,9 +213,10 @@ class DBCursorFunctionalSpecification extends FunctionalSpecification {
209
213
when :
210
214
dbCursor = collection. find(). hint(new BasicDBObject (' a' , 1 ))
211
215
dbCursor. addSpecial(' $explain' , 1 )
216
+ def explainPlan = dbCursor. explain()
212
217
213
218
then :
214
- dbCursor . explain() . queryPlanner . winningPlan . inputStage . keyPattern == cursorMap
219
+ getKeyPattern(explainPlan) == cursorMap
215
220
}
216
221
217
222
@@ -372,4 +377,12 @@ class DBCursorFunctionalSpecification extends FunctionalSpecification {
372
377
then :
373
378
executor. getReadPreference() == ReadPreference . secondaryPreferred()
374
379
}
380
+
381
+ static DBObject getKeyPattern (DBObject explainPlan ) {
382
+ if (explainPlan. queryPlanner. winningPlan. inputStage != null ) {
383
+ return explainPlan. queryPlanner. winningPlan. inputStage. keyPattern
384
+ } else if (explainPlan. queryPlanner. winningPlan. shards != null ) {
385
+ return explainPlan. queryPlanner. winningPlan. shards[0 ]. winningPlan. inputStage. keyPattern
386
+ }
387
+ }
375
388
}
0 commit comments