mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-04-02 06:12:08 +02:00
Merge pull request #78
This commit is contained in:
@@ -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)
|
||||
|
||||
31
tests/server/server-executeBulkWrite-002.phpt
Normal file
31
tests/server/server-executeBulkWrite-002.phpt
Normal 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===
|
||||
36
tests/server/server-executeBulkWrite-003.phpt
Normal file
36
tests/server/server-executeBulkWrite-003.phpt
Normal 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===
|
||||
43
tests/server/server-executeBulkWrite-004.phpt
Normal file
43
tests/server/server-executeBulkWrite-004.phpt
Normal 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===
|
||||
37
tests/server/server-executeBulkWrite-005.phpt
Normal file
37
tests/server/server-executeBulkWrite-005.phpt
Normal 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===
|
||||
Reference in New Issue
Block a user