Array HHVM_METHOD(MongoDBDriverManager, getServers) { MongoDBDriverManagerData *data = Native::data<MongoDBDriverManagerData>(this_); size_t i; mongoc_server_description_t **sds; size_t n; Array retval = Array::Create(); sds = mongoc_client_get_server_descriptions(data->m_client, &n); for (i = 0; i < n; i++) { if (sds[i]->type == MONGOC_SERVER_UNKNOWN) { continue; } retval.add( (int64_t) i, hippo_mongo_driver_server_create_from_id(data->m_client, sds[i]->id) ); } mongoc_server_descriptions_destroy_all(sds, n); return retval; }
Object HHVM_METHOD(MongoDBDriverManager, selectServer, const Object &readPreference) { MongoDBDriverManagerData* data = Native::data<MongoDBDriverManagerData>(this_); MongoDBDriverReadPreferenceData *rp_data = Native::data<MongoDBDriverReadPreferenceData>(readPreference.get()); bson_error_t error; mongoc_server_description_t *selected_server = NULL; Object tmp; selected_server = mongoc_client_select_server(data->m_client, false, rp_data->m_read_preference, &error); if (selected_server) { tmp = hippo_mongo_driver_server_create_from_id(data->m_client, selected_server->id); mongoc_server_description_destroy(selected_server); return tmp; } else { throw MongoDriver::Utils::throwExceptionFromBsonError(&error); } }
Object HHVM_METHOD(MongoDBDriverWriteResult, getServer) { MongoDBDriverWriteResultData* data = Native::data<MongoDBDriverWriteResultData>(this_); return hippo_mongo_driver_server_create_from_id(data->m_client, data->m_server_id); }