@@ -153,9 +153,9 @@ static bool php_phongo_readpreference_init_from_hash(php_phongo_readpreference_t
153
153
return false;
154
154
}
155
155
156
- static const char * php_phongo_readpreference_get_mode_string (mongoc_read_mode_t mode )
156
+ static const char * php_phongo_readpreference_get_mode_string (const mongoc_read_prefs_t * read_prefs )
157
157
{
158
- switch (mode ) {
158
+ switch (mongoc_read_prefs_get_mode ( read_prefs ) ) {
159
159
case MONGOC_READ_PRIMARY :
160
160
return PHONGO_READ_PRIMARY ;
161
161
case MONGOC_READ_PRIMARY_PREFERRED :
@@ -167,19 +167,15 @@ static const char* php_phongo_readpreference_get_mode_string(mongoc_read_mode_t
167
167
case MONGOC_READ_NEAREST :
168
168
return PHONGO_READ_NEAREST ;
169
169
default :
170
- /* Should never happen, but if it does: exception */
171
- phongo_throw_exception (PHONGO_ERROR_LOGIC , "Mode '%d' should never have been passed to php_phongo_readpreference_get_mode_string, please file a bug report" , mode );
172
- break ;
170
+ return "" ;
173
171
}
174
-
175
- return NULL ;
176
172
}
177
173
178
174
/* Constructs a new ReadPreference */
179
175
static PHP_METHOD (MongoDB_Driver_ReadPreference , __construct )
180
176
{
181
177
php_phongo_readpreference_t * intern ;
182
- zval * mode ;
178
+ zend_string * mode ;
183
179
zval * tagSets = NULL ;
184
180
zval * options = NULL ;
185
181
@@ -188,44 +184,24 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, __construct)
188
184
/* Separate the tagSets zval, since we may end up modifying it in
189
185
* php_phongo_read_preference_prep_tagsets() below. */
190
186
PHONGO_PARSE_PARAMETERS_START (1 , 3 )
191
- Z_PARAM_ZVAL (mode )
187
+ Z_PARAM_STR (mode )
192
188
Z_PARAM_OPTIONAL
193
189
Z_PARAM_ARRAY_EX (tagSets , 1 , 1 )
194
190
Z_PARAM_ARRAY_OR_NULL (options )
195
191
PHONGO_PARSE_PARAMETERS_END ();
196
192
197
- if (Z_TYPE_P (mode ) == IS_LONG ) {
198
- php_error_docref (NULL , E_DEPRECATED , "Passing an integer mode to \"MongoDB\\Driver\\ReadPreference::__construct\" is deprecated and will be removed in a future release." );
199
-
200
- switch (Z_LVAL_P (mode )) {
201
- case MONGOC_READ_PRIMARY :
202
- case MONGOC_READ_SECONDARY :
203
- case MONGOC_READ_PRIMARY_PREFERRED :
204
- case MONGOC_READ_SECONDARY_PREFERRED :
205
- case MONGOC_READ_NEAREST :
206
- intern -> read_preference = mongoc_read_prefs_new (Z_LVAL_P (mode ));
207
- break ;
208
- default :
209
- phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT , "Invalid mode: %" PHONGO_LONG_FORMAT , Z_LVAL_P (mode ));
210
- return ;
211
- }
212
- } else if (Z_TYPE_P (mode ) == IS_STRING ) {
213
- if (strcasecmp (Z_STRVAL_P (mode ), PHONGO_READ_PRIMARY ) == 0 ) {
214
- intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_PRIMARY );
215
- } else if (strcasecmp (Z_STRVAL_P (mode ), PHONGO_READ_PRIMARY_PREFERRED ) == 0 ) {
216
- intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_PRIMARY_PREFERRED );
217
- } else if (strcasecmp (Z_STRVAL_P (mode ), PHONGO_READ_SECONDARY ) == 0 ) {
218
- intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_SECONDARY );
219
- } else if (strcasecmp (Z_STRVAL_P (mode ), PHONGO_READ_SECONDARY_PREFERRED ) == 0 ) {
220
- intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED );
221
- } else if (strcasecmp (Z_STRVAL_P (mode ), PHONGO_READ_NEAREST ) == 0 ) {
222
- intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_NEAREST );
223
- } else {
224
- phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT , "Invalid mode: '%s'" , Z_STRVAL_P (mode ));
225
- return ;
226
- }
193
+ if (zend_string_equals_literal_ci (mode , PHONGO_READ_PRIMARY )) {
194
+ intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_PRIMARY );
195
+ } else if (zend_string_equals_literal_ci (mode , PHONGO_READ_PRIMARY_PREFERRED )) {
196
+ intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_PRIMARY_PREFERRED );
197
+ } else if (zend_string_equals_literal_ci (mode , PHONGO_READ_SECONDARY )) {
198
+ intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_SECONDARY );
199
+ } else if (zend_string_equals_literal_ci (mode , PHONGO_READ_SECONDARY_PREFERRED )) {
200
+ intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_SECONDARY_PREFERRED );
201
+ } else if (zend_string_equals_literal_ci (mode , PHONGO_READ_NEAREST )) {
202
+ intern -> read_preference = mongoc_read_prefs_new (MONGOC_READ_NEAREST );
227
203
} else {
228
- phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT , "Expected mode to be integer or string, %s given " , PHONGO_ZVAL_CLASS_OR_TYPE_NAME_P (mode ));
204
+ phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT , "Invalid mode: '%s' " , ZSTR_VAL (mode ));
229
205
return ;
230
206
}
231
207
@@ -366,35 +342,16 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, getMaxStalenessSeconds)
366
342
RETURN_LONG (mongoc_read_prefs_get_max_staleness_seconds (intern -> read_preference ));
367
343
}
368
344
369
- /* Returns the ReadPreference mode */
370
- static PHP_METHOD (MongoDB_Driver_ReadPreference , getMode )
371
- {
372
- php_phongo_readpreference_t * intern ;
373
-
374
- intern = Z_READPREFERENCE_OBJ_P (getThis ());
375
-
376
- PHONGO_PARSE_PARAMETERS_NONE ();
377
-
378
- RETURN_LONG (mongoc_read_prefs_get_mode (intern -> read_preference ));
379
- }
380
-
381
345
/* Returns the ReadPreference mode as string */
382
346
static PHP_METHOD (MongoDB_Driver_ReadPreference , getModeString )
383
347
{
384
348
php_phongo_readpreference_t * intern ;
385
- const char * mode_string ;
386
349
387
350
intern = Z_READPREFERENCE_OBJ_P (getThis ());
388
351
389
352
PHONGO_PARSE_PARAMETERS_NONE ();
390
353
391
- mode_string = php_phongo_readpreference_get_mode_string (mongoc_read_prefs_get_mode (intern -> read_preference ));
392
- if (!mode_string ) {
393
- /* Exception already thrown */
394
- return ;
395
- }
396
-
397
- RETURN_STRING (mode_string );
354
+ RETURN_STRING (php_phongo_readpreference_get_mode_string (intern -> read_preference ));
398
355
}
399
356
400
357
/* Returns the ReadPreference tag sets */
@@ -429,10 +386,8 @@ static HashTable* php_phongo_readpreference_get_properties_hash(zend_object* obj
429
386
{
430
387
php_phongo_readpreference_t * intern ;
431
388
HashTable * props ;
432
- const char * modeString = NULL ;
433
389
const bson_t * tags ;
434
390
const bson_t * hedge ;
435
- mongoc_read_mode_t mode ;
436
391
437
392
intern = Z_OBJ_READPREFERENCE (object );
438
393
@@ -442,15 +397,13 @@ static HashTable* php_phongo_readpreference_get_properties_hash(zend_object* obj
442
397
return props ;
443
398
}
444
399
445
- tags = mongoc_read_prefs_get_tags (intern -> read_preference );
446
- mode = mongoc_read_prefs_get_mode (intern -> read_preference );
447
- modeString = php_phongo_readpreference_get_mode_string (mode );
448
- hedge = mongoc_read_prefs_get_hedge (intern -> read_preference );
400
+ tags = mongoc_read_prefs_get_tags (intern -> read_preference );
401
+ hedge = mongoc_read_prefs_get_hedge (intern -> read_preference );
449
402
450
- if ( modeString ) {
403
+ {
451
404
zval z_mode ;
452
405
453
- ZVAL_STRING (& z_mode , modeString );
406
+ ZVAL_STRING (& z_mode , php_phongo_readpreference_get_mode_string ( intern -> read_preference ) );
454
407
zend_hash_str_update (props , "mode" , sizeof ("mode" ) - 1 , & z_mode );
455
408
}
456
409
@@ -510,12 +463,10 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, serialize)
510
463
php_phongo_readpreference_t * intern ;
511
464
zval retval ;
512
465
php_serialize_data_t var_hash ;
513
- smart_str buf = { 0 };
514
- const char * modeString = NULL ;
466
+ smart_str buf = { 0 };
515
467
const bson_t * tags ;
516
468
const bson_t * hedge ;
517
469
int64_t maxStalenessSeconds ;
518
- mongoc_read_mode_t mode ;
519
470
520
471
intern = Z_READPREFERENCE_OBJ_P (getThis ());
521
472
@@ -526,16 +477,12 @@ static PHP_METHOD(MongoDB_Driver_ReadPreference, serialize)
526
477
}
527
478
528
479
tags = mongoc_read_prefs_get_tags (intern -> read_preference );
529
- mode = mongoc_read_prefs_get_mode (intern -> read_preference );
530
- modeString = php_phongo_readpreference_get_mode_string (mode );
531
480
maxStalenessSeconds = mongoc_read_prefs_get_max_staleness_seconds (intern -> read_preference );
532
481
hedge = mongoc_read_prefs_get_hedge (intern -> read_preference );
533
482
534
483
array_init_size (& retval , 4 );
535
484
536
- if (modeString ) {
537
- ADD_ASSOC_STRING (& retval , "mode" , modeString );
538
- }
485
+ ADD_ASSOC_STRING (& retval , "mode" , php_phongo_readpreference_get_mode_string (intern -> read_preference ));
539
486
540
487
if (!bson_empty0 (tags )) {
541
488
php_phongo_bson_state state ;
0 commit comments