18
18
using MongoDB . Bson ;
19
19
using MongoDB . Driver ;
20
20
using MongoDB . Driver . Builders ;
21
+ using MongoDB . Driver . Core ;
21
22
using MongoDB . Driver . Linq ;
22
23
using NUnit . Framework ;
23
24
@@ -83,7 +84,7 @@ public void TestQueryWithProjectionHasIndexNameHint()
83
84
[ Test ]
84
85
public void TestQueryWithConditionHasIndexNameHint ( )
85
86
{
86
- var query = _collection . AsQueryable ( ) . Where ( o=> o . a == 1 && o . b == 3 ) . WithIndex ( "i" ) ;
87
+ var query = _collection . AsQueryable ( ) . Where ( o => o . a == 1 && o . b == 3 ) . WithIndex ( "i" ) ;
87
88
var selectQuery = ( SelectQuery ) MongoQueryTranslator . Translate ( query ) ;
88
89
Assert . AreEqual ( "i" , selectQuery . IndexHint . AsString ) ;
89
90
Assert . AreEqual ( "{ \" a\" : 1, \" b\" : 3 }" , selectQuery . BuildQuery ( ) . ToJson ( ) ) ;
@@ -111,7 +112,7 @@ public void TestIndexNameHintIsUsedInQuery()
111
112
{
112
113
var winningPlan = plan [ "queryPlanner" ] [ "winningPlan" ] . AsBsonDocument ;
113
114
var stage = winningPlan [ "stage" ] . AsString ;
114
- Assert . That ( stage , Is . EqualTo ( "COLLSCAN " ) ) ;
115
+ Assert . That ( stage , Is . Not . EqualTo ( "IXSCAN " ) ) ;
115
116
}
116
117
117
118
// Now check that we can force it to use our index
@@ -124,6 +125,10 @@ public void TestIndexNameHintIsUsedInQuery()
124
125
else
125
126
{
126
127
var winningPlan = plan [ "queryPlanner" ] [ "winningPlan" ] . AsBsonDocument ;
128
+ if ( winningPlan . Contains ( "shards" ) )
129
+ {
130
+ winningPlan = winningPlan [ "shards" ] [ 0 ] [ "winningPlan" ] . AsBsonDocument ;
131
+ }
127
132
var inputStage = winningPlan [ "inputStage" ] . AsBsonDocument ;
128
133
var stage = inputStage [ "stage" ] . AsString ;
129
134
var keyPattern = inputStage [ "keyPattern" ] . AsBsonDocument ;
@@ -192,7 +197,7 @@ public void TestIndexDocumentHintIsUsedInQuery()
192
197
{
193
198
var winningPlan = plan [ "queryPlanner" ] [ "winningPlan" ] . AsBsonDocument ;
194
199
var stage = winningPlan [ "stage" ] . AsString ;
195
- Assert . That ( stage , Is . EqualTo ( "COLLSCAN " ) ) ;
200
+ Assert . That ( stage , Is . Not . EqualTo ( "IXSCAN " ) ) ;
196
201
}
197
202
198
203
// Now check that we can force it to use our index
@@ -207,6 +212,10 @@ public void TestIndexDocumentHintIsUsedInQuery()
207
212
else
208
213
{
209
214
var winningPlan = plan [ "queryPlanner" ] [ "winningPlan" ] . AsBsonDocument ;
215
+ if ( winningPlan . Contains ( "shards" ) )
216
+ {
217
+ winningPlan = winningPlan [ "shards" ] [ 0 ] [ "winningPlan" ] . AsBsonDocument ;
218
+ }
210
219
var inputStage = winningPlan [ "inputStage" ] . AsBsonDocument ;
211
220
var stage = inputStage [ "stage" ] . AsString ;
212
221
var keyPattern = inputStage [ "keyPattern" ] . AsBsonDocument ;
@@ -225,13 +234,13 @@ public void TestWithIndexCannotBeBeforeDistinct()
225
234
[ Test ]
226
235
public void TestWithIndexCannotBeAfterDistinct ( )
227
236
{
228
- Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable ( ) . Select ( o => o . a ) . Distinct ( ) . WithIndex ( "i" ) . ToList ( ) ) ;
237
+ Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable ( ) . Select ( o => o . a ) . Distinct ( ) . WithIndex ( "i" ) . ToList ( ) ) ;
229
238
}
230
239
231
240
[ Test ]
232
241
public void TestThereCanOnlyBeOneIndexHint ( )
233
242
{
234
- Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable ( ) . WithIndex ( "i" ) . WithIndex ( new BsonDocument ( "a" , 1 ) ) . ToList ( ) ) ;
243
+ Assert . Throws < NotSupportedException > ( ( ) => _collection . AsQueryable ( ) . WithIndex ( "i" ) . WithIndex ( new BsonDocument ( "a" , 1 ) ) . ToList ( ) ) ;
235
244
}
236
245
237
246
}
0 commit comments