[Groonga-mysql-commit] mroonga/mroonga [master] Ensure to reset the current table on repair table

Back to archive index

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,




Groonga-mysql-commit メーリングリストの案内
Back to archive index