Skip to content

Commit 1dca034

Browse files
g0t4rstam
authored andcommitted
Spike of adding WriteRequests to the BulkWriteArgs.
1 parent 5d7ffae commit 1dca034

File tree

4 files changed

+115
-68
lines changed

4 files changed

+115
-68
lines changed

MongoDB.Driver/MongoCollection.cs

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,15 @@ public virtual CommandResult AggregateExplain(AggregateArgs args)
185185
/// Executes multiple write requests.
186186
/// </summary>
187187
/// <param name="args">The args.</param>
188-
/// <param name="requests">The write requests.</param>
189188
/// <returns>
190189
/// A BulkWriteResult.
191190
/// </returns>
192-
public virtual BulkWriteResult BulkWrite(BulkWriteArgs args, IEnumerable<WriteRequest> requests)
191+
public virtual BulkWriteResult BulkWrite(BulkWriteArgs args)
193192
{
193+
if (!args.Requests.Any())
194+
{
195+
throw new ArgumentException("No requests specified in bulk operation.", "args");
196+
}
194197
var connection = _server.AcquireConnection(ReadPreference.Primary);
195198
try
196199
{
@@ -213,7 +216,7 @@ public virtual BulkWriteResult BulkWrite(BulkWriteArgs args, IEnumerable<WriteRe
213216
maxWireDocumentSize,
214217
args.IsOrdered ?? true,
215218
GetBinaryReaderSettings(),
216-
requests,
219+
args.Requests,
217220
writeConcern,
218221
GetBinaryWriterSettings());
219222

@@ -225,19 +228,6 @@ public virtual BulkWriteResult BulkWrite(BulkWriteArgs args, IEnumerable<WriteRe
225228
}
226229
}
227230

228-
/// <summary>
229-
/// Executes multiple write requests.
230-
/// </summary>
231-
/// <param name="args">The args.</param>
232-
/// <param name="requests">The write requests.</param>
233-
/// <returns>
234-
/// A BulkWriteResult.
235-
/// </returns>
236-
public virtual BulkWriteResult BulkWrite(BulkWriteArgs args, params WriteRequest[] requests)
237-
{
238-
return BulkWrite(args, (IEnumerable<WriteRequest>)requests);
239-
}
240-
241231
/// <summary>
242232
/// Counts the number of documents in this collection.
243233
/// </summary>

MongoDB.Driver/Operations/BulkWriteArgs.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515

1616
using System;
17+
using System.Collections.Generic;
1718
namespace MongoDB.Driver
1819
{
1920
/// <summary>
@@ -28,6 +29,7 @@ public class BulkWriteArgs
2829
private int? _maxBatchCount;
2930
private int? _maxBatchLength;
3031
private WriteConcern _writeConcern;
32+
private IList<WriteRequest> _requests;
3133

3234
// public properties
3335
/// <summary>
@@ -98,5 +100,14 @@ public WriteConcern WriteConcern
98100
get { return _writeConcern; }
99101
set { _writeConcern = value; }
100102
}
103+
104+
/// <summary>
105+
/// Gets or sets the write requests.
106+
/// </summary>
107+
public IList<WriteRequest> Requests
108+
{
109+
get { return _requests; }
110+
set { _requests = value; }
111+
}
101112
}
102113
}

MongoDB.Driver/Operations/BulkWriteOperation.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ public BulkWriteResult Execute()
4444
{
4545
var args = new BulkWriteArgs
4646
{
47-
IsOrdered = _isOrdered
47+
IsOrdered = _isOrdered,
48+
Requests = _requests
4849
};
49-
return _collection.BulkWrite(args, _requests);
50+
return _collection.BulkWrite(args);
5051
}
5152

5253
/// <summary>
@@ -63,9 +64,10 @@ public BulkWriteResult Execute(WriteConcern writeConcern)
6364
var args = new BulkWriteArgs
6465
{
6566
IsOrdered = _isOrdered,
66-
WriteConcern = writeConcern
67+
WriteConcern = writeConcern,
68+
Requests = _requests
6769
};
68-
return _collection.BulkWrite(args, _requests);
70+
return _collection.BulkWrite(args);
6971
}
7072

7173
/// <summary>

MongoDB.DriverUnitTests/MongoCollectionTests.cs

