static bool _mongoc_cursor_cursorid_get_more (mongoc_cursor_t *cursor) { mongoc_cursor_cursorid_t *cid; mongoc_server_stream_t *server_stream; bson_t command; bool ret; ENTRY; cid = (mongoc_cursor_cursorid_t *)cursor->iface_data; BSON_ASSERT (cid); server_stream = _mongoc_cursor_fetch_stream (cursor); if (!server_stream) { RETURN (false); } if (_use_find_command (cursor, server_stream)) { if (!_mongoc_cursor_prepare_getmore_command (cursor, &command)) { mongoc_server_stream_cleanup (server_stream); RETURN (false); } ret = _mongoc_cursor_cursorid_refresh_from_command (cursor, &command); bson_destroy (&command); } else { ret = _mongoc_cursor_op_getmore (cursor, server_stream); cid->in_reader = ret; } mongoc_server_stream_cleanup (server_stream); RETURN (ret); }
static getmore_type_t _getmore_type (mongoc_cursor_t *cursor) { mongoc_server_stream_t *server_stream; bool use_cmd; data_cmd_t *data = (data_cmd_t *) cursor->impl.data; if (data->getmore_type != UNKNOWN) { return data->getmore_type; } server_stream = _mongoc_cursor_fetch_stream (cursor); if (!server_stream) { return UNKNOWN; } use_cmd = server_stream->sd->max_wire_version >= WIRE_VERSION_FIND_CMD && !_mongoc_cursor_get_opt_bool (cursor, MONGOC_CURSOR_EXHAUST); data->getmore_type = use_cmd ? GETMORE_CMD : OP_GETMORE; mongoc_server_stream_cleanup (server_stream); return data->getmore_type; }