Skip to content

Commit e7e65cc

Browse files
committed
PHPC-606: Use mongoc_server_description_ismaster()
1 parent 3f341ad commit e7e65cc

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
lines changed

php_phongo.c

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,8 +1275,11 @@ void php_phongo_objectid_new_from_oid(zval *object, const bson_oid_t *oid TSRMLS
12751275
bson_oid_to_string(oid, intern->oid);
12761276
} /* }}} */
12771277

1278-
void php_phongo_server_to_zval(zval *retval, const mongoc_server_description_t *sd) /* {{{ */
1278+
void php_phongo_server_to_zval(zval *retval, mongoc_server_description_t *sd) /* {{{ */
12791279
{
1280+
const bson_t *is_master = mongoc_server_description_ismaster(sd);
1281+
bson_iter_t iter;
1282+
12801283
array_init(retval);
12811284

12821285
ADD_ASSOC_STRING(retval, "host", (char *)sd->host.host);
@@ -1285,38 +1288,36 @@ void php_phongo_server_to_zval(zval *retval, const mongoc_server_description_t *
12851288
ADD_ASSOC_BOOL_EX(retval, "is_primary", sd->type == MONGOC_SERVER_RS_PRIMARY);
12861289
ADD_ASSOC_BOOL_EX(retval, "is_secondary", sd->type == MONGOC_SERVER_RS_SECONDARY);
12871290
ADD_ASSOC_BOOL_EX(retval, "is_arbiter", sd->type == MONGOC_SERVER_RS_ARBITER);
1288-
{
1289-
bson_iter_t iter;
1290-
zend_bool b = bson_iter_init_find_case(&iter, &sd->last_is_master, "hidden") && bson_iter_as_bool(&iter);
1291-
1292-
ADD_ASSOC_BOOL_EX(retval, "is_hidden", b);
1293-
}
1294-
{
1295-
bson_iter_t iter;
1296-
zend_bool b = bson_iter_init_find_case(&iter, &sd->last_is_master, "passive") && bson_iter_as_bool(&iter);
1291+
ADD_ASSOC_BOOL_EX(retval, "is_hidden", bson_iter_init_find_case(&iter, is_master, "hidden") && bson_iter_as_bool(&iter));
1292+
ADD_ASSOC_BOOL_EX(retval, "is_passive", bson_iter_init_find_case(&iter, is_master, "passive") && bson_iter_as_bool(&iter));
12971293

1298-
ADD_ASSOC_BOOL_EX(retval, "is_passive", b);
1299-
}
1300-
if (sd->tags.len) {
1294+
if (bson_iter_init_find(&iter, is_master, "tags") && BSON_ITER_HOLDS_DOCUMENT(&iter)) {
1295+
const uint8_t *bytes;
1296+
uint32_t len;
13011297
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
1298+
13021299
/* Use native arrays for debugging output */
13031300
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
13041301
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
13051302

1306-
phongo_bson_to_zval_ex(bson_get_data(&sd->tags), sd->tags.len, &state);
1303+
bson_iter_document(&iter, &len, &bytes);
1304+
phongo_bson_to_zval_ex(bytes, len, &state);
1305+
13071306
#if PHP_VERSION_ID >= 70000
13081307
ADD_ASSOC_ZVAL_EX(retval, "tags", &state.zchild);
13091308
#else
13101309
ADD_ASSOC_ZVAL_EX(retval, "tags", state.zchild);
13111310
#endif
13121311
}
1312+
13131313
{
13141314
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
13151315
/* Use native arrays for debugging output */
13161316
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
13171317
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
13181318

1319-
phongo_bson_to_zval_ex(bson_get_data(&sd->last_is_master), sd->last_is_master.len, &state);
1319+
phongo_bson_to_zval_ex(bson_get_data(is_master), is_master->len, &state);
1320+
13201321
#if PHP_VERSION_ID >= 70000
13211322
ADD_ASSOC_ZVAL_EX(retval, "last_is_master", &state.zchild);
13221323
#else

php_phongo.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ const mongoc_read_prefs_t* phongo_read_preference_from_zval(zval *zread_prefe
130130
const mongoc_write_concern_t* phongo_write_concern_from_zval (zval *zwrite_concern TSRMLS_DC);
131131
const php_phongo_query_t* phongo_query_from_zval (zval *zquery TSRMLS_DC);
132132

133-
void php_phongo_server_to_zval(zval *retval, const mongoc_server_description_t *sd);
133+
void php_phongo_server_to_zval(zval *retval, mongoc_server_description_t *sd);
134134
void php_phongo_read_concern_to_zval(zval *retval, const mongoc_read_concern_t *read_concern);
135135
void php_phongo_read_preference_to_zval(zval *retval, const mongoc_read_prefs_t *read_prefs);
136136
void php_phongo_write_concern_to_zval(zval *retval, const mongoc_write_concern_t *write_concern);

src/MongoDB/Server.c

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -171,18 +171,31 @@ PHP_METHOD(Server, getTags)
171171

172172

173173
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;
177176

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);
180188

181189
#if PHP_VERSION_ID >= 70000
182-
RETURN_ZVAL(&state.zchild, 0, 1);
190+
RETURN_ZVAL(&state.zchild, 0, 1);
183191
#else
184-
RETURN_ZVAL(state.zchild, 0, 1);
192+
RETURN_ZVAL(state.zchild, 0, 1);
185193
#endif
194+
}
195+
196+
array_init(return_value);
197+
mongoc_server_description_destroy(sd);
198+
return;
186199
}
187200

188201
phongo_throw_exception(PHONGO_ERROR_RUNTIME TSRMLS_CC, "Failed to get server description");
@@ -205,11 +218,13 @@ PHP_METHOD(Server, getInfo)
205218

206219

207220
if ((sd = mongoc_client_get_server_description(intern->client, intern->server_id))) {
221+
const bson_t *is_master = mongoc_server_description_ismaster(sd);
208222
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
223+
209224
state.map.root_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
210225
state.map.document_type = PHONGO_TYPEMAP_NATIVE_ARRAY;
211226

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);
213228
mongoc_server_description_destroy(sd);
214229

215230
#if PHP_VERSION_ID >= 70000
@@ -384,7 +399,7 @@ PHP_METHOD(Server, isHidden)
384399
if ((sd = mongoc_client_get_server_description(intern->client, intern->server_id))) {
385400
bson_iter_t iter;
386401

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));
388403
mongoc_server_description_destroy(sd);
389404
return;
390405
}
@@ -410,7 +425,7 @@ PHP_METHOD(Server, isPassive)
410425
if ((sd = mongoc_client_get_server_description(intern->client, intern->server_id))) {
411426
bson_iter_t iter;
412427

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));
414429
mongoc_server_description_destroy(sd);
415430
return;
416431
}

0 commit comments

Comments
 (0)