@@ -171,18 +171,31 @@ PHP_METHOD(Server, getTags)
171
171
172
172
173
173
if ((sd = mongoc_client_get_server_description (intern -> client , intern -> server_id ))) {
174
- php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER ;
175
- state .map .root_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
176
- state .map .document_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
174
+ const bson_t * is_master = mongoc_server_description_ismaster (sd );
175
+ bson_iter_t iter ;
177
176
178
- phongo_bson_to_zval_ex (bson_get_data (& sd -> tags ), sd -> tags .len , & state );
179
- mongoc_server_description_destroy (sd );
177
+ if (bson_iter_init_find (& iter , is_master , "tags" ) && BSON_ITER_HOLDS_DOCUMENT (& iter )) {
178
+ const uint8_t * bytes ;
179
+ uint32_t len ;
180
+ php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER ;
181
+
182
+ state .map .root_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
183
+ state .map .document_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
184
+
185
+ bson_iter_document (& iter , & len , & bytes );
186
+ phongo_bson_to_zval_ex (bytes , len , & state );
187
+ mongoc_server_description_destroy (sd );
180
188
181
189
#if PHP_VERSION_ID >= 70000
182
- RETURN_ZVAL (& state .zchild , 0 , 1 );
190
+ RETURN_ZVAL (& state .zchild , 0 , 1 );
183
191
#else
184
- RETURN_ZVAL (state .zchild , 0 , 1 );
192
+ RETURN_ZVAL (state .zchild , 0 , 1 );
185
193
#endif
194
+ }
195
+
196
+ array_init (return_value );
197
+ mongoc_server_description_destroy (sd );
198
+ return ;
186
199
}
187
200
188
201
phongo_throw_exception (PHONGO_ERROR_RUNTIME TSRMLS_CC , "Failed to get server description" );
@@ -205,11 +218,13 @@ PHP_METHOD(Server, getInfo)
205
218
206
219
207
220
if ((sd = mongoc_client_get_server_description (intern -> client , intern -> server_id ))) {
221
+ const bson_t * is_master = mongoc_server_description_ismaster (sd );
208
222
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER ;
223
+
209
224
state .map .root_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
210
225
state .map .document_type = PHONGO_TYPEMAP_NATIVE_ARRAY ;
211
226
212
- phongo_bson_to_zval_ex (bson_get_data (& sd -> last_is_master ), sd -> last_is_master . len , & state );
227
+ phongo_bson_to_zval_ex (bson_get_data (is_master ), is_master -> len , & state );
213
228
mongoc_server_description_destroy (sd );
214
229
215
230
#if PHP_VERSION_ID >= 70000
@@ -384,7 +399,7 @@ PHP_METHOD(Server, isHidden)
384
399
if ((sd = mongoc_client_get_server_description (intern -> client , intern -> server_id ))) {
385
400
bson_iter_t iter ;
386
401
387
- RETVAL_BOOL (bson_iter_init_find_case (& iter , & sd -> last_is_master , "hidden" ) && bson_iter_as_bool (& iter ));
402
+ RETVAL_BOOL (bson_iter_init_find_case (& iter , mongoc_server_description_ismaster ( sd ) , "hidden" ) && bson_iter_as_bool (& iter ));
388
403
mongoc_server_description_destroy (sd );
389
404
return ;
390
405
}
@@ -410,7 +425,7 @@ PHP_METHOD(Server, isPassive)
410
425
if ((sd = mongoc_client_get_server_description (intern -> client , intern -> server_id ))) {
411
426
bson_iter_t iter ;
412
427
413
- RETVAL_BOOL (bson_iter_init_find_case (& iter , & sd -> last_is_master , "passive" ) && bson_iter_as_bool (& iter ));
428
+ RETVAL_BOOL (bson_iter_init_find_case (& iter , mongoc_server_description_ismaster ( sd ) , "passive" ) && bson_iter_as_bool (& iter ));
414
429
mongoc_server_description_destroy (sd );
415
430
return ;
416
431
}
0 commit comments