@@ -271,7 +271,7 @@ static void php_phongo_manager_prep_uri_options(zval* options TSRMLS_DC) /* {{{
271
271
*
272
272
* On success, server_id will be set and the function will return true;
273
273
* 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 ) /* {{{ */
275
275
{
276
276
mongoc_server_description_t * selected_server ;
277
277
const mongoc_read_prefs_t * read_preference = NULL ;
@@ -289,7 +289,11 @@ static bool php_phongo_manager_select_server(bool for_writes, zval* zreadPrefere
289
289
}
290
290
291
291
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
+ }
293
297
}
294
298
295
299
selected_server = mongoc_client_select_server (client , for_writes , read_preference , & error );
@@ -402,7 +406,7 @@ static PHP_METHOD(Manager, executeCommand)
402
406
goto cleanup ;
403
407
}
404
408
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 )) {
406
410
/* Exception should already have been thrown */
407
411
goto cleanup ;
408
412
}
@@ -450,7 +454,7 @@ static PHP_METHOD(Manager, executeReadCommand)
450
454
return ;
451
455
}
452
456
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 )) {
454
458
/* Exception should already have been thrown */
455
459
return ;
456
460
}
@@ -487,7 +491,7 @@ static PHP_METHOD(Manager, executeWriteCommand)
487
491
return ;
488
492
}
489
493
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 )) {
491
495
/* Exception should already have been thrown */
492
496
return ;
493
497
}
@@ -524,7 +528,7 @@ static PHP_METHOD(Manager, executeReadWriteCommand)
524
528
return ;
525
529
}
526
530
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 )) {
528
532
/* Exception should already have been thrown */
529
533
return ;
530
534
}
@@ -570,7 +574,7 @@ static PHP_METHOD(Manager, executeQuery)
570
574
goto cleanup ;
571
575
}
572
576
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 )) {
574
578
/* Exception should already have been thrown */
575
579
goto cleanup ;
576
580
}
@@ -617,7 +621,7 @@ static PHP_METHOD(Manager, executeBulkWrite)
617
621
return ;
618
622
}
619
623
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 )) {
621
625
/* Exception should already have been thrown */
622
626
goto cleanup ;
623
627
}
@@ -737,7 +741,7 @@ static PHP_METHOD(Manager, selectServer)
737
741
return ;
738
742
}
739
743
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 )) {
741
745
/* Exception should already have been thrown */
742
746
return ;
743
747
}
0 commit comments