mongoc_cursor_t * _mongoc_cursor_array_clone (const mongoc_cursor_t *cursor) { mongoc_cursor_t *clone; ENTRY; clone = _mongoc_cursor_clone (cursor); _mongoc_cursor_array_init (clone); RETURN (clone); }
static mongoc_cursor_t * _mongoc_cursor_array_clone (const mongoc_cursor_t *cursor) { mongoc_cursor_array_t *arr; mongoc_cursor_t *clone_; ENTRY; arr = (mongoc_cursor_array_t *)cursor->iface_data; clone_ = _mongoc_cursor_clone (cursor); _mongoc_cursor_array_init (clone_, arr->field_name); RETURN (clone_); }
mongoc_cursor_t * mongoc_client_find_databases (mongoc_client_t *client, bson_error_t *error) { bson_t cmd = BSON_INITIALIZER; mongoc_cursor_t *cursor; BSON_ASSERT (client); BSON_APPEND_INT32 (&cmd, "listDatabases", 1); cursor = _mongoc_cursor_new (client, "admin", MONGOC_QUERY_SLAVE_OK, 0, 0, 0, true, NULL, NULL, NULL, NULL); _mongoc_cursor_array_init (cursor, &cmd, "databases"); bson_destroy (&cmd); return cursor; }
mongoc_cursor_t * mongoc_database_find_collections (mongoc_database_t *database, const bson_t *filter, bson_error_t *error) { mongoc_cursor_t *cursor; mongoc_read_prefs_t *read_prefs; bson_t cmd = BSON_INITIALIZER; bson_t child; bson_error_t lerror; BSON_ASSERT (database); BSON_APPEND_INT32 (&cmd, "listCollections", 1); if (filter) { BSON_APPEND_DOCUMENT (&cmd, "filter", filter); BSON_APPEND_DOCUMENT_BEGIN (&cmd, "cursor", &child); bson_append_document_end (&cmd, &child); } read_prefs = mongoc_read_prefs_new (MONGOC_READ_PRIMARY); cursor = mongoc_database_command (database, MONGOC_QUERY_SLAVE_OK, 0, 0, 0, &cmd, NULL, read_prefs); _mongoc_cursor_cursorid_init(cursor); cursor->limit = 0; if (_mongoc_cursor_cursorid_prime (cursor)) { /* intentionally empty */ } else { if (mongoc_cursor_error (cursor, &lerror)) { if (lerror.code == MONGOC_ERROR_QUERY_COMMAND_NOT_FOUND) { /* We are talking to a server that doesn' support listCollections. */ /* clear out the error. */ memset (&lerror, 0, sizeof lerror); /* try again with using system.namespaces */ mongoc_cursor_destroy (cursor); cursor = _mongoc_database_find_collections_legacy ( database, filter, error); } else if (error) { memcpy (error, &lerror, sizeof *error); } } else { /* TODO: remove this branch for general release. Only relevant for RC */ mongoc_cursor_destroy (cursor); cursor = mongoc_database_command (database, MONGOC_QUERY_SLAVE_OK, 0, 0, 0, &cmd, NULL, read_prefs); _mongoc_cursor_array_init(cursor, "collections"); cursor->limit = 0; } } bson_destroy (&cmd); mongoc_read_prefs_destroy (read_prefs); return cursor; }