Lines changed: 92 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,15 @@ public void TestBulkDelete()
232232
_collection.Insert(new BsonDocument("x", 1));
233233
_collection.Insert(new BsonDocument("x", 2));
234234
_collection.Insert(new BsonDocument("x", 3));
235-
236-
var bulkDeleteResult = _collection.BulkWrite(
237-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged },
238-
new DeleteRequest(Query.EQ("x", 1)),
239-
new DeleteRequest(Query.EQ("x", 3)));
235+
_collection.BulkWrite(new BulkWriteArgs
236+
{
237+
WriteConcern = WriteConcern.Acknowledged,
238+
Requests = new WriteRequest[]
239+
{
240+
new DeleteRequest(Query.EQ("x", 1)),
241+
new DeleteRequest(Query.EQ("x", 3))
242+
}
243+
});
240244

241245
Assert.AreEqual(1, _collection.Count());
242246
Assert.AreEqual(2, _collection.FindOne()["x"].ToInt32());
@@ -246,11 +250,16 @@ public void TestBulkDelete()
246250
public void TestBulkInsert()
247251
{
248252
_collection.Drop();
249-
var result = _collection.BulkWrite(
250-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged },
251-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 1)),
252-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 2)),
253-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 3)));
253+
_collection.BulkWrite(new BulkWriteArgs
254+
{
255+
WriteConcern = WriteConcern.Acknowledged,
256+
Requests = new WriteRequest[]
257+
{
258+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 1)),
259+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 2)),
260+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 3))
261+
}
262+
});
254263

255264
Assert.AreEqual(3, _collection.Count());
256265
}
@@ -276,11 +285,16 @@ public void TestBulkUpdate()
276285
_collection.Insert(new BsonDocument("x", 2));
277286
_collection.Insert(new BsonDocument("x", 3));
278287

279-
var bulkUpdateResult = _collection.BulkWrite(
280-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged },
281-
new UpdateRequest(Query.GT("x", 0), Update.Set("z", 1)) { IsMultiUpdate = true },
282-
new UpdateRequest(Query.EQ("x", 3), Update.Set("z", 3)),
283-
new UpdateRequest(Query.EQ("x", 4), Update.Set("z", 4)) { IsUpsert = true });
288+
_collection.BulkWrite(new BulkWriteArgs
289+
{
290+
WriteConcern = WriteConcern.Acknowledged,
291+
Requests = new WriteRequest[]
292+
{
293+
new UpdateRequest(Query.GT("x", 0), Update.Set("z", 1)) { IsMultiUpdate = true },
294+
new UpdateRequest(Query.EQ("x", 3), Update.Set("z", 3)),
295+
new UpdateRequest(Query.EQ("x", 4), Update.Set("z", 4)) { IsUpsert = true }
296+
}
297+
});
284298

285299
Assert.AreEqual(4, _collection.Count());
286300
foreach (var document in _collection.FindAll())
@@ -296,15 +310,20 @@ public void TestBulkUpdate()
296310
public void TestBulkWrite()
297311
{
298312
_collection.Drop();
299-
var result = _collection.BulkWrite(
300-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged },
301-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 1)),
302-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 2)),
303-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 3)),
304-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 4)),
305-
new UpdateRequest(Query.GT("x", 2), Update.Inc("x", 10)) { IsMultiUpdate = true },
306-
new DeleteRequest(Query.EQ("x", 13)),
307-
new DeleteRequest(Query.EQ("x", 14)));
313+
_collection.BulkWrite(new BulkWriteArgs
314+
{
315+
WriteConcern = WriteConcern.Acknowledged,
316+
Requests = new WriteRequest[]
317+
{
318+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 1)),
319+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 2)),
320+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 3)),
321+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 4)),
322+
new UpdateRequest(Query.GT("x", 2), Update.Inc("x", 10)) { IsMultiUpdate = true },
323+
new DeleteRequest(Query.EQ("x", 13)),
324+
new DeleteRequest(Query.EQ("x", 14))
325+
}
326+
});
308327

