static GList * retrieve_all_keys_and_values(void) { grn_id id; keys_and_values_free(); id = grn_hash_cursor_next(context, cursor); while (id != GRN_ID_NIL) { int length; void *key, *value; GString *null_terminated_key, *null_terminated_value; length = grn_hash_cursor_get_key(context, cursor, &key); null_terminated_key = g_string_new_len(key, length); keys_and_values = g_list_append(keys_and_values, g_string_free(null_terminated_key, FALSE)); length = grn_hash_cursor_get_value(context, cursor, &value); null_terminated_value = g_string_new_len(value, length); keys_and_values = g_list_append(keys_and_values, g_string_free(null_terminated_value, FALSE)); id = grn_hash_cursor_next(context, cursor); } return keys_and_values; }
static GList * retrieve_all_keys(void) { grn_id hash_id; grn_hash_cursor *cursor; keys_free(); cursor = grn_hash_cursor_open(context, hash, NULL, 0, NULL, 0, 0, -1, GRN_CURSOR_DESCENDING); hash_id = grn_hash_cursor_next(context, cursor); while (hash_id != GRN_ID_NIL) { grn_id *trie_id; void *hash_key; GString *null_terminated_key; gchar key[GRN_PAT_MAX_KEY_SIZE]; int size; grn_hash_cursor_get_key(context, cursor, &hash_key); trie_id = hash_key; size = grn_pat_get_key(context, trie, *trie_id, key, sizeof(key)); null_terminated_key = g_string_new_len(key, size); keys = g_list_append(keys, g_string_free(null_terminated_key, FALSE)); hash_id = grn_hash_cursor_next(context, cursor); } grn_hash_cursor_close(context, cursor); return keys; }
/* grn_ts_writer_expand() expands a wildcard. */ static grn_rc grn_ts_writer_expand(grn_ctx *ctx, grn_ts_writer *writer, grn_obj *table, grn_ts_str str) { grn_rc rc = GRN_SUCCESS; grn_hash_cursor *cursor; grn_hash *hash = grn_hash_create(ctx, NULL, sizeof(grn_ts_id), 0, GRN_OBJ_TABLE_HASH_KEY | GRN_HASH_TINY); if (!hash) { return GRN_INVALID_ARGUMENT; } grn_table_columns(ctx, table, str.ptr, str.size - 1, (grn_obj *)hash); if (ctx->rc != GRN_SUCCESS) { return ctx->rc; } cursor = grn_hash_cursor_open(ctx, hash, NULL, 0, NULL, 0, 0, -1, 0); if (!cursor) { rc = GRN_INVALID_ARGUMENT; } else { while (grn_hash_cursor_next(ctx, cursor) != GRN_ID_NIL) { char name_buf[GRN_TABLE_MAX_KEY_SIZE]; size_t name_size; grn_obj *column; grn_ts_id *column_id; if (!grn_hash_cursor_get_key(ctx, cursor, (void **)&column_id)) { rc = GRN_INVALID_ARGUMENT; break; } column = grn_ctx_at(ctx, *column_id); if (!column) { rc = GRN_INVALID_ARGUMENT; break; } name_size = grn_column_name(ctx, column, name_buf, sizeof(name_buf)); grn_obj_unlink(ctx, column); rc = grn_vector_add_element(ctx, &writer->name_buf, name_buf, name_size, 0, GRN_DB_TEXT); if (rc != GRN_SUCCESS) { break; } } grn_hash_cursor_close(ctx, cursor); } grn_hash_close(ctx, hash); return rc; }
static GList * retrieve_all_keys(void) { grn_id id; keys_free(); id = grn_hash_cursor_next(context, cursor); while (id != GRN_ID_NIL) { void *key; GString *null_terminated_key; int size; size = grn_hash_cursor_get_key(context, cursor, &key); null_terminated_key = g_string_new_len(key, size); keys = g_list_append(keys, g_string_free(null_terminated_key, FALSE)); id = grn_hash_cursor_next(context, cursor); } return keys; }