diff --git a/src/MongoDB/WriteConcern.c b/src/MongoDB/WriteConcern.c index 9af1d10f0..329f008a6 100644 --- a/src/MongoDB/WriteConcern.c +++ b/src/MongoDB/WriteConcern.c @@ -56,7 +56,9 @@ PHP_METHOD(WriteConcern, __construct) zval *w; long wtimeout = 0; zend_bool journal = 0; + zend_bool journal_is_null = 0; zend_bool fsync = 0; + zend_bool fsync_is_null = 0; (void)return_value; (void)return_value_ptr; (void)return_value_used; @@ -64,7 +66,7 @@ PHP_METHOD(WriteConcern, __construct) zend_replace_error_handling(EH_THROW, phongo_exception_from_phongo_domain(PHONGO_ERROR_INVALID_ARGUMENT), &error_handling TSRMLS_CC); intern = (php_phongo_writeconcern_t *)zend_object_store_get_object(getThis() TSRMLS_CC); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|lbb", &w, &wtimeout, &journal, &fsync) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|lb!b!", &w, &wtimeout, &journal, &journal_is_null, &fsync, &fsync_is_null) == FAILURE) { zend_restore_error_handling(&error_handling TSRMLS_CC); return; } @@ -92,10 +94,14 @@ PHP_METHOD(WriteConcern, __construct) switch(ZEND_NUM_ARGS()) { case 4: - mongoc_write_concern_set_fsync(intern->write_concern, fsync); + if (!fsync_is_null) { + mongoc_write_concern_set_fsync(intern->write_concern, fsync); + } /* fallthrough */ case 3: - mongoc_write_concern_set_journal(intern->write_concern, journal); + if (!journal_is_null) { + mongoc_write_concern_set_journal(intern->write_concern, journal); + } /* fallthrough */ case 2: if (wtimeout < 0) { diff --git a/tests/writeConcern/writeconcern-ctor-001.phpt b/tests/writeConcern/writeconcern-ctor-001.phpt index ee869da98..9280021dc 100644 --- a/tests/writeConcern/writeconcern-ctor-001.phpt +++ b/tests/writeConcern/writeconcern-ctor-001.phpt @@ -24,6 +24,10 @@ var_dump(new MongoDB\Driver\WriteConcern("string", 7000, true, true)); var_dump(new MongoDB\Driver\WriteConcern("string", 8000, true, false)); var_dump(new MongoDB\Driver\WriteConcern("string", 9000, false, true)); +var_dump(new MongoDB\Driver\WriteConcern("string", 10000, null)); +var_dump(new MongoDB\Driver\WriteConcern("string", 11000, null, true)); +var_dump(new MongoDB\Driver\WriteConcern("string", 12000, true, null)); + ?> ===DONE=== @@ -172,4 +176,40 @@ object(MongoDB\Driver\WriteConcern)#%d (%d) { ["journal"]=> bool(false) } +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + string(6) "string" + ["wmajority"]=> + bool(false) + ["wtimeout"]=> + int(10000) + ["fsync"]=> + NULL + ["journal"]=> + NULL +} +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + string(6) "string" + ["wmajority"]=> + bool(false) + ["wtimeout"]=> + int(11000) + ["fsync"]=> + bool(true) + ["journal"]=> + NULL +} +object(MongoDB\Driver\WriteConcern)#%d (%d) { + ["w"]=> + string(6) "string" + ["wmajority"]=> + bool(false) + ["wtimeout"]=> + int(12000) + ["fsync"]=> + NULL + ["journal"]=> + bool(true) +} ===DONE=== diff --git a/tests/writeConcern/writeconcern-getfsync-001.phpt b/tests/writeConcern/writeconcern-getfsync-001.phpt index 717d45146..0e5011bd1 100644 --- a/tests/writeConcern/writeconcern-getfsync-001.phpt +++ b/tests/writeConcern/writeconcern-getfsync-001.phpt @@ -31,6 +31,6 @@ bool(true) bool(false) bool(true) bool(false) -bool(false) +NULL NULL ===DONE=== diff --git a/tests/writeConcern/writeconcern-getjournal-001.phpt b/tests/writeConcern/writeconcern-getjournal-001.phpt index afb96e465..c3118c124 100644 --- a/tests/writeConcern/writeconcern-getjournal-001.phpt +++ b/tests/writeConcern/writeconcern-getjournal-001.phpt @@ -31,6 +31,6 @@ bool(true) bool(false) bool(true) bool(false) -bool(false) +NULL NULL ===DONE===