From a6932d59e0ceec56ec15a4131b976c93d603a3a6 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Fri, 18 Sep 2015 15:20:42 -0400 Subject: [PATCH 1/2] PHPC-423: WriteConcern should report default "w" option as null --- php_phongo.c | 2 ++ src/MongoDB/WriteConcern.c | 8 ++++++-- tests/manager/manager-getwriteconcern-001.phpt | 6 ++++++ tests/replicaset/writeresult-getserver-002.phpt | 4 +++- tests/server/server-executeBulkWrite-001.phpt | 4 +++- tests/standalone/writeresult-isacknowledged-001.phpt | 4 +++- tests/writeConcern/writeconcern-debug-001.phpt | 6 +++--- tests/writeConcern/writeconcern-getw-001.phpt | 2 +- 8 files changed, 27 insertions(+), 9 deletions(-) diff --git a/php_phongo.c b/php_phongo.c index e6ace8c94..b2b9ebc00 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -1426,6 +1426,8 @@ void php_phongo_write_concern_to_zval(zval *retval, const mongoc_write_concern_t 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); + } else { + add_assoc_null_ex(retval, ZEND_STRS("w")); } add_assoc_bool_ex(retval, ZEND_STRS("wmajority"), mongoc_write_concern_get_wmajority(write_concern)); diff --git a/src/MongoDB/WriteConcern.c b/src/MongoDB/WriteConcern.c index 8f6f3778f..9af1d10f0 100644 --- a/src/MongoDB/WriteConcern.c +++ b/src/MongoDB/WriteConcern.c @@ -108,7 +108,7 @@ PHP_METHOD(WriteConcern, __construct) } /* }}} */ -/* {{{ proto string|integer WriteConcern::getW() +/* {{{ proto string|integer|null WriteConcern::getW() Returns the WriteConcern "w" option */ PHP_METHOD(WriteConcern, getW) { @@ -132,7 +132,11 @@ PHP_METHOD(WriteConcern, getW) RETURN_STRING(PHONGO_WRITE_CONCERN_W_MAJORITY, 1); } - RETURN_LONG(intern->write_concern->w); + if (intern->write_concern->w != MONGOC_WRITE_CONCERN_W_DEFAULT) { + RETURN_LONG(mongoc_write_concern_get_w(intern->write_concern)); + } + + RETURN_NULL(); } /* }}} */ diff --git a/tests/manager/manager-getwriteconcern-001.phpt b/tests/manager/manager-getwriteconcern-001.phpt index f50857059..0caea2879 100644 --- a/tests/manager/manager-getwriteconcern-001.phpt +++ b/tests/manager/manager-getwriteconcern-001.phpt @@ -36,6 +36,8 @@ foreach ($tests as $i => $test) { --EXPECTF-- object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> @@ -106,6 +108,8 @@ object(MongoDB\Driver\WriteConcern)#%d (%d) { bool(false) } object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> @@ -116,6 +120,8 @@ object(MongoDB\Driver\WriteConcern)#%d (%d) { NULL } object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> diff --git a/tests/replicaset/writeresult-getserver-002.phpt b/tests/replicaset/writeresult-getserver-002.phpt index e8371127a..a13ffa940 100644 --- a/tests/replicaset/writeresult-getserver-002.phpt +++ b/tests/replicaset/writeresult-getserver-002.phpt @@ -80,7 +80,9 @@ object(MongoDB\Driver\WriteResult)#%d (%d) { array(0) { } ["writeConcern"]=> - array(4) { + array(%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> diff --git a/tests/server/server-executeBulkWrite-001.phpt b/tests/server/server-executeBulkWrite-001.phpt index d55fd5ced..8b302ce3b 100644 --- a/tests/server/server-executeBulkWrite-001.phpt +++ b/tests/server/server-executeBulkWrite-001.phpt @@ -70,7 +70,9 @@ object(MongoDB\Driver\WriteResult)#%d (%d) { array(0) { } ["writeConcern"]=> - array(4) { + array(%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> diff --git a/tests/standalone/writeresult-isacknowledged-001.phpt b/tests/standalone/writeresult-isacknowledged-001.phpt index 2dfbe2b58..f2fbcd27f 100644 --- a/tests/standalone/writeresult-isacknowledged-001.phpt +++ b/tests/standalone/writeresult-isacknowledged-001.phpt @@ -39,7 +39,9 @@ object(MongoDB\Driver\WriteResult)#%d (%d) { array(0) { } ["writeConcern"]=> - array(4) { + array(%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> diff --git a/tests/writeConcern/writeconcern-debug-001.phpt b/tests/writeConcern/writeconcern-debug-001.phpt index ec7b3413d..e16999baa 100644 --- a/tests/writeConcern/writeconcern-debug-001.phpt +++ b/tests/writeConcern/writeconcern-debug-001.phpt @@ -10,15 +10,15 @@ require_once __DIR__ . "/../utils/basic.inc"; * Although "w" will be omitted from the write concern sent to the server, we * should still yield other fields in the debug output, which may be sent. */ -$w = new MongoDB\Driver\WriteConcern(-2, 1000, true, true); - -var_dump($w); +var_dump(new MongoDB\Driver\WriteConcern(-2, 1000, true, true)); ?> ===DONE=== --EXPECTF-- object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + NULL ["wmajority"]=> bool(false) ["wtimeout"]=> diff --git a/tests/writeConcern/writeconcern-getw-001.phpt b/tests/writeConcern/writeconcern-getw-001.phpt index a60bca30f..a6228161d 100644 --- a/tests/writeConcern/writeconcern-getw-001.phpt +++ b/tests/writeConcern/writeconcern-getw-001.phpt @@ -29,7 +29,7 @@ foreach ($tests as $test) { --EXPECT-- string(8) "majority" string(8) "majority" -int(-2) +NULL int(-1) int(0) int(1) From 380aee31c9f7209dcae5996da5b61e42be967d54 Mon Sep 17 00:00:00 2001 From: Jeremy Mikola Date: Fri, 18 Sep 2015 15:21:12 -0400 Subject: [PATCH 2/2] Additional tests for WriteConcern debug handler --- .../writeConcern/writeconcern-debug-002.phpt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tests/writeConcern/writeconcern-debug-002.phpt diff --git a/tests/writeConcern/writeconcern-debug-002.phpt b/tests/writeConcern/writeconcern-debug-002.phpt new file mode 100644 index 000000000..c29bce42f --- /dev/null +++ b/tests/writeConcern/writeconcern-debug-002.phpt @@ -0,0 +1,53 @@ +--TEST-- +MongoDB\Driver\WriteConcern debug output +--SKIPIF-- + +--FILE-- + +===DONE=== + +--EXPECTF-- +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + int(1) + ["wmajority"]=> + bool(false) + ["wtimeout"]=> + int(0) + ["fsync"]=> + NULL + ["journal"]=> + NULL +} +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + string(3) "tag" + ["wmajority"]=> + bool(false) + ["wtimeout"]=> + int(1000) + ["fsync"]=> + bool(false) + ["journal"]=> + bool(false) +} +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + string(8) "majority" + ["wmajority"]=> + bool(true) + ["wtimeout"]=> + int(500) + ["fsync"]=> + bool(true) + ["journal"]=> + bool(true) +} +===DONE===