Merge pull request #78

This commit is contained in:
Jeremy Mikola
2015-08-14 01:30:58 -04:00
5 changed files with 152 additions and 3 deletions

View File

@@ -102,7 +102,7 @@ PHP_METHOD(Server, executeQuery)
phongo_execute_query(intern->client, namespace, phongo_query_from_zval(zquery TSRMLS_CC), NULL, intern->server_id, return_value, return_value_used TSRMLS_CC);
}
/* }}} */
/* {{{ proto MongoDB\Driver\WriteResult Server::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $zbulk)
/* {{{ proto MongoDB\Driver\WriteResult Server::executeBulkWrite(string $namespace, MongoDB\Driver\BulkWrite $zbulk[, MongoDB\Driver\WriteConcern $writeConcern = null])
Executes a write operation bulk (e.g. insert, update, delete) */
PHP_METHOD(Server, executeBulkWrite)
{
@@ -110,19 +110,20 @@ PHP_METHOD(Server, executeBulkWrite)
char *namespace;
int namespace_len;
zval *zbulk;
zval *zwrite_concern = NULL;
php_phongo_bulkwrite_t *bulk;
(void)return_value_ptr;
intern = (php_phongo_server_t *)zend_object_store_get_object(getThis() TSRMLS_CC);
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sO", &namespace, &namespace_len, &zbulk, php_phongo_bulkwrite_ce) == FAILURE) {
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) {
return;
}
bulk = (php_phongo_bulkwrite_t *)zend_object_store_get_object(zbulk TSRMLS_CC);
phongo_execute_write(intern->client, namespace, bulk->bulk, NULL, intern->server_id, return_value, return_value_used TSRMLS_CC);
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);
}
/* }}} */
/* {{{ proto string Server::getHost()
@@ -400,6 +401,7 @@ ZEND_END_ARG_INFO();
ZEND_BEGIN_ARG_INFO_EX(ai_Server_executeBulkWrite, 0, 0, 2)
ZEND_ARG_INFO(0, namespace)
ZEND_ARG_OBJ_INFO(0, zbulk, MongoDB\\Driver\\BulkWrite, 0)
ZEND_ARG_OBJ_INFO(0, writeConcern, MongoDB\\Driver\\WriteConcern, 1)
ZEND_END_ARG_INFO();
ZEND_BEGIN_ARG_INFO_EX(ai_Server_getHost, 0, 0, 0)

View File

@@ -0,0 +1,31 @@
--TEST--
MongoDB\Driver\Server::executeBulkWrite() with write concern (standalone)
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE) ?>
--FILE--
<?php
require_once __DIR__ . "/../utils/basic.inc";
$manager = new MongoDB\Driver\Manager(STANDALONE);
$primary = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY));
$writeConcerns = array(0, 1);
foreach ($writeConcerns as $writeConcern) {
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('wc' => $writeConcern));
$result = $primary->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($writeConcern));
var_dump($result->isAcknowledged());
var_dump($result->getInsertedCount());
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
bool(false)
int(0)
bool(true)
int(1)
===DONE===

View File

@@ -0,0 +1,36 @@
--TEST--
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set primary)
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
--FILE--
<?php
require_once __DIR__ . "/../utils/basic.inc";
$manager = new MongoDB\Driver\Manager(REPLICASET);
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY));
$writeConcerns = array(0, 1, 2, MongoDB\Driver\WriteConcern::MAJORITY);
foreach ($writeConcerns as $wc) {
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('wc' => $wc));
$result = $server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($wc));
var_dump($result->isAcknowledged());
var_dump($result->getInsertedCount());
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
bool(false)
int(0)
bool(true)
int(1)
bool(true)
int(1)
bool(true)
int(1)
===DONE===

View File

@@ -0,0 +1,43 @@
--TEST--
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set secondary)
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
--FILE--
<?php
require_once __DIR__ . "/../utils/basic.inc";
$manager = new MongoDB\Driver\Manager(REPLICASET);
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY));
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('wc' => 0));
$result = $server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern(0));
var_dump($result->isAcknowledged());
var_dump($result->getInsertedCount());
$writeConcerns = array(1, 2, MongoDB\Driver\WriteConcern::MAJORITY);
foreach ($writeConcerns as $wc) {
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('wc' => $wc));
echo throws(function() use ($server, $bulk, $wc) {
$server->executeBulkWrite(NS, $bulk, new MongoDB\Driver\WriteConcern($wc));
}, "MongoDB\Driver\Exception\RuntimeException"), "\n";
}
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
bool(false)
int(0)
OK: Got MongoDB\Driver\Exception\RuntimeException
not master
OK: Got MongoDB\Driver\Exception\RuntimeException
not master
OK: Got MongoDB\Driver\Exception\RuntimeException
not master
===DONE===

View File

@@ -0,0 +1,37 @@
--TEST--
MongoDB\Driver\Server::executeBulkWrite() with write concern (replica set secondary, local DB)
--SKIPIF--
<?php require __DIR__ . "/../utils/basic-skipif.inc"; ?>
<?php NEEDS("REPLICASET"); CLEANUP(REPLICASET); ?>
--FILE--
<?php
require_once __DIR__ . "/../utils/basic.inc";
$manager = new MongoDB\Driver\Manager(REPLICASET);
$server = $manager->selectServer(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY));
/* The server ignores write concerns with w>2 for writes to the local database,
* so we won't test behavior for w=2 and w=majority. */
$writeConcerns = array(0, 1);
foreach ($writeConcerns as $wc) {
$bulk = new MongoDB\Driver\BulkWrite();
$bulk->insert(array('wc' => $wc));
$result = $server->executeBulkWrite('local.' . COLLECTION_NAME, $bulk, new MongoDB\Driver\WriteConcern($wc));
var_dump($result->isAcknowledged());
var_dump($result->getInsertedCount());
}
$command = new MongoDB\Driver\Command(array('drop' => COLLECTION_NAME));
$server->executeCommand('local', $command);
?>
===DONE===
<?php exit(0); ?>
--EXPECT--
bool(false)
int(0)
bool(true)
int(1)
===DONE===