@@ -271,7 +271,7 @@ static void php_phongo_manager_prep_uri_options(zval* options TSRMLS_DC) /* {{{
271271 *
272272 * On success, server_id will be set and the function will return true;
273273 * otherwise, false is returned and an exception is thrown. */
274- static bool php_phongo_manager_select_server (bool for_writes , zval * zreadPreference , zval * zsession , mongoc_client_t * client , uint32_t * server_id TSRMLS_DC ) /* {{{ */
274+ static bool php_phongo_manager_select_server (bool for_writes , bool inherit_read_preference , zval * zreadPreference , zval * zsession , mongoc_client_t * client , uint32_t * server_id TSRMLS_DC ) /* {{{ */
275275{
276276 mongoc_server_description_t * selected_server ;
277277 const mongoc_read_prefs_t * read_preference = NULL ;
@@ -289,7 +289,11 @@ static bool php_phongo_manager_select_server(bool for_writes, zval* zreadPrefere
289289 }
290290
291291 if (!for_writes ) {
292- read_preference = zreadPreference ? phongo_read_preference_from_zval (zreadPreference TSRMLS_CC ) : mongoc_client_get_read_prefs (client );
292+ if (zreadPreference ) {
293+ read_preference = phongo_read_preference_from_zval (zreadPreference TSRMLS_CC );
294+ } else if (inherit_read_preference ) {
295+ read_preference = mongoc_client_get_read_prefs (client );
296+ }
293297 }
294298
295299 selected_server = mongoc_client_select_server (client , for_writes , read_preference , & error );
@@ -402,7 +406,7 @@ static PHP_METHOD(Manager, executeCommand)
402406 goto cleanup ;
403407 }
404408
405- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
409+ if (!php_phongo_manager_select_server (false, false, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
406410 /* Exception should already have been thrown */
407411 goto cleanup ;
408412 }
@@ -450,7 +454,7 @@ static PHP_METHOD(Manager, executeReadCommand)
450454 return ;
451455 }
452456
453- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
457+ if (!php_phongo_manager_select_server (false, true, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
454458 /* Exception should already have been thrown */
455459 return ;
456460 }
@@ -487,7 +491,7 @@ static PHP_METHOD(Manager, executeWriteCommand)
487491 return ;
488492 }
489493
490- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
494+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
491495 /* Exception should already have been thrown */
492496 return ;
493497 }
@@ -524,7 +528,7 @@ static PHP_METHOD(Manager, executeReadWriteCommand)
524528 return ;
525529 }
526530
527- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
531+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
528532 /* Exception should already have been thrown */
529533 return ;
530534 }
@@ -570,7 +574,7 @@ static PHP_METHOD(Manager, executeQuery)
570574 goto cleanup ;
571575 }
572576
573- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
577+ if (!php_phongo_manager_select_server (false, true, zreadPreference , zsession , intern -> client , & server_id TSRMLS_CC )) {
574578 /* Exception should already have been thrown */
575579 goto cleanup ;
576580 }
@@ -617,7 +621,7 @@ static PHP_METHOD(Manager, executeBulkWrite)
617621 return ;
618622 }
619623
620- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
624+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id TSRMLS_CC )) {
621625 /* Exception should already have been thrown */
622626 goto cleanup ;
623627 }
@@ -737,7 +741,7 @@ static PHP_METHOD(Manager, selectServer)
737741 return ;
738742 }
739743
740- if (!php_phongo_manager_select_server (false, zreadPreference , NULL , intern -> client , & server_id TSRMLS_CC )) {
744+ if (!php_phongo_manager_select_server (false, true, zreadPreference , NULL , intern -> client , & server_id TSRMLS_CC )) {
741745 /* Exception should already have been thrown */
742746 return ;
743747 }
0 commit comments