@@ -192,7 +192,7 @@ static void php_phongo_manager_prep_uri_options(zval* options) /* {{{ */
192
192
*
193
193
* On success, server_id will be set and the function will return true;
194
194
* otherwise, false is returned and an exception is thrown. */
195
- static bool php_phongo_manager_select_server (bool for_writes , zval * zreadPreference , zval * zsession , mongoc_client_t * client , uint32_t * server_id ) /* {{{ */
195
+ 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 ) /* {{{ */
196
196
{
197
197
mongoc_server_description_t * selected_server ;
198
198
const mongoc_read_prefs_t * read_preference = NULL ;
@@ -210,7 +210,11 @@ static bool php_phongo_manager_select_server(bool for_writes, zval* zreadPrefere
210
210
}
211
211
212
212
if (!for_writes ) {
213
- read_preference = zreadPreference ? phongo_read_preference_from_zval (zreadPreference ) : mongoc_client_get_read_prefs (client );
213
+ if (zreadPreference ) {
214
+ read_preference = phongo_read_preference_from_zval (zreadPreference );
215
+ } else if (inherit_read_preference ) {
216
+ read_preference = mongoc_client_get_read_prefs (client );
217
+ }
214
218
}
215
219
216
220
selected_server = mongoc_client_select_server (client , for_writes , read_preference , & error );
@@ -322,7 +326,7 @@ static PHP_METHOD(Manager, executeCommand)
322
326
goto cleanup ;
323
327
}
324
328
325
- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id )) {
329
+ if (!php_phongo_manager_select_server (false, false, zreadPreference , zsession , intern -> client , & server_id )) {
326
330
/* Exception should already have been thrown */
327
331
goto cleanup ;
328
332
}
@@ -369,7 +373,7 @@ static PHP_METHOD(Manager, executeReadCommand)
369
373
return ;
370
374
}
371
375
372
- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id )) {
376
+ if (!php_phongo_manager_select_server (false, true, zreadPreference , zsession , intern -> client , & server_id )) {
373
377
/* Exception should already have been thrown */
374
378
return ;
375
379
}
@@ -405,7 +409,7 @@ static PHP_METHOD(Manager, executeWriteCommand)
405
409
return ;
406
410
}
407
411
408
- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id )) {
412
+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id )) {
409
413
/* Exception should already have been thrown */
410
414
return ;
411
415
}
@@ -441,7 +445,7 @@ static PHP_METHOD(Manager, executeReadWriteCommand)
441
445
return ;
442
446
}
443
447
444
- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id )) {
448
+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id )) {
445
449
/* Exception should already have been thrown */
446
450
return ;
447
451
}
@@ -486,7 +490,7 @@ static PHP_METHOD(Manager, executeQuery)
486
490
goto cleanup ;
487
491
}
488
492
489
- if (!php_phongo_manager_select_server (false, zreadPreference , zsession , intern -> client , & server_id )) {
493
+ if (!php_phongo_manager_select_server (false, true, zreadPreference , zsession , intern -> client , & server_id )) {
490
494
/* Exception should already have been thrown */
491
495
goto cleanup ;
492
496
}
@@ -532,7 +536,7 @@ static PHP_METHOD(Manager, executeBulkWrite)
532
536
return ;
533
537
}
534
538
535
- if (!php_phongo_manager_select_server (true, NULL , zsession , intern -> client , & server_id )) {
539
+ if (!php_phongo_manager_select_server (true, false, NULL , zsession , intern -> client , & server_id )) {
536
540
/* Exception should already have been thrown */
537
541
goto cleanup ;
538
542
}
@@ -635,7 +639,7 @@ static PHP_METHOD(Manager, selectServer)
635
639
return ;
636
640
}
637
641
638
- if (!php_phongo_manager_select_server (false, zreadPreference , NULL , intern -> client , & server_id )) {
642
+ if (!php_phongo_manager_select_server (false, true, zreadPreference , NULL , intern -> client , & server_id )) {
639
643
/* Exception should already have been thrown */
640
644
return ;
641
645
}
0 commit comments