diff --git a/php_phongo.c b/php_phongo.c index fb91652f5..942910d07 100644 --- a/php_phongo.c +++ b/php_phongo.c @@ -1110,23 +1110,29 @@ static bool php_phongo_apply_rp_options_to_uri(mongoc_uri_t *uri, bson_t *option mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY_PREFERRED); } - if (bson_iter_init_find_case(&iter, options, MONGOC_URI_READPREFERENCE) && BSON_ITER_HOLDS_UTF8(&iter)) { - const char *str = bson_iter_utf8(&iter, NULL); + if (bson_iter_init_find_case(&iter, options, MONGOC_URI_READPREFERENCE)) { + const char *key = bson_iter_key(&iter); + if (BSON_ITER_HOLDS_UTF8(&iter)) { + const char *str = bson_iter_utf8(&iter, NULL); - if (0 == strcasecmp("primary", str)) { - mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_PRIMARY); - } else if (0 == strcasecmp("primarypreferred", str)) { - mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_PRIMARY_PREFERRED); - } else if (0 == strcasecmp("secondary", str)) { - mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY); - } else if (0 == strcasecmp("secondarypreferred", str)) { - mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY_PREFERRED); - } else if (0 == strcasecmp("nearest", str)) { - mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_NEAREST); - } else { - phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Unsupported readPreference value: '%s'", str); - mongoc_read_prefs_destroy(new_rp); + if (0 == strcasecmp("primary", str)) { + mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_PRIMARY); + } else if (0 == strcasecmp("primarypreferred", str)) { + mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_PRIMARY_PREFERRED); + } else if (0 == strcasecmp("secondary", str)) { + mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY); + } else if (0 == strcasecmp("secondarypreferred", str)) { + mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_SECONDARY_PREFERRED); + } else if (0 == strcasecmp("nearest", str)) { + mongoc_read_prefs_set_mode(new_rp, MONGOC_READ_NEAREST); + } else { + phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "Unsupported %s value: '%s'", key, str); + mongoc_read_prefs_destroy(new_rp); + return false; + } + } else { + phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC, "%s URI option expected to be string", key); return false; } } diff --git a/tests/manager/manager-ctor-read_preference-003.phpt b/tests/manager/manager-ctor-read_preference-error-004.phpt similarity index 75% rename from tests/manager/manager-ctor-read_preference-003.phpt rename to tests/manager/manager-ctor-read_preference-error-004.phpt index 48a2624f8..668ec04ce 100644 --- a/tests/manager/manager-ctor-read_preference-003.phpt +++ b/tests/manager/manager-ctor-read_preference-error-004.phpt @@ -1,5 +1,5 @@ --TEST-- -MongoDB\Driver\Manager::__construct(): read preference options of the wrong type are ignored +MongoDB\Driver\Manager::__construct(): read preference options of the wrong type will not be ignored --FILE-- getMessage() . "\n"; + continue; + } var_dump($manager->getReadPreference()); } ?> ===DONE=== --EXPECTF-- -object(MongoDB\Driver\ReadPreference)#%d (%d) { - ["mode"]=> - string(9) "secondary" -} +readPreference URI option expected to be string object(MongoDB\Driver\ReadPreference)#%d (%d) { ["mode"]=> string(9) "secondary"