null+****@clear*****
null+****@clear*****
2012年 2月 24日 (金) 15:21:28 JST
Kouhei Sutou 2012-02-24 15:21:28 +0900 (Fri, 24 Feb 2012) New Revision: 5eaea0531f6341d7c1be572f3f0d024ff98d2423 Log: Ensure to reset the current table on repair table Modified files: ha_mroonga.cc ha_mroonga.h Modified: ha_mroonga.cc (+16 -15) =================================================================== --- ha_mroonga.cc 2012-02-24 15:10:39 +0900 (15deada) +++ ha_mroonga.cc 2012-02-24 15:21:28 +0900 (7dd8001) @@ -2103,8 +2103,7 @@ int ha_mroonga::wrapper_create_index_fulltext_validate(KEY *key_info) DBUG_RETURN(error); } -int ha_mroonga::wrapper_create_index_fulltext(grn_obj *grn_table, - const char *grn_table_name, +int ha_mroonga::wrapper_create_index_fulltext(const char *grn_table_name, int i, KEY *key_info, grn_obj **index_tables, @@ -2180,8 +2179,7 @@ int ha_mroonga::wrapper_create_index_fulltext(grn_obj *grn_table, DBUG_RETURN(error); } -int ha_mroonga::wrapper_create_index_geo(grn_obj *grn_table, - const char *grn_table_name, +int ha_mroonga::wrapper_create_index_geo(const char *grn_table_name, int i, KEY *key_info, grn_obj **index_tables, @@ -2249,20 +2247,24 @@ int ha_mroonga::wrapper_create_index(const char *name, TABLE *table, if (error) DBUG_RETURN(error); - grn_obj *grn_table; + grn_obj *grn_index_table; char *grn_table_path = NULL; // we don't specify path grn_obj *pkey_type = grn_ctx_at(ctx, GRN_DB_SHORT_TEXT); grn_obj *pkey_value_type = NULL; // we don't use this grn_obj_flags grn_table_flags = GRN_OBJ_PERSISTENT | GRN_OBJ_TABLE_HASH_KEY; - grn_table = grn_table_create(ctx, grn_table_name, strlen(grn_table_name), - grn_table_path, grn_table_flags, - pkey_type, pkey_value_type); + grn_index_table = grn_table_create(ctx, grn_table_name, strlen(grn_table_name), + grn_table_path, grn_table_flags, + pkey_type, pkey_value_type); if (ctx->rc) { error = ER_CANT_CREATE_TABLE; my_message(error, ctx->errbuf, MYF(0)); DBUG_RETURN(error); } + if (grn_table) { + grn_obj_unlink(ctx, grn_table); + } + grn_table = grn_index_table; uint i; uint n_keys = table->s->keys; @@ -2272,11 +2274,11 @@ int ha_mroonga::wrapper_create_index(const char *name, TABLE *table, KEY key_info = table->s->key_info[i]; if (key_info.algorithm == HA_KEY_ALG_FULLTEXT) { - error = wrapper_create_index_fulltext(grn_table, grn_table_name, + error = wrapper_create_index_fulltext(grn_table_name, i, &key_info, index_tables, tmp_share); } else if (mrn_is_geo_key(&key_info)) { - error = wrapper_create_index_geo(grn_table, grn_table_name, + error = wrapper_create_index_geo(grn_table_name, i, &key_info, index_tables, tmp_share); } @@ -2291,6 +2293,7 @@ int ha_mroonga::wrapper_create_index(const char *name, TABLE *table, } } grn_obj_remove(ctx, grn_table); + grn_table = NULL; } DBUG_RETURN(error); @@ -9994,9 +9997,7 @@ int ha_mroonga::wrapper_recreate_indexes(THD *thd) bitmap_clear_all(table->read_set); clear_indexes(); remove_grn_obj_force(table_name); - if (grn_table) { - grn_table = NULL; - } + grn_table = NULL; mrn_set_bitmap_by_key(table->read_set, p_key_info); for (i = 0; i < n_keys; i++) { if (!(key_info[i].flags & HA_FULLTEXT) && !mrn_is_geo_key(&key_info[i])) { @@ -10382,7 +10383,7 @@ int ha_mroonga::wrapper_add_index(TABLE *table_arg, KEY *key_info, index_tables[i + n_keys] = NULL; if ( (key_info[i].flags & HA_FULLTEXT) && - (res = wrapper_create_index_fulltext(grn_table, grn_table_name, + (res = wrapper_create_index_fulltext(grn_table_name, i + n_keys, &key_info[i], index_tables, tmp_share)) @@ -10390,7 +10391,7 @@ int ha_mroonga::wrapper_add_index(TABLE *table_arg, KEY *key_info, break; } else if ( mrn_is_geo_key(&key_info[i]) && - (res = wrapper_create_index_geo(grn_table, grn_table_name, + (res = wrapper_create_index_geo(grn_table_name, i + n_keys, &key_info[i], index_tables, tmp_share)) ) { Modified: ha_mroonga.h (+2 -4) =================================================================== --- ha_mroonga.h 2012-02-24 15:10:39 +0900 (4f3c449) +++ ha_mroonga.h 2012-02-24 15:21:28 +0900 (2e842f5) @@ -520,14 +520,12 @@ private: int storage_create(const char *name, TABLE *table, HA_CREATE_INFO *info, MRN_SHARE *tmp_share); int wrapper_create_index_fulltext_validate(KEY *key_info); - int wrapper_create_index_fulltext(grn_obj *grn_table, - const char *grn_table_name, + int wrapper_create_index_fulltext(const char *grn_table_name, int i, KEY *key_info, grn_obj **index_tables, MRN_SHARE *tmp_share); - int wrapper_create_index_geo(grn_obj *grn_table, - const char *grn_table_name, + int wrapper_create_index_geo(const char *grn_table_name, int i, KEY *key_info, grn_obj **index_tables,