From f561cf5f8e3076c6c935969a7b66952c22f87936 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Sep 2015 15:46:57 -0400 Subject: [PATCH 1/8] Rename ReadPreference tests and split constructor error test --- tests/readPreference/001.phpt | 58 ------------------- .../readPreference/{002.phpt => bug0146.phpt} | 13 +++-- .../readpreference-ctor-001.phpt | 40 +++++++++++++ .../readpreference-ctor_error-001.phpt | 25 ++++++++ 4 files changed, 72 insertions(+), 64 deletions(-) delete mode 100644 tests/readPreference/001.phpt rename tests/readPreference/{002.phpt => bug0146.phpt} (95%) create mode 100644 tests/readPreference/readpreference-ctor-001.phpt create mode 100644 tests/readPreference/readpreference-ctor_error-001.phpt diff --git a/tests/readPreference/001.phpt b/tests/readPreference/001.phpt deleted file mode 100644 index 8b2315463..000000000 --- a/tests/readPreference/001.phpt +++ /dev/null @@ -1,58 +0,0 @@ ---TEST-- -MongoDB\Driver\ReadPreference#001 ---SKIPIF-- - ---FILE-- - "one")); -$rp3 = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array()); -var_dump($rp, $rp2, $rp3); - -try { - $rp4 = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array("tag" => "one")); -} catch(InvalidArgumentException $e) { - echo $e->getMessage(), "\n"; -} - -try { - $broken = new MongoDB\Driver\ReadPreference(42); -} catch(InvalidArgumentException $e) { - echo $e->getMessage(), "\n"; -} - -?> -===DONE=== - ---EXPECTF-- -object(MongoDB\Driver\ReadPreference)#%d (%d) { - ["mode"]=> - int(1) - ["tags"]=> - array(0) { - } -} -object(MongoDB\Driver\ReadPreference)#%d (%d) { - ["mode"]=> - int(2) - ["tags"]=> - array(1) { - ["tag"]=> - string(3) "one" - } -} -object(MongoDB\Driver\ReadPreference)#%d (%d) { - ["mode"]=> - int(1) - ["tags"]=> - array(0) { - } -} -Invalid tagSet -Invalid ReadPreference -===DONE=== diff --git a/tests/readPreference/002.phpt b/tests/readPreference/bug0146.phpt similarity index 95% rename from tests/readPreference/002.phpt rename to tests/readPreference/bug0146.phpt index 6d87f3ac2..e29c95e25 100644 --- a/tests/readPreference/002.phpt +++ b/tests/readPreference/bug0146.phpt @@ -1,5 +1,5 @@ --TEST-- -MongoDB\Driver\ReadPreference#002: PHPC-146 +PHPC-146: ReadPreference primaryPreferred and secondary swapped --SKIPIF-- --FILE-- @@ -15,6 +15,7 @@ $rps = array( MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED, MongoDB\Driver\ReadPreference::RP_NEAREST, ); + foreach($rps as $r) { $rp = new MongoDB\Driver\ReadPreference($r); $cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query(array("my" => "query")), $rp); @@ -76,7 +77,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { ["batch_size"]=> int(0) ["ns"]=> - string(25) "phongo.readPreference_002" + string(%d) "%s" } ["server_id"]=> int(1) @@ -140,7 +141,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { ["batch_size"]=> int(0) ["ns"]=> - string(25) "phongo.readPreference_002" + string(%d) "%s" } ["server_id"]=> int(1) @@ -204,7 +205,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { ["batch_size"]=> int(0) ["ns"]=> - string(25) "phongo.readPreference_002" + string(%d) "%s" } ["server_id"]=> int(1) @@ -268,7 +269,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { ["batch_size"]=> int(0) ["ns"]=> - string(25) "phongo.readPreference_002" + string(%d) "%s" } ["server_id"]=> int(1) @@ -332,7 +333,7 @@ object(MongoDB\Driver\Cursor)#%d (%d) { ["batch_size"]=> int(0) ["ns"]=> - string(25) "phongo.readPreference_002" + string(%d) "%s" } ["server_id"]=> int(1) diff --git a/tests/readPreference/readpreference-ctor-001.phpt b/tests/readPreference/readpreference-ctor-001.phpt new file mode 100644 index 000000000..3e7578839 --- /dev/null +++ b/tests/readPreference/readpreference-ctor-001.phpt @@ -0,0 +1,40 @@ +--TEST-- +MongoDB\Driver\ReadPreference construction +--SKIPIF-- + +--FILE-- + "one"))); +var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array())); + +?> +===DONE=== + +--EXPECTF-- +object(MongoDB\Driver\ReadPreference)#%d (%d) { + ["mode"]=> + int(1) + ["tags"]=> + array(0) { + } +} +object(MongoDB\Driver\ReadPreference)#%d (%d) { + ["mode"]=> + int(2) + ["tags"]=> + array(1) { + ["tag"]=> + string(3) "one" + } +} +object(MongoDB\Driver\ReadPreference)#%d (%d) { + ["mode"]=> + int(1) + ["tags"]=> + array(0) { + } +} +===DONE=== diff --git a/tests/readPreference/readpreference-ctor_error-001.phpt b/tests/readPreference/readpreference-ctor_error-001.phpt new file mode 100644 index 000000000..9ba4e4de9 --- /dev/null +++ b/tests/readPreference/readpreference-ctor_error-001.phpt @@ -0,0 +1,25 @@ +--TEST-- +MongoDB\Driver\ReadPreference construction (invalid arguments) +--SKIPIF-- + +--FILE-- + "one")); +}, 'MongoDB\Driver\Exception\InvalidArgumentException'), "\n"; + +echo throws(function() { + new MongoDB\Driver\ReadPreference(42); +}, 'MongoDB\Driver\Exception\InvalidArgumentException'), "\n"; + +?> +===DONE=== + +--EXPECTF-- +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Invalid tagSet +OK: Got MongoDB\Driver\Exception\InvalidArgumentException +Invalid ReadPreference +===DONE=== From f5a0a534aa0f9bafad0cc5b94917e6944c00ed89 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Sep 2015 16:12:45 -0400 Subject: [PATCH 2/8] Use valid tag sets in ReadPreference tests --- tests/readPreference/readpreference-ctor-001.phpt | 9 ++++++--- tests/readPreference/readpreference-ctor_error-001.phpt | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/readPreference/readpreference-ctor-001.phpt b/tests/readPreference/readpreference-ctor-001.phpt index 3e7578839..f766eba1d 100644 --- a/tests/readPreference/readpreference-ctor-001.phpt +++ b/tests/readPreference/readpreference-ctor-001.phpt @@ -7,7 +7,7 @@ MongoDB\Driver\ReadPreference construction require_once __DIR__ . "/../utils/basic.inc"; var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY)); -var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY, array("tag" => "one"))); +var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY, array(array("tag" => "one")))); var_dump(new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array())); ?> @@ -26,8 +26,11 @@ object(MongoDB\Driver\ReadPreference)#%d (%d) { int(2) ["tags"]=> array(1) { - ["tag"]=> - string(3) "one" + [0]=> + array(1) { + ["tag"]=> + string(3) "one" + } } } object(MongoDB\Driver\ReadPreference)#%d (%d) { diff --git a/tests/readPreference/readpreference-ctor_error-001.phpt b/tests/readPreference/readpreference-ctor_error-001.phpt index 9ba4e4de9..59ea05b91 100644 --- a/tests/readPreference/readpreference-ctor_error-001.phpt +++ b/tests/readPreference/readpreference-ctor_error-001.phpt @@ -7,7 +7,7 @@ MongoDB\Driver\ReadPreference construction (invalid arguments) require_once __DIR__ . "/../utils/basic.inc"; echo throws(function() { - new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array("tag" => "one")); + new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_PRIMARY, array(array("tag" => "one"))); }, 'MongoDB\Driver\Exception\InvalidArgumentException'), "\n"; echo throws(function() { From 27ee04ff888ed5e86680fef5fa3709f4c6a3a587 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Sep 2015 16:28:19 -0400 Subject: [PATCH 3/8] PHPC-418: Getters for ReadPreference properties --- src/MongoDB/ReadPreference.c | 52 +++++++++++++++++ .../readpreference-getMode-001.phpt | 31 ++++++++++ .../readpreference-getTagSets-001.phpt | 56 +++++++++++++++++++ 3 files changed, 139 insertions(+) create mode 100644 tests/readPreference/readpreference-getMode-001.phpt create mode 100644 tests/readPreference/readpreference-getTagSets-001.phpt diff --git a/src/MongoDB/ReadPreference.c b/src/MongoDB/ReadPreference.c index 5fdbc26d3..204d80ee1 100644 --- a/src/MongoDB/ReadPreference.c +++ b/src/MongoDB/ReadPreference.c @@ -95,6 +95,51 @@ PHP_METHOD(ReadPreference, __construct) } /* }}} */ +/* {{{ proto string ReadPreference::getMode() + Returns the ReadPreference mode */ +PHP_METHOD(ReadPreference, getMode) +{ + php_phongo_readpreference_t *intern; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_readpreference_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + RETURN_LONG(mongoc_read_prefs_get_mode(intern->read_preference)); +} +/* }}} */ + +/* {{{ proto array ReadPreference::getTagSets() + Returns the ReadPreference tag sets */ +PHP_METHOD(ReadPreference, getTagSets) +{ + php_phongo_readpreference_t *intern; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_readpreference_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (intern->read_preference->tags.len) { + php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER; + /* Use native arrays for debugging output */ + state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY; + state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY; + + MAKE_STD_ZVAL(state.zchild); + bson_to_zval(bson_get_data(&intern->read_preference->tags), intern->read_preference->tags.len, &state); + RETURN_ZVAL(state.zchild, 0, 1); + } else { + RETURN_NULL(); + } +} +/* }}} */ + /** * Value object for read preferences used in issuing commands and queries. */ @@ -105,9 +150,16 @@ ZEND_BEGIN_ARG_INFO_EX(ai_ReadPreference___construct, 0, 0, 1) ZEND_ARG_ARRAY_INFO(0, tagSets, 1) ZEND_END_ARG_INFO(); +ZEND_BEGIN_ARG_INFO_EX(ai_ReadPreference_getMode, 0, 0, 0) +ZEND_END_ARG_INFO(); + +ZEND_BEGIN_ARG_INFO_EX(ai_ReadPreference_getTagSets, 0, 0, 0) +ZEND_END_ARG_INFO(); static zend_function_entry php_phongo_readpreference_me[] = { PHP_ME(ReadPreference, __construct, ai_ReadPreference___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(ReadPreference, getMode, ai_ReadPreference_getMode, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(ReadPreference, getTagSets, ai_ReadPreference_getTagSets, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) PHP_FE_END }; diff --git a/tests/readPreference/readpreference-getMode-001.phpt b/tests/readPreference/readpreference-getMode-001.phpt new file mode 100644 index 000000000..85814ccd5 --- /dev/null +++ b/tests/readPreference/readpreference-getMode-001.phpt @@ -0,0 +1,31 @@ +--TEST-- +MongoDB\Driver\ReadPreference::getMode() +--SKIPIF-- + +--FILE-- +getMode()); +} + +?> +===DONE=== + +--EXPECT-- +int(1) +int(5) +int(2) +int(6) +int(10) +===DONE=== diff --git a/tests/readPreference/readpreference-getTagSets-001.phpt b/tests/readPreference/readpreference-getTagSets-001.phpt new file mode 100644 index 000000000..a686986eb --- /dev/null +++ b/tests/readPreference/readpreference-getTagSets-001.phpt @@ -0,0 +1,56 @@ +--TEST-- +MongoDB\Driver\ReadPreference::getMode() +--SKIPIF-- + +--FILE-- + 'ny'), array()), + array(array('dc' => 'ny'), array('dc' => 'sf', 'use' => 'reporting'), array()), +); + +foreach ($tests as $test) { + $rp = new MongoDB\Driver\ReadPreference(MongoDB\Driver\ReadPreference::RP_SECONDARY_PREFERRED, $test); + var_dump($rp->getTagSets()); +} + +?> +===DONE=== + +--EXPECT-- +array(0) { +} +array(0) { +} +array(2) { + [0]=> + array(1) { + ["dc"]=> + string(2) "ny" + } + [1]=> + array(0) { + } +} +array(3) { + [0]=> + array(1) { + ["dc"]=> + string(2) "ny" + } + [1]=> + array(2) { + ["dc"]=> + string(2) "sf" + ["use"]=> + string(9) "reporting" + } + [2]=> + array(0) { + } +} +===DONE=== From 036806d8c3424b0b3be79ec167c1374459de152e Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Sep 2015 16:29:26 -0400 Subject: [PATCH 4/8] Rename first ReadPreference constructor arg to "mode" --- src/MongoDB/ReadPreference.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/MongoDB/ReadPreference.c b/src/MongoDB/ReadPreference.c index 204d80ee1..6c1c1544e 100644 --- a/src/MongoDB/ReadPreference.c +++ b/src/MongoDB/ReadPreference.c @@ -53,7 +53,7 @@ PHP_METHOD(ReadPreference, __construct) { php_phongo_readpreference_t *intern; zend_error_handling error_handling; - long readPreference; + long mode; zval *tagSets = NULL; (void)return_value_ptr; (void)return_value; (void)return_value_used; @@ -61,20 +61,20 @@ PHP_METHOD(ReadPreference, __construct) zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_readpreference_t *)zend_object_store_get_object(getThis() TSRMLS_CC); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|a!", &readPreference, &tagSets) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|a!", &mode, &tagSets) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } zend_restore_error_handling(&error_handling TSRMLS_CC); - switch(readPreference) { + switch(mode) { case MONGOC_READ_PRIMARY: case MONGOC_READ_SECONDARY: case MONGOC_READ_PRIMARY_PREFERRED: case MONGOC_READ_SECONDARY_PREFERRED: case MONGOC_READ_NEAREST: - intern->read_preference = mongoc_read_prefs_new(readPreference); + intern->read_preference = mongoc_read_prefs_new(mode); if (tagSets) { bson_t *tags = bson_new(); @@ -146,7 +146,7 @@ PHP_METHOD(ReadPreference, getTagSets) /* {{{ MongoDB\Driver\ReadPreference */ ZEND_BEGIN_ARG_INFO_EX(ai_ReadPreference___construct, 0, 0, 1) - ZEND_ARG_INFO(0, readPreference) + ZEND_ARG_INFO(0, mode) ZEND_ARG_ARRAY_INFO(0, tagSets, 1) ZEND_END_ARG_INFO(); From 686503f3e9a6d68a86f3e627177cd71dc4d1d1c8 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Tue, 15 Sep 2015 16:29:50 -0400 Subject: [PATCH 5/8] Revise ReadPreference constructor error messages --- src/MongoDB/ReadPreference.c | 4 ++-- tests/readPreference/readpreference-ctor_error-001.phpt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/MongoDB/ReadPreference.c b/src/MongoDB/ReadPreference.c index 6c1c1544e..32b936b8c 100644 --- a/src/MongoDB/ReadPreference.c +++ b/src/MongoDB/ReadPreference.c @@ -83,13 +83,13 @@ PHP_METHOD(ReadPreference, __construct) mongoc_read_prefs_set_tags(intern->read_preference, tags); bson_destroy(tags); if (!mongoc_read_prefs_is_valid(intern->read_preference)) { - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid tagSet"); + phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Invalid tagSets"); return; } } break; default: - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s", "Invalid ReadPreference"); + phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Invalid mode: %ld", mode); return; } } diff --git a/tests/readPreference/readpreference-ctor_error-001.phpt b/tests/readPreference/readpreference-ctor_error-001.phpt index 59ea05b91..139954794 100644 --- a/tests/readPreference/readpreference-ctor_error-001.phpt +++ b/tests/readPreference/readpreference-ctor_error-001.phpt @@ -19,7 +19,7 @@ echo throws(function() { --EXPECTF-- OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Invalid tagSet +Invalid tagSets OK: Got MongoDB\Driver\Exception\InvalidArgumentException -Invalid ReadPreference +Invalid mode: 42 ===DONE=== From 1e126e500d29df7e396015fc9cba562be938ff35 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Wed, 16 Sep 2015 16:17:08 -0400 Subject: [PATCH 6/8] Move PHONGO_WRITE_CONCERN_W_MAJORITY definition to php_phongo.h --- php_phongo.c | 4 ++-- php_phongo.h | 3 ++- src/MongoDB/WriteConcern.c | 2 -- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/php_phongo.c b/php_phongo.c index c435a2417..e6ace8c94 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -1423,7 +1423,7 @@ void php_phongo_write_concern_to_zval(zval *retval, const mongoc_write_concern_t if (wtag) { add_assoc_string_ex(retval, ZEND_STRS("w"), (char *)wtag, 1); } else if (mongoc_write_concern_get_wmajority(write_concern)) { - add_assoc_string_ex(retval, ZEND_STRS("w"), (char *)"majority", 1); + add_assoc_string_ex(retval, ZEND_STRS("w"), (char *)PHONGO_WRITE_CONCERN_W_MAJORITY, 1); } else if (w != MONGOC_WRITE_CONCERN_W_DEFAULT) { add_assoc_long_ex(retval, ZEND_STRS("w"), w); } @@ -1778,7 +1778,7 @@ bool php_phongo_apply_wc_options_to_client(mongoc_client_t *client, bson_t *opti } else if (BSON_ITER_HOLDS_UTF8(&iter)) { const char *str = bson_iter_utf8(&iter, NULL); - if (0 == strcasecmp("majority", str)) { + if (0 == strcasecmp(PHONGO_WRITE_CONCERN_W_MAJORITY, str)) { mongoc_write_concern_set_wmajority(new_wc, wtimeoutms); } else { mongoc_write_concern_set_wtag(new_wc, str); diff --git a/php_phongo.h b/php_phongo.h index dce914df5..990c75b86 100644 --- a/php_phongo.h +++ b/php_phongo.h @@ -64,8 +64,9 @@ ZEND_END_MODULE_GLOBALS(mongodb) # define mglo mongodb_globals #endif -#include "php_phongo_classes.h" +#define PHONGO_WRITE_CONCERN_W_MAJORITY "majority" +#include "php_phongo_classes.h" typedef enum { PHONGO_ERROR_INVALID_ARGUMENT = 1, diff --git a/src/MongoDB/WriteConcern.c b/src/MongoDB/WriteConcern.c index 8c7dd34a6..b3f5ce4ad 100644 --- a/src/MongoDB/WriteConcern.c +++ b/src/MongoDB/WriteConcern.c @@ -46,8 +46,6 @@ PHONGO_API zend_class_entry *php_phongo_writeconcern_ce; zend_object_handlers php_phongo_handler_writeconcern; -#define PHONGO_WRITE_CONCERN_W_MAJORITY "majority" - /* {{{ proto MongoDB\Driver\WriteConcern WriteConcern::__construct(integer|string $w[, integer $wtimeout[, boolean $journal[, boolean $fsync]]]) Constructs a new WriteConcern */ PHP_METHOD(WriteConcern, __construct) From 106ee8469371e090ff796af9db2a706408a73e03 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Wed, 16 Sep 2015 16:23:02 -0400 Subject: [PATCH 7/8] Rename WriteConcern tests --- .../{writeconcern-002.phpt => writeconcern-constants.phpt} | 2 +- .../{writeconcern-001.phpt => writeconcern-ctor-001.phpt} | 0 ...econcern_error-001.phpt => writeconcern-ctor_error-001.phpt} | 0 .../{writeconcern-003.phpt => writeconcern-debug-001.phpt} | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename tests/writeConcern/{writeconcern-002.phpt => writeconcern-constants.phpt} (87%) rename tests/writeConcern/{writeconcern-001.phpt => writeconcern-ctor-001.phpt} (100%) rename tests/writeConcern/{writeconcern_error-001.phpt => writeconcern-ctor_error-001.phpt} (100%) rename tests/writeConcern/{writeconcern-003.phpt => writeconcern-debug-001.phpt} (100%) diff --git a/tests/writeConcern/writeconcern-002.phpt b/tests/writeConcern/writeconcern-constants.phpt similarity index 87% rename from tests/writeConcern/writeconcern-002.phpt rename to tests/writeConcern/writeconcern-constants.phpt index b3c28d38b..403189826 100644 --- a/tests/writeConcern/writeconcern-002.phpt +++ b/tests/writeConcern/writeconcern-constants.phpt @@ -1,5 +1,5 @@ --TEST-- -MongoDB\Driver\WriteConcern::MAJORITY +MongoDB\Driver\WriteConcern constants --SKIPIF-- --FILE-- diff --git a/tests/writeConcern/writeconcern-001.phpt b/tests/writeConcern/writeconcern-ctor-001.phpt similarity index 100% rename from tests/writeConcern/writeconcern-001.phpt rename to tests/writeConcern/writeconcern-ctor-001.phpt diff --git a/tests/writeConcern/writeconcern_error-001.phpt b/tests/writeConcern/writeconcern-ctor_error-001.phpt similarity index 100% rename from tests/writeConcern/writeconcern_error-001.phpt rename to tests/writeConcern/writeconcern-ctor_error-001.phpt diff --git a/tests/writeConcern/writeconcern-003.phpt b/tests/writeConcern/writeconcern-debug-001.phpt similarity index 100% rename from tests/writeConcern/writeconcern-003.phpt rename to tests/writeConcern/writeconcern-debug-001.phpt From 4e01486cd6413bb592b4d38153249618bcba09b2 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Wed, 16 Sep 2015 17:35:32 -0400 Subject: [PATCH 8/8] PHPC-418: Getters for WriteConcern properties --- src/MongoDB/WriteConcern.c | 103 ++++++++++++++++++ .../writeconcern-getfsync-001.phpt | 36 ++++++ .../writeconcern-getjournal-001.phpt | 36 ++++++ tests/writeConcern/writeconcern-getw-001.phpt | 37 +++++++ .../writeconcern-getwtimeout-001.phpt | 32 ++++++ 5 files changed, 244 insertions(+) create mode 100644 tests/writeConcern/writeconcern-getfsync-001.phpt create mode 100644 tests/writeConcern/writeconcern-getjournal-001.phpt create mode 100644 tests/writeConcern/writeconcern-getw-001.phpt create mode 100644 tests/writeConcern/writeconcern-getwtimeout-001.phpt diff --git a/src/MongoDB/WriteConcern.c b/src/MongoDB/WriteConcern.c index b3f5ce4ad..f377bcb10 100644 --- a/src/MongoDB/WriteConcern.c +++ b/src/MongoDB/WriteConcern.c @@ -27,6 +27,7 @@ /* External libs */ #include #include +#include "mongoc-write-concern-private.h" /* PHP Core stuff */ #include @@ -98,6 +99,93 @@ PHP_METHOD(WriteConcern, __construct) } /* }}} */ +/* {{{ proto string|integer WriteConcern::getW() + Returns the WriteConcern "w" option */ +PHP_METHOD(WriteConcern, getW) +{ + php_phongo_writeconcern_t *intern; + const char *wtag; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_writeconcern_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + wtag = mongoc_write_concern_get_wtag(intern->write_concern); + + if (wtag) { + RETURN_STRING(wtag, 1); + } + + if (mongoc_write_concern_get_wmajority(intern->write_concern)) { + RETURN_STRING(PHONGO_WRITE_CONCERN_W_MAJORITY, 1); + } + + RETURN_LONG(intern->write_concern->w); +} +/* }}} */ + +/* {{{ proto string|integer WriteConcern::getWtimeout() + Returns the WriteConcern "wtimeout" option */ +PHP_METHOD(WriteConcern, getWtimeout) +{ + php_phongo_writeconcern_t *intern; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_writeconcern_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + RETURN_LONG(mongoc_write_concern_get_wtimeout(intern->write_concern)); +} +/* }}} */ + +/* {{{ proto null|boolean WriteConcern::getJournal() + Returns the WriteConcern "journal" option */ +PHP_METHOD(WriteConcern, getJournal) +{ + php_phongo_writeconcern_t *intern; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_writeconcern_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (intern->write_concern->journal != MONGOC_WRITE_CONCERN_JOURNAL_DEFAULT) { + RETURN_BOOL(mongoc_write_concern_get_journal(intern->write_concern)); + } + + RETURN_NULL(); +} +/* }}} */ + +/* {{{ proto null|boolean WriteConcern::getFsync() + Returns the WriteConcern "fsync" option */ +PHP_METHOD(WriteConcern, getFsync) +{ + php_phongo_writeconcern_t *intern; + (void)return_value_ptr; (void)return_value_used; + + intern = (php_phongo_writeconcern_t *)zend_object_store_get_object(getThis() TSRMLS_CC); + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + if (intern->write_concern->fsync_ != MONGOC_WRITE_CONCERN_FSYNC_DEFAULT) { + RETURN_BOOL(mongoc_write_concern_get_fsync(intern->write_concern)); + } + + RETURN_NULL(); +} +/* }}} */ + /** * Value object for write concern used in issuing write operations. */ @@ -110,9 +198,24 @@ ZEND_BEGIN_ARG_INFO_EX(ai_WriteConcern___construct, 0, 0, 1) ZEND_ARG_INFO(0, fsync) ZEND_END_ARG_INFO(); +ZEND_BEGIN_ARG_INFO_EX(ai_WriteConcern_getW, 0, 0, 0) +ZEND_END_ARG_INFO(); + +ZEND_BEGIN_ARG_INFO_EX(ai_WriteConcern_getWtimeout, 0, 0, 0) +ZEND_END_ARG_INFO(); + +ZEND_BEGIN_ARG_INFO_EX(ai_WriteConcern_getJournal, 0, 0, 0) +ZEND_END_ARG_INFO(); + +ZEND_BEGIN_ARG_INFO_EX(ai_WriteConcern_getFsync, 0, 0, 0) +ZEND_END_ARG_INFO(); static zend_function_entry php_phongo_writeconcern_me[] = { PHP_ME(WriteConcern, __construct, ai_WriteConcern___construct, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(WriteConcern, getW, ai_WriteConcern_getW, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(WriteConcern, getWtimeout, ai_WriteConcern_getWtimeout, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(WriteConcern, getJournal, ai_WriteConcern_getJournal, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) + PHP_ME(WriteConcern, getFsync, ai_WriteConcern_getFsync, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL) PHP_FE_END }; diff --git a/tests/writeConcern/writeconcern-getfsync-001.phpt b/tests/writeConcern/writeconcern-getfsync-001.phpt new file mode 100644 index 000000000..717d45146 --- /dev/null +++ b/tests/writeConcern/writeconcern-getfsync-001.phpt @@ -0,0 +1,36 @@ +--TEST-- +MongoDB\Driver\WriteConcern::getFsync() +--SKIPIF-- + +--FILE-- +getFsync()); +} + +// Test with default value +$wc = new MongoDB\Driver\WriteConcern(1, 0, true); +var_dump($wc->getFsync()); + +?> +===DONE=== + +--EXPECT-- +bool(true) +bool(false) +bool(true) +bool(false) +bool(false) +NULL +===DONE=== diff --git a/tests/writeConcern/writeconcern-getjournal-001.phpt b/tests/writeConcern/writeconcern-getjournal-001.phpt new file mode 100644 index 000000000..afb96e465 --- /dev/null +++ b/tests/writeConcern/writeconcern-getjournal-001.phpt @@ -0,0 +1,36 @@ +--TEST-- +MongoDB\Driver\WriteConcern::getJournal() +--SKIPIF-- + +--FILE-- +getJournal()); +} + +// Test with default value +$wc = new MongoDB\Driver\WriteConcern(1, 0); +var_dump($wc->getJournal()); + +?> +===DONE=== + +--EXPECT-- +bool(true) +bool(false) +bool(true) +bool(false) +bool(false) +NULL +===DONE=== diff --git a/tests/writeConcern/writeconcern-getw-001.phpt b/tests/writeConcern/writeconcern-getw-001.phpt new file mode 100644 index 000000000..a946c69b0 --- /dev/null +++ b/tests/writeConcern/writeconcern-getw-001.phpt @@ -0,0 +1,37 @@ +--TEST-- +MongoDB\Driver\WriteConcern::getW() +--SKIPIF-- + +--FILE-- +getW()); +} + +?> +===DONE=== + +--EXPECT-- +string(8) "majority" +string(8) "majority" +int(-2) +int(-1) +int(0) +int(1) +int(2) +string(3) "tag" +===DONE=== diff --git a/tests/writeConcern/writeconcern-getwtimeout-001.phpt b/tests/writeConcern/writeconcern-getwtimeout-001.phpt new file mode 100644 index 000000000..2f8d876c4 --- /dev/null +++ b/tests/writeConcern/writeconcern-getwtimeout-001.phpt @@ -0,0 +1,32 @@ +--TEST-- +MongoDB\Driver\WriteConcern::getWtimeout() +--SKIPIF-- + +--FILE-- +getWtimeout()); +} + +// Test with default value +$wc = new MongoDB\Driver\WriteConcern(1); +var_dump($wc->getWtimeout()); + +?> +===DONE=== + +--EXPECT-- +int(0) +int(0) +int(1) +int(0) +===DONE===