@@ -115,13 +115,26 @@ mongoc_bulk_operation_remove (mongoc_bulk_operation_t *bulk, /* IN */
115
115
const bson_t * selector ) /* IN */
116
116
{
117
117
mongoc_write_command_t command = { 0 };
118
+ mongoc_write_command_t * last ;
119
+
120
+ ENTRY ;
118
121
119
122
bson_return_if_fail (bulk );
120
123
bson_return_if_fail (selector );
121
124
122
- ENTRY ;
125
+ if (bulk -> commands .len ) {
126
+ last = & _mongoc_array_index (& bulk -> commands ,
127
+ mongoc_write_command_t ,
128
+ bulk -> commands .len - 1 );
129
+ if ((last -> type == MONGOC_WRITE_COMMAND_DELETE ) &&
130
+ last -> u .delete .multi ) {
131
+ _mongoc_write_command_delete_append (last , selector );
132
+ EXIT ;
133
+ }
134
+ }
123
135
124
136
_mongoc_write_command_init_delete (& command , selector , true, bulk -> ordered );
137
+
125
138
_mongoc_array_append_val (& bulk -> commands , command );
126
139
127
140
EXIT ;
@@ -133,13 +146,26 @@ mongoc_bulk_operation_remove_one (mongoc_bulk_operation_t *bulk, /* IN */
133
146
const bson_t * selector ) /* IN */
134
147
{
135
148
mongoc_write_command_t command = { 0 };
149
+ mongoc_write_command_t * last ;
150
+
151
+ ENTRY ;
136
152
137
153
bson_return_if_fail (bulk );
138
154
bson_return_if_fail (selector );
139
155
140
- ENTRY ;
156
+ if (bulk -> commands .len ) {
157
+ last = & _mongoc_array_index (& bulk -> commands ,
158
+ mongoc_write_command_t ,
159
+ bulk -> commands .len - 1 );
160
+ if ((last -> type == MONGOC_WRITE_COMMAND_DELETE ) &&
161
+ !last -> u .delete .multi ) {
162
+ _mongoc_write_command_delete_append (last , selector );
163
+ EXIT ;
164
+ }
165
+ }
141
166
142
167
_mongoc_write_command_init_delete (& command , selector , false, bulk -> ordered );
168
+
143
169
_mongoc_array_append_val (& bulk -> commands , command );
144
170
145
171
EXIT ;
@@ -186,6 +212,7 @@ mongoc_bulk_operation_insert (mongoc_bulk_operation_t *bulk,
186
212
last = & _mongoc_array_index (& bulk -> commands ,
187
213
mongoc_write_command_t ,
188
214
bulk -> commands .len - 1 );
215
+
189
216
if (last -> type == MONGOC_WRITE_COMMAND_INSERT ) {
190
217
_mongoc_write_command_insert_append (last , & document , 1 );
191
218
EXIT ;
@@ -209,6 +236,7 @@ mongoc_bulk_operation_replace_one (mongoc_bulk_operation_t *bulk,
209
236
{
210
237
mongoc_write_command_t command = { 0 };
211
238
size_t err_off ;
239
+ mongoc_write_command_t * last ;
212
240
213
241
bson_return_if_fail (bulk );
214
242
bson_return_if_fail (selector );
@@ -225,6 +253,16 @@ mongoc_bulk_operation_replace_one (mongoc_bulk_operation_t *bulk,
225
253
EXIT ;
226
254
}
227
255
256
+ if (bulk -> commands .len ) {
257
+ last = & _mongoc_array_index (& bulk -> commands ,
258
+ mongoc_write_command_t ,
259
+ bulk -> commands .len - 1 );
260
+ if (last -> type == MONGOC_WRITE_COMMAND_UPDATE ) {
261
+ _mongoc_write_command_update_append (last , selector , document , upsert , false);
262
+ EXIT ;
263
+ }
264
+ }
265
+
228
266
_mongoc_write_command_init_update (& command , selector , document , upsert ,
229
267
false, bulk -> ordered );
230
268
_mongoc_array_append_val (& bulk -> commands , command );
@@ -239,8 +277,10 @@ mongoc_bulk_operation_update (mongoc_bulk_operation_t *bulk,
239
277
const bson_t * document ,
240
278
bool upsert )
241
279
{
280
+ bool multi = true;
242
281
mongoc_write_command_t command = { 0 };
243
282
bson_iter_t iter ;
283
+ mongoc_write_command_t * last ;
244
284
245
285
bson_return_if_fail (bulk );
246
286
bson_return_if_fail (selector );
@@ -258,8 +298,18 @@ mongoc_bulk_operation_update (mongoc_bulk_operation_t *bulk,
258
298
}
259
299
}
260
300
301
+ if (bulk -> commands .len ) {
302
+ last = & _mongoc_array_index (& bulk -> commands ,
303
+ mongoc_write_command_t ,
304
+ bulk -> commands .len - 1 );
305
+ if (last -> type == MONGOC_WRITE_COMMAND_UPDATE ) {
306
+ _mongoc_write_command_update_append (last , selector , document , upsert , multi );
307
+ EXIT ;
308
+ }
309
+ }
310
+
261
311
_mongoc_write_command_init_update (& command , selector , document , upsert ,
262
- true , bulk -> ordered );
312
+ multi , bulk -> ordered );
263
313
_mongoc_array_append_val (& bulk -> commands , command );
264
314
EXIT ;
265
315
}
@@ -273,6 +323,7 @@ mongoc_bulk_operation_update_one (mongoc_bulk_operation_t *bulk,
273
323
{
274
324
mongoc_write_command_t command = { 0 };
275
325
bson_iter_t iter ;
326
+ mongoc_write_command_t * last ;
276
327
277
328
bson_return_if_fail (bulk );
278
329
bson_return_if_fail (selector );
@@ -290,6 +341,16 @@ mongoc_bulk_operation_update_one (mongoc_bulk_operation_t *bulk,
290
341
}
291
342
}
292
343
344
+ if (bulk -> commands .len ) {
345
+ last = & _mongoc_array_index (& bulk -> commands ,
346
+ mongoc_write_command_t ,
347
+ bulk -> commands .len - 1 );
348
+ if (last -> type == MONGOC_WRITE_COMMAND_UPDATE ) {
349
+ _mongoc_write_command_update_append (last , selector , document , upsert , false);
350
+ EXIT ;
351
+ }
352
+ }
353
+
293
354
_mongoc_write_command_init_update (& command , selector , document , upsert ,
294
355
false, bulk -> ordered );
295
356
_mongoc_array_append_val (& bulk -> commands , command );
0 commit comments