Skip to content

Commit f72b71b

Browse files
committed
Merge pull request #78
2 parents 9943341 + 0d73e36 commit f72b71b

File tree

5 files changed

+152
-3
lines changed

5 files changed

+152
-3
lines changed

src/MongoDB/Server.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,27 +102,28 @@ PHP_METHOD(Server, executeQuery)
102102
phongo_execute_query(intern->client, namespace, phongo_query_from_zval(zquery TSRMLS_CC), NULL, intern->server_id, return_value, return_value_used TSRMLS_CC);
103103
}
104104
/* }}} */
105-
/* {{{ proto MongoDB\Driver\WriteResult Server::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $zbulk)
105+
/* {{{ proto MongoDB\Driver\WriteResult Server::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $zbulk[, MongoDB\Driver\WriteConcern $writeConcern = null])
106106
Executes a write operation bulk (e.g. insert, update, delete) */
107107
PHP_METHOD(Server, executeBulkWrite)
108108
{
109109
php_phongo_server_t *intern;
110110
char *namespace;
111111
int namespace_len;
112112
zval *zbulk;
113+
zval *zwrite_concern = NULL;
113114
php_phongo_bulkwrite_t *bulk;
114115
(void)return_value_ptr;
115116

116117

117118
intern = (php_phongo_server_t *)zend_object_store_get_object(getThis() TSRMLS_CC);
118119

119-
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO", &namespace, &namespace_len, &zbulk, php_phongo_bulkwrite_ce) == FAILURE) {
120+
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO|O!", &namespace, &namespace_len, &zbulk, php_phongo_bulkwrite_ce, &zwrite_concern, php_phongo_writeconcern_ce) == FAILURE) {
120121
return;
121122
}
122123

123124

