static bool _mongoc_cursor_cursorid_refresh_from_command (mongoc_cursor_t *cursor, const bson_t *command) { mongoc_cursor_cursorid_t *cid; ENTRY; cid = (mongoc_cursor_cursorid_t *)cursor->iface_data; BSON_ASSERT (cid); bson_destroy (&cid->array); /* server replies to find / aggregate with {cursor: {id: N, firstBatch: []}}, * to getMore command with {cursor: {id: N, nextBatch: []}}. */ if (_mongoc_cursor_run_command (cursor, command, &cid->array) && _mongoc_cursor_cursorid_start_batch (cursor)) { RETURN (true); } else { if (!cursor->error.domain) { bson_set_error (&cursor->error, MONGOC_ERROR_PROTOCOL, MONGOC_ERROR_PROTOCOL_INVALID_REPLY, "Invalid reply to %s command.", _mongoc_get_command_name (command)); } RETURN (false); } }
static void test_command_name (void) { bson_t *commands[] = { tmp_bson ("{'foo': 1}"), tmp_bson ("{'query': {'foo': 1}}"), tmp_bson ("{'query': {'foo': 1}, '$readPreference': 1}"), tmp_bson ("{'$query': {'foo': 1}}"), tmp_bson ("{'$query': {'foo': 1}, '$readPreference': 1}"), tmp_bson ("{'$readPreference': 1, '$query': {'foo': 1}}"), }; size_t i; for (i = 0; i < sizeof (commands) / sizeof (bson_t *); i++) { ASSERT_CMPSTR ("foo", _mongoc_get_command_name (commands[i])); } }