309328
Assert.AreEqual(2, _collection.Count());
310329
}
@@ -313,11 +332,17 @@ public void TestBulkWrite()
313332
public void TestBulkWriteCounts()
314333
{
315334
_collection.Drop();
316-
var result = _collection.BulkWrite(
317-
new BulkWriteArgs { IsOrdered = true, WriteConcern = WriteConcern.Acknowledged },
318-
new InsertRequest(typeof(BsonDocument), new BsonDocument("x", 1)),
319-
new UpdateRequest(Query.EQ("x", 1), Update.Set("x", 2)),
320-
new DeleteRequest(Query.EQ("x", 2)));
335+
var result = _collection.BulkWrite(new BulkWriteArgs
336+
{
337+
IsOrdered = true,
338+
WriteConcern = WriteConcern.Acknowledged,
339+
Requests = new WriteRequest[]
340+
{
341+
new InsertRequest(typeof (BsonDocument), new BsonDocument("x", 1)),
342+
new UpdateRequest(Query.EQ("x", 1), Update.Set("x", 2)),
343+
new DeleteRequest(Query.EQ("x", 2))
344+
}
345+
});
321346

322347
Assert.AreEqual(1, result.DeletedCount);
323348
Assert.AreEqual(1, result.InsertedCount);
@@ -335,11 +360,18 @@ public void TestBulkWriteCountsWithUpsert()
335360

336361
_collection.Drop();
337362
var id = new BsonObjectId(ObjectId.GenerateNewId());
338-
var result = _collection.BulkWrite(
339-
new BulkWriteArgs { IsOrdered = true, WriteConcern = WriteConcern.Acknowledged },
340-
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 2)) { IsUpsert = true },
341-
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 2)) { IsUpsert = true },
342-
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 3)));
363+
364+
var result = _collection.BulkWrite(new BulkWriteArgs
365+
{
366+
IsOrdered = true,
367+
WriteConcern = WriteConcern.Acknowledged,
368+
Requests = new WriteRequest[]
369+
{
370+
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 2)) { IsUpsert = true },
371+
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 2)) { IsUpsert = true },
372+
new UpdateRequest(Query.EQ("_id", id), Update.Set("x", 3))
373+
}
374+
});
343375

344376
var expectedModifiedCount = 1;
345377
if (serverInstance.BuildInfo.Version < new Version(2, 5, 5))
@@ -362,13 +394,19 @@ public void TestBulkWriteCountsWithUpsert()
362394
public void TestBulkWriteOrdered()
363395
{
364396
_collection.Drop();
365-
var result = _collection.BulkWrite(
366-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged, IsOrdered = true },
367-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
368-
new DeleteRequest(Query.EQ("x", 1)),
369-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
370-
new DeleteRequest(Query.EQ("x", 1)),
371-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true });
397+
_collection.BulkWrite(new BulkWriteArgs
398+
{
399+
WriteConcern = WriteConcern.Acknowledged,
400+
IsOrdered = true,
401+
Requests = new WriteRequest[]
402+
{
403+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
404+
new DeleteRequest(Query.EQ("x", 1)),
405+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
406+
new DeleteRequest(Query.EQ("x", 1)),
407+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true }
408+
}
409+
});
372410

373411
Assert.AreEqual(1, _collection.Count());
374412
}
@@ -377,13 +415,19 @@ public void TestBulkWriteOrdered()
377415
public void TestBulkWriteUnordered()
378416
{
379417
_collection.Drop();
380-
var result = _collection.BulkWrite(
381-
new BulkWriteArgs { WriteConcern = WriteConcern.Acknowledged, IsOrdered = false },
382-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
383-
new DeleteRequest(Query.EQ("x", 1)),
384-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
385-
new DeleteRequest(Query.EQ("x", 1)),
386-
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true });
418+
_collection.BulkWrite(new BulkWriteArgs
419+
{
420+
WriteConcern = WriteConcern.Acknowledged,
421+
IsOrdered = false,
422+
Requests = new WriteRequest[]
423+
{
424+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
425+
new DeleteRequest(Query.EQ("x", 1)),
426+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true },
427+
new DeleteRequest(Query.EQ("x", 1)),
428+
new UpdateRequest(Query.EQ("x", 1), Update.Set("y", 1)) { IsUpsert = true }
429+
}
430+
});
387431

388432
Assert.AreEqual(0, _collection.Count());
389433
}

0 commit comments

Comments
 (0)