Skip to content

Commit 29754a1

Browse files
committed
PHPC-680: BulkWrite::count() should return number of operations
Previously, this returned the estimated number of round-trips, which is neither reliable (see: CDRIVER-653) nor particularly useful.
1 parent 7d4adcc commit 29754a1

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

php_phongo_structs-5.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ typedef struct {
8787
typedef struct {
8888
zend_object std;
8989
mongoc_bulk_operation_t *bulk;
90+
size_t num_ops;
9091
} php_phongo_bulkwrite_t;
9192

9293
typedef struct {

php_phongo_structs-7.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ typedef struct {
8686

8787
typedef struct {
8888
mongoc_bulk_operation_t *bulk;
89+
size_t num_ops;
8990
zend_object std;
9091
} php_phongo_bulkwrite_t;
9192

src/MongoDB/BulkWrite.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ PHP_METHOD(BulkWrite, __construct)
7676
}
7777

7878
intern->bulk = phongo_bulkwrite_init(ordered);
79+
intern->num_ops = 0;
7980

8081
if (options && php_array_exists(options, "bypassDocumentValidation")) {
8182
mongoc_bulk_operation_set_bypass_document_validation(intern->bulk, php_array_fetch_bool(options, "bypassDocumentValidation"));
@@ -111,6 +112,8 @@ PHP_METHOD(BulkWrite, insert)
111112
mongoc_bulk_operation_insert(intern->bulk, bson);
112113
bson_clear(&bson);
113114

115+
intern->num_ops++;
116+
114117
if (bson_out && return_value_used) {
115118
bson_iter_t iter;
116119

@@ -177,6 +180,8 @@ PHP_METHOD(BulkWrite, update)
177180
}
178181
}
179182

183+
intern->num_ops++;
184+
180185
bson_clear(&bquery);
181186
bson_clear(&bupdate);
182187
}
@@ -208,6 +213,8 @@ PHP_METHOD(BulkWrite, delete)
208213
mongoc_bulk_operation_remove(intern->bulk, bson);
209214
}
210215

216+
intern->num_ops++;
217+
211218
bson_clear(&bson);
212219
}
213220
/* }}} */
@@ -225,7 +232,7 @@ PHP_METHOD(BulkWrite, count)
225232
return;
226233
}
227234

228-
RETURN_LONG(intern->bulk->commands.len);
235+
RETURN_LONG(intern->num_ops);
229236
}
230237
/* }}} */
231238

tests/bulk/bulkwrite-count-001.phpt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
--TEST--
2+
MongoDB\Driver\BulkWrite::count() should return the number of operations
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
--FILE--
6+
<?php
7+
require_once __DIR__ . "/../utils/basic.inc";
8+
9+
$bulk = new MongoDB\Driver\BulkWrite;
10+
var_dump($bulk->count());
11+
12+
$bulk->insert(['x' => 1]);
13+
var_dump($bulk->count());
14+
15+
$bulk->insert(['x' => 2]);
16+
var_dump($bulk->count());
17+
18+
$bulk->update(['x' => 3], ['$set' => ['y' => 3]]);
19+
var_dump($bulk->count());
20+
21+
$bulk->update(['x' => 4], ['$set' => ['y' => 4]]);
22+
var_dump($bulk->count());
23+
24+
$bulk->delete(['x' => 5]);
25+
var_dump($bulk->count());
26+
27+
$bulk->delete(['x' => 6]);
28+
var_dump($bulk->count());
29+
30+
?>
31+
===DONE===
32+
<?php exit(0); ?>
33+
--EXPECT--
34+
int(0)
35+
int(1)
36+
int(2)
37+
int(3)
38+
int(4)
39+
int(5)
40+
int(6)
41+
===DONE===

0 commit comments

Comments
 (0)