124125
bulk = (php_phongo_bulkwrite_t *)zend_object_store_get_object(zbulk TSRMLS_CC);
125-
phongo_execute_write(intern->client, namespace, bulk->bulk, NULL, intern->server_id, return_value, return_value_used TSRMLS_CC);
126+
phongo_execute_write(intern->client, namespace, bulk->bulk, phongo_write_concern_from_zval(zwrite_concern TSRMLS_CC), intern->server_id, return_value, return_value_used TSRMLS_CC);
126127
}
127128
/* }}} */
128129
/* {{{ proto string Server::getHost()
@@ -400,6 +401,7 @@ ZEND_END_ARG_INFO();
400401
ZEND_BEGIN_ARG_INFO_EX(ai_Server_executeBulkWrite, 0, 0, 2)
401402
ZEND_ARG_INFO(0, namespace)
402403
ZEND_ARG_OBJ_INFO(0, zbulk, MongoDB\\Driver\\BulkWrite, 0)
404+
ZEND_ARG_OBJ_INFO(0, writeConcern, MongoDB\\Driver\\WriteConcern, 1)
403405
ZEND_END_ARG_INFO();
404406

405407
ZEND_BEGIN_ARG_INFO_EX(ai_Server_getHost, 0, 0, 0)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
MongoDB\Driver\Server::executeBulkWrite() with write concern (standalone)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE) ?>
5+
--FILE--
6+
<?php
7+
require_once __DIR__ . "/../utils/basic.inc";
8+
9+
$manager = new MongoDB\Driver\Manager(STANDALONE);
10+
$primary = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY));
11+
12+
$writeConcerns = array(0, 1);
13+
14+
foreach ($writeConcerns as $writeConcern) {
15+
$bulk = new MongoDB\Driver\BulkWrite();
16+
$bulk->insert(array('wc' => $writeConcern));
17+
18+
$result = $primary->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($writeConcern));
19+
var_dump($result->isAcknowledged());
20+
var_dump($result->getInsertedCount());
21+
}
22+
23+
?>
24+
===DONE===
25+
<?php exit(0); ?>
26+
--EXPECT--
27+
bool(false)
28+
int(0)
29+
bool(true)
30+
int(1)
31+
===DONE===
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set primary)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
6+
--FILE--
7+
<?php
8+
require_once __DIR__ . "/../utils/basic.inc";
9+
10+
$manager = new MongoDB\Driver\Manager(REPLICASET);
11+
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY));
12+
13+
$writeConcerns = array(0, 1, 2, MongoDB\Driver\WriteConcern::MAJORITY);
14+
15+
foreach ($writeConcerns as $wc) {
16+
$bulk = new MongoDB\Driver\BulkWrite();
17+
$bulk->insert(array('wc' => $wc));
18+
19+
$result = $server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($wc));
20+
var_dump($result->isAcknowledged());
21+
var_dump($result->getInsertedCount());
22+
}
23+
24+
?>
25+
===DONE===
26+
<?php exit(0); ?>
27+
--EXPECT--
28+
bool(false)
29+
int(0)
30+
bool(true)
31+
int(1)
32+
bool(true)
33+
int(1)
34+
bool(true)
35+
int(1)
36+
===DONE===
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
--TEST--
2+
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set secondary)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
6+
--FILE--
7+
<?php
8+
require_once __DIR__ . "/../utils/basic.inc";
9+
10+
$manager = new MongoDB\Driver\Manager(REPLICASET);
11+
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY));
12+
13+
$bulk = new MongoDB\Driver\BulkWrite();
14+
$bulk->insert(array('wc' => 0));
15+
16+
$result = $server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern(0));
17+
var_dump($result->isAcknowledged());
18+
var_dump($result->getInsertedCount());
19+
20+
$writeConcerns = array(1, 2, MongoDB\Driver\WriteConcern::MAJORITY);
21+
22+
foreach ($writeConcerns as $wc) {
23+
$bulk = new MongoDB\Driver\BulkWrite();
24+
$bulk->insert(array('wc' => $wc));
25+
26+
echo throws(function() use ($server, $bulk, $wc) {
27+
$server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($wc));
28+
}, "MongoDB\Driver\Exception\RuntimeException"), "\n";
29+
}
30+
31+
?>
32+
===DONE===
33+
<?php exit(0); ?>
34+
--EXPECT--
35+
bool(false)
36+
int(0)
37+
OK: Got MongoDB\Driver\Exception\RuntimeException
38+
not master
39+
OK: Got MongoDB\Driver\Exception\RuntimeException
40+
not master
41+
OK: Got MongoDB\Driver\Exception\RuntimeException
42+
not master
43+
===DONE===
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set secondary, local DB)
3+
--SKIPIF--
4+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
5+
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
6+
--FILE--
7+
<?php
8+
require_once __DIR__ . "/../utils/basic.inc";
9+
10+
$manager = new MongoDB\Driver\Manager(REPLICASET);
11+
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY));
12+
13+
/* The server ignores write concerns with w>2 for writes to the local database,
14+
* so we won't test behavior for w=2 and w=majority. */
15+
$writeConcerns = array(0, 1);
16+
17+
foreach ($writeConcerns as $wc) {
18+
$bulk = new MongoDB\Driver\BulkWrite();
19+
$bulk->insert(array('wc' => $wc));
20+
21+
$result = $server->executeBulkWrite('local.' . COLLECTION_NAME, $bulk, new MongoDB\Driver\WriteConcern($wc));
22+
var_dump($result->isAcknowledged());
23+
var_dump($result->getInsertedCount());
24+
}
25+
26+
$command = new MongoDB\Driver\Command(array('drop' => COLLECTION_NAME));
27+
$server->executeCommand('local', $command);
28+
29+
?>
30+
===DONE===
31+
<?php exit(0); ?>
32+
--EXPECT--
33+
bool(false)
34+
int(0)
35+
bool(true)
36+
int(1)
37+
===DONE===

0 commit comments

Comments
 (0)