-
Notifications
You must be signed in to change notification settings - Fork 202
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PHPC-1021: Remove support for ReadPreference integer modes #1666
Conversation
@@ -526,16 +477,12 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, serialize) | |||
} | |||
|
|||
tags = mongoc_read_prefs_get_tags(intern->read_preference); | |||
mode = mongoc_read_prefs_get_mode(intern->read_preference); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note: this will conflict with #1663, depending on which gets merged first.
phongo_throw_exception(PHONGO_ERROR_INVALID_ARGUMENT, "Invalid mode: '%s'", Z_STRVAL_P(mode)); | ||
return; | ||
} | ||
if (zend_string_equals_literal_ci(mode, PHONGO_READ_PRIMARY)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was delighted to find this in zend_string.h
.
@@ -153,9 +153,9 @@ static bool php_phongo_readpreference_init_from_hash(php_phongo_readpreference_t | |||
return false; | |||
} | |||
|
|||
static const char* php_phongo_readpreference_get_mode_string(mongoc_read_mode_t mode) | |||
static const char* php_phongo_readpreference_get_mode_string(const mongoc_read_prefs_t* read_prefs) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This lets us eliminate some mongoc_read_prefs_get_mode()
calls in parent contexts.
Additionally, I changed this function to return an empty string instead of throwing in the very unlikely event that the RP mode is invalid. _mongoc_read_mode_as_str()
does the same, and libmongoc uses that for appending read preferences to command payloads. In our case, this is used for serialization and debugging, and the change allowed us to clean up the parent contexts.
@@ -1,18 +0,0 @@ | |||
--TEST-- | |||
MongoDB\Driver\ReadPreference construction (invalid string mode) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This test was redundant as readpreference-ctor_error-001.phpt
uses an invalid string value.
require_once __DIR__ . '/../utils/basic.inc'; | ||
|
||
echo throws(function() { | ||
new MongoDB\Driver\ReadPreference(3.14); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since we replaced string|int
with string
in the constructor signature, type coercion is now applied outside of strict mode and this would be implicitly cast to '3.14'
. I didn't see any reason to use a different type (or declare strict types) just to assert a TypeError.
c617ef4
to
3db8799
Compare
This removes the deprecated integer constants, constructor support, and getMode(). Error-checking in php_phongo_readpreference_get_mode_string() has also been removed. ReadPreference only uses mongoc_read_prefs_new() internally, and we should not need to worry about libmongoc feeding us mongoc_read_prefs_t with an invalid mode.
cd321e0
to
2a8feb7
Compare
https://jira.mongodb.org/browse/PHPC-1021
This removes the deprecated integer constants, constructor support, and getMode().
Error-checking in php_phongo_readpreference_get_mode_string() has also been removed. ReadPreference only uses mongoc_read_prefs_new() internally, and we should not need to worry about libmongoc feeding us mongoc_read_prefs_t with an invalid mode.