grn_index * grn_index_open(grn_ctx *ctx, const char *path) { grn_obj *db, *keys, *key_type, *lexicon, *inv, *tokenizer; if ((db = grn_db_create(ctx, NULL, NULL))) { char buffer[PATH_MAX]; strcpy(buffer, path); strcat(buffer, ".SEN"); if ((key_type = grn_ctx_at(ctx, GRN_DB_SHORTTEXT))) { if ((keys = grn_table_open(ctx, "<keys>", 6, buffer))) { strcpy(buffer, path); strcat(buffer, ".SEN.l"); if ((lexicon = grn_table_open(ctx, "<lexicon>", 9, buffer))) { if ((tokenizer = grn_ctx_at(ctx, GRN_DB_MECAB))) { grn_obj_set_info(ctx, lexicon, GRN_INFO_DEFAULT_TOKENIZER, tokenizer); strcpy(buffer, path); strcat(buffer, ".SEN.i"); if ((inv = grn_column_open(ctx, lexicon, "inv", 3, buffer, keys))) { grn_index *index; if ((index = malloc(sizeof(grn_index)))) { index->db = db; index->keys = keys; index->lexicon = lexicon; index->inv = inv; return index; } } } } } } } return NULL; }
void test_read_write(gconstpointer *data) { gint i; int added; grn_ctx *context; grn_obj *table; const gchar *path; const gchar *value_string; gint process_number = 0; const gchar *process_number_string; const gchar table_name[] = "performance-read-write"; grn_obj value; grn_obj *retrieved_value; grn_id id; grn_rc rc; i = GPOINTER_TO_INT(data); process_number_string = g_getenv(GRN_TEST_ENV_PROCESS_NUMBER); if (process_number_string) process_number = atoi(process_number_string); rc = grn_ctx_init(&contexts[i], GRN_CTX_USE_QL); grn_test_assert(rc, cut_set_message("context: %d (%d)", i, process_number)); context = &contexts[i]; path = g_getenv(GRN_TEST_ENV_TABLE_PATH); cut_assert_not_null(path); tables[i] = grn_table_open(context, table_name, strlen(table_name), path); cut_assert_not_null(tables[i], cut_message("table: %d (%d)", i, process_number)); table = tables[i]; grn_test_assert_nil(grn_table_get(context, table, &i, sizeof(grn_id)), cut_message("lookup - fail: (%d:%d)", i, process_number)); value_string = cut_take_printf("value: (%d:%d)", i, process_number); id = grn_table_add(context, table, &i, sizeof(grn_id), &added); grn_test_assert_not_nil(id); cut_assert_equal_int(1, added); GRN_TEXT_INIT(&value, GRN_OBJ_DO_SHALLOW_COPY); GRN_TEXT_SET_REF(&value, value_string, strlen(value_string)); grn_obj_set_value(context, table, id, &value, GRN_OBJ_SET); retrieved_value = grn_obj_get_value(context, table, id, NULL); grn_test_assert_not_nil( id, cut_message("lookup - success: (%d:%d)", i, process_number)); GRN_TEXT_PUTC(context, retrieved_value, '\0'); cut_assert_equal_string(value_string, GRN_BULK_HEAD(retrieved_value)); tables[i] = NULL; grn_test_assert(grn_obj_close(context, table)); // contexts[i] = NULL; grn_test_assert(grn_ctx_fin(context)); }