[Groonga-mysql-commit] mroonga/mroonga [master] Integrate index table name related codes into mrn::IndexTableName

Back to archive index

null+****@clear***** null+****@clear*****
2012年 4月 9日 (月) 19:23:11 JST


Kouhei Sutou	2012-04-09 19:23:11 +0900 (Mon, 09 Apr 2012)

  New Revision: c4c55893d21882ce494e28b76356c6e43f20c48b

  Log:
    Integrate index table name related codes into mrn::IndexTableName

  Modified files:
    ha_mroonga.cpp
    lib/Makefile.am
    mrn_sys.hpp
    test/unit/test_mrn_sys.cpp
  Renamed files:
    lib/mrn_index_table_name.cpp
      (from lib/mrn_path_encoder.cpp)
    lib/mrn_index_table_name.hpp
      (from lib/mrn_path_encoder.hpp)

  Modified: ha_mroonga.cpp (+69 -77)
===================================================================
--- ha_mroonga.cpp    2012-04-09 18:32:44 +0900 (bc9dba2)
+++ ha_mroonga.cpp    2012-04-09 19:23:11 +0900 (189870a)
@@ -44,7 +44,7 @@
 #include "mrn_table.hpp"
 #include "ha_mroonga.hpp"
 #include <mrn_path_mapper.hpp>
-#include <mrn_path_encoder.hpp>
+#include <mrn_index_table_name.hpp>
 
 #define MRN_SHORT_TEXT_SIZE (1 << 12) //  4Kbytes
 #define MRN_TEXT_SIZE       (1 << 16) // 64Kbytes
@@ -302,16 +302,6 @@ static int mrn_change_encoding(grn_ctx *ctx, const CHARSET_INFO *charset)
   DBUG_RETURN(ER_MRN_CHARSET_NOT_SUPPORT_NUM);
 }
 
-static char *mrn_index_table_name_create(const char *table_name,
-                                         const char *index_name,
-                                         char *dest)
-{
-  MRN_DBUG_ENTER_FUNCTION();
-  mrn::PathEncoder encoder(index_name);
-  mrn_index_table_name_gen(table_name, encoder.path(), dest);
-  DBUG_RETURN(dest);
-}
-
 #if !defined(DBUG_OFF) && !defined(_lint)
 static const char *mrn_inspect_thr_lock_type(enum thr_lock_type lock_type)
 {
@@ -2261,9 +2251,6 @@ int ha_mroonga::wrapper_create_index_fulltext(const char *grn_table_name,
   if (error)
     DBUG_RETURN(error);
 
-  char index_name[MRN_MAX_PATH_SIZE];
-  mrn_index_table_name_create(grn_table_name, key_info->name, index_name);
-
   grn_obj_flags index_table_flags =
     GRN_OBJ_TABLE_PAT_KEY |
     GRN_OBJ_PERSISTENT;
@@ -2285,7 +2272,11 @@ int ha_mroonga::wrapper_create_index_fulltext(const char *grn_table_name,
     grn_obj_unlink(ctx, lexicon_key_type);
     DBUG_RETURN(error);
   }
-  index_table = grn_table_create(ctx, index_name, strlen(index_name), NULL,
+  mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
+  index_table = grn_table_create(ctx,
+                                 index_table_name.c_str(),
+                                 index_table_name.length(),
+                                 NULL,
                                  index_table_flags, lexicon_key_type, 0);
   if (ctx->rc) {
     error = ER_CANT_CREATE_TABLE;
@@ -2332,8 +2323,7 @@ int ha_mroonga::wrapper_create_index_geo(const char *grn_table_name,
   if (error)
     DBUG_RETURN(error);
 
-  char index_name[MRN_MAX_PATH_SIZE];
-  mrn_index_table_name_create(grn_table_name, key_info->name, index_name);
+  mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
 
   grn_obj_flags index_table_flags =
     GRN_OBJ_TABLE_PAT_KEY |
@@ -2344,7 +2334,10 @@ int ha_mroonga::wrapper_create_index_geo(const char *grn_table_name,
     GRN_OBJ_COLUMN_INDEX | GRN_OBJ_PERSISTENT;
 
   grn_obj *lexicon_key_type = grn_ctx_at(ctx, GRN_DB_WGS84_GEO_POINT);
-  index_table = grn_table_create(ctx, index_name, strlen(index_name), NULL,
+  index_table = grn_table_create(ctx,
+                                 index_table_name.c_str(),
+                                 index_table_name.length(),
+                                 NULL,
                                  index_table_flags, lexicon_key_type, 0);
   if (ctx->rc) {
     error = ER_CANT_CREATE_TABLE;
@@ -2646,7 +2639,6 @@ int ha_mroonga::storage_create_index(TABLE *table, const char *grn_table_name,
 {
   MRN_DBUG_ENTER_METHOD();
   int error = 0;
-  char index_table_name[MRN_MAX_KEY_SIZE];
   grn_obj *index_table, *index_column;
   grn_obj *column = NULL;
   grn_obj *index_type = NULL;
@@ -2655,9 +2647,7 @@ int ha_mroonga::storage_create_index(TABLE *table, const char *grn_table_name,
   if (error)
     DBUG_RETURN(error);
 
-  mrn_index_table_name_create(grn_table_name, key_info->name,
-                              index_table_name);
-
+  mrn::IndexTableName index_table_name(grn_table_name, key_info->name);
   int key_parts = key_info->key_parts;
   grn_obj_flags index_table_flags = GRN_OBJ_PERSISTENT;
   grn_obj_flags index_column_flags =
@@ -2703,8 +2693,8 @@ int ha_mroonga::storage_create_index(TABLE *table, const char *grn_table_name,
   }
 
   index_table = grn_table_create(ctx,
-                                 index_table_name,
-                                 strlen(index_table_name),
+                                 index_table_name.c_str(),
+                                 index_table_name.length(),
                                  NULL,
                                  index_table_flags,
                                  index_type,
@@ -3088,9 +3078,10 @@ int ha_mroonga::wrapper_open_indexes(const char *name, bool ignore_open_error)
       continue;
     }
 
-    char index_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(mapper.table_name(), key_info.name, index_name);
-    grn_index_tables[i] = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(mapper.table_name(), key_info.name);
+    grn_index_tables[i] = grn_ctx_get(ctx,
+                                      index_table_name.c_str(),
+                                      index_table_name.length());
     if (ctx->rc) {
       DBUG_PRINT("info",
                  ("mroonga: sql_command=%u", thd_sql_command(ha_thd())));
@@ -3316,7 +3307,6 @@ int ha_mroonga::storage_open_indexes(const char *name)
   if (error)
     DBUG_RETURN(error);
 
-  char index_name[MRN_MAX_PATH_SIZE];
   uint n_keys = table->s->keys;
   uint pkey_nr = table->s->primary_key;
   if (n_keys > 0) {
@@ -3353,8 +3343,10 @@ int ha_mroonga::storage_open_indexes(const char *name)
       }
     }
 
-    mrn_index_table_name_create(mapper.table_name(), key_info.name, index_name);
-    grn_index_tables[i] = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(mapper.table_name(), key_info.name);
+    grn_index_tables[i] = grn_ctx_get(ctx,
+                                      index_table_name.c_str(),
+                                      index_table_name.length());
     if (ctx->rc) {
       error = ER_CANT_OPEN_FILE;
       my_message(error, ctx->errbuf, MYF(0));
@@ -3600,10 +3592,11 @@ int ha_mroonga::wrapper_delete_index(const char *name, MRN_SHARE *tmp_share,
 
   uint i;
   for (i = 0; i < tmp_table_share->keys; i++) {
-    char index_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(table_name, tmp_table_share->key_info[i].name,
-                                index_name);
-    grn_obj *index_table = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(table_name,
+                                         tmp_table_share->key_info[i].name);
+    grn_obj *index_table = grn_ctx_get(ctx,
+                                       index_table_name.c_str(),
+                                       index_table_name.length());
     if (index_table != NULL) {
       grn_obj_remove(ctx, index_table);
     }
@@ -3625,7 +3618,6 @@ int ha_mroonga::storage_delete_table(const char *name, MRN_SHARE *tmp_share,
   int error = 0;
   TABLE_SHARE *tmp_table_share = tmp_share->table_share;
   MRN_DBUG_ENTER_METHOD();
-  char index_name[MRN_MAX_PATH_SIZE];
 
   error = ensure_database_open(name);
   if (error)
@@ -3637,9 +3629,11 @@ int ha_mroonga::storage_delete_table(const char *name, MRN_SHARE *tmp_share,
 
   uint i;
   for (i = 0; i < tmp_table_share->keys; i++) {
-    mrn_index_table_name_create(table_name, tmp_table_share->key_info[i].name,
-                                index_name);
-    grn_obj *idx_table_obj = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(table_name,
+                                         tmp_table_share->key_info[i].name);
+    grn_obj *idx_table_obj = grn_ctx_get(ctx,
+                                         index_table_name.c_str(),
+                                         index_table_name.length());
     if (idx_table_obj != NULL) {
       grn_obj_remove(ctx, idx_table_obj);
     }
@@ -10119,19 +10113,17 @@ int ha_mroonga::wrapper_rename_index(const char *from, const char *to,
 
   uint i;
   for (i = 0; i < tmp_table_share->keys; i++) {
-    char from_index_name[MRN_MAX_PATH_SIZE];
-    char to_index_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(from_table_name,
-                                tmp_table_share->key_info[i].name,
-                                from_index_name);
-    mrn_index_table_name_create(to_table_name,
-                                tmp_table_share->key_info[i].name,
-                                to_index_name);
-    grn_obj *index_table = grn_ctx_get(ctx, from_index_name,
-                                       strlen(from_index_name));
+    const char *mysql_index_name = tmp_table_share->key_info[i].name;
+    mrn::IndexTableName from_index_table_name(from_table_name, mysql_index_name);
+    mrn::IndexTableName  to_index_table_name(to_table_name, mysql_index_name);
+    grn_obj *index_table;
+    index_table = grn_ctx_get(ctx,
+                              from_index_table_name.c_str(),
+                              from_index_table_name.length());
     if (index_table != NULL) {
-      rc = grn_table_rename(ctx, index_table, to_index_name,
-                            strlen(to_index_name));
+      rc = grn_table_rename(ctx, index_table,
+                            to_index_table_name.c_str(),
+                            to_index_table_name.length());
       if (rc != GRN_SUCCESS) {
         error = ER_CANT_OPEN_FILE;
         my_message(error, ctx->errbuf, MYF(0));
@@ -10165,8 +10157,6 @@ int ha_mroonga::storage_rename_table(const char *from, const char *to,
   grn_rc rc;
   TABLE_SHARE *tmp_table_share = tmp_share->table_share;
   MRN_DBUG_ENTER_METHOD();
-  char from_index_name[MRN_MAX_PATH_SIZE];
-  char to_index_name[MRN_MAX_PATH_SIZE];
   error = mrn_change_encoding(ctx, system_charset_info);
   if (error)
     DBUG_RETURN(error);
@@ -10177,17 +10167,19 @@ int ha_mroonga::storage_rename_table(const char *from, const char *to,
 
   uint i;
   for (i = 0; i < tmp_table_share->keys; i++) {
-    mrn_index_table_name_create(from_table_name,
-                                tmp_table_share->key_info[i].name,
-                                from_index_name);
-    mrn_index_table_name_create(to_table_name,
-                                tmp_table_share->key_info[i].name,
-                                to_index_name);
-    grn_obj *idx_table_obj = grn_ctx_get(ctx, from_index_name,
-                                       strlen(from_index_name));
-    if (idx_table_obj != NULL) {
-      rc = grn_table_rename(ctx, idx_table_obj, to_index_name,
-                            strlen(to_index_name));
+    const char *mysql_index_name = tmp_table_share->key_info[i].name;
+    mrn::IndexTableName from_index_table_name(from_table_name,
+                                              mysql_index_name);
+    mrn::IndexTableName to_index_table_name(to_table_name,
+                                            mysql_index_name);
+    grn_obj *index_table;
+    index_table = grn_ctx_get(ctx,
+                              from_index_table_name.c_str(),
+                              from_index_table_name.length());
+    if (index_table != NULL) {
+      rc = grn_table_rename(ctx, index_table,
+                            to_index_table_name.c_str(),
+                            to_index_table_name.length());
       if (rc != GRN_SUCCESS) {
         error = ER_CANT_OPEN_FILE;
         my_message(error, ctx->errbuf, MYF(0));
@@ -10456,15 +10448,13 @@ int ha_mroonga::wrapper_recreate_indexes(THD *thd)
     if (!(key_info[i].flags & HA_FULLTEXT) && !mrn_is_geo_key(&key_info[i])) {
       continue;
     }
-    char index_name[MRN_MAX_PATH_SIZE];
+    mrn::IndexTableName index_table_name(mapper.table_name(),
+                                         table_share->key_info[i].name);
     char index_column_full_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(mapper.table_name(),
-                                table_share->key_info[i].name,
-                                index_name);
     snprintf(index_column_full_name, MRN_MAX_PATH_SIZE,
-             "%s.%s", index_name, index_column_name);
+             "%s.%s", index_table_name.c_str(), index_column_name);
     remove_grn_obj_force(index_column_full_name);
-    remove_grn_obj_force(index_name);
+    remove_grn_obj_force(index_table_name.c_str());
     mrn_set_bitmap_by_key(table->read_set, &key_info[i]);
   }
   error = wrapper_create_index(table_share->normalized_path.str, table,
@@ -11223,10 +11213,11 @@ int ha_mroonga::wrapper_prepare_drop_index(TABLE *table_arg, uint *key_num,
       continue;
     }
 
-    char index_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(mapper.table_name(), key_info[key_num[i]].name,
-                                index_name);
-    grn_obj *index_table = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(mapper.table_name(),
+                                         key_info[key_num[i]].name);
+    grn_obj *index_table = grn_ctx_get(ctx,
+                                       index_table_name.c_str(),
+                                       index_table_name.length());
     if (index_table != NULL) {
       grn_obj_remove(ctx, index_table);
     }
@@ -11257,10 +11248,11 @@ int ha_mroonga::storage_prepare_drop_index(TABLE *table_arg, uint *key_num,
 
   mrn::PathMapper mapper(share->table_name);
   for (i = 0; i < num_of_keys; i++) {
-    char index_name[MRN_MAX_PATH_SIZE];
-    mrn_index_table_name_create(mapper.table_name(), key_info[key_num[i]].name,
-                                index_name);
-    grn_obj *index_table = grn_ctx_get(ctx, index_name, strlen(index_name));
+    mrn::IndexTableName index_table_name(mapper.table_name(),
+                                         key_info[key_num[i]].name);
+    grn_obj *index_table = grn_ctx_get(ctx,
+                                       index_table_name.c_str(),
+                                       index_table_name.length());
     if (index_table != NULL) {
       grn_obj_remove(ctx, index_table);
     }

  Modified: lib/Makefile.am (+2 -2)
===================================================================
--- lib/Makefile.am    2012-04-09 18:32:44 +0900 (7472563)
+++ lib/Makefile.am    2012-04-09 19:23:11 +0900 (5f33577)
@@ -13,5 +13,5 @@ libmroonga_la_SOURCES =				\
 	mrn_path_mapper.hpp
 
 libmrn_need_mysql_la_SOURCES =			\
-	mrn_path_encoder.cpp			\
-	mrn_path_encoder.hpp
+	mrn_index_table_name.cpp		\
+	mrn_index_table_name.hpp

  Renamed: lib/mrn_index_table_name.cpp (+18 -12) 68%
===================================================================
--- lib/mrn_path_encoder.cpp    2012-04-09 18:32:44 +0900 (5c6baa9)
+++ lib/mrn_index_table_name.cpp    2012-04-09 19:23:11 +0900 (c6417aa)
@@ -20,25 +20,31 @@
 
 #include <mrn_mysql.h>
 
-#include "mrn_path_encoder.hpp"
+#include "mrn_index_table_name.hpp"
 
 namespace mrn {
-  PathEncoder::PathEncoder(const char *name)
-    : name_(name) {
-    path_[0] = '\0';
+  IndexTableName::IndexTableName(const char *table_name,
+                                 const char *mysql_index_name)
+    : table_name_(table_name),
+      mysql_index_name_(mysql_index_name) {
+    char encoded_mysql_index_name[MRN_MAX_PATH_SIZE];
+    encode(encoded_mysql_index_name,
+           encoded_mysql_index_name + MRN_MAX_PATH_SIZE,
+           mysql_index_name_, mysql_index_name_ + strlen(mysql_index_name_));
+    snprintf(name_, MRN_MAX_PATH_SIZE,
+             "%s-%s", table_name_, encoded_mysql_index_name);
+    length_ = strlen(name_);
   }
 
-  const char *PathEncoder::path() {
-    if (path_[0] != '\0') {
-      return path_;
-    }
+  const char *IndexTableName::c_str() {
+    return name_;
+  }
 
-    encode(path_, path_ + MRN_MAX_PATH_SIZE,
-           name_, name_ + strlen(name_));
-    return path_;
+  size_t IndexTableName::length() {
+    return length_;
   }
 
-  uint PathEncoder::encode(char *buf_st, char *buf_ed, const char *st, const char *ed) {
+  uint IndexTableName::encode(char *buf_st, char *buf_ed, const char *st, const char *ed) {
     int res1, res2;
     char *buf = buf_st;
     my_wc_t wc;

  Renamed: lib/mrn_index_table_name.hpp (+11 -8) 72%
===================================================================
--- lib/mrn_path_encoder.hpp    2012-04-09 18:32:44 +0900 (3f72e57)
+++ lib/mrn_index_table_name.hpp    2012-04-09 19:23:11 +0900 (d178d05)
@@ -18,22 +18,25 @@
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
-#ifndef MRN_PATH_ENCODER_HPP_
-#define MRN_PATH_ENCODER_HPP_
+#ifndef MRN_INDEX_TABLE_NAME_MAPPER_HPP_
+#define MRN_INDEX_TABLE_NAME_HPP_
 
 #include "mrn_sys.hpp"
 
 namespace mrn {
-  class PathEncoder {
+  class IndexTableName {
   public:
-    PathEncoder(const char *name);
-    const char *path();
+    IndexTableName(const char *table_name, const char *mysql_index_name);
+    const char *c_str();
+    size_t length();
   private:
-    const char *name_;
-    char path_[MRN_MAX_PATH_SIZE];
+    const char *table_name_;
+    const char *mysql_index_name_;
+    char name_[MRN_MAX_PATH_SIZE];
+    size_t length_;
 
     uint encode(char *buf_st, char *buf_ed, const char *st, const char *ed);
   };
 }
 
-#endif /* MRN_PATH_ENCODER_HPP_ */
+#endif /* MRN_INDEX_TABLE_NAME_MAPPER_HPP_ */

  Modified: mrn_sys.hpp (+0 -2)
===================================================================
--- mrn_sys.hpp    2012-04-09 18:32:44 +0900 (b9f78a9)
+++ mrn_sys.hpp    2012-04-09 19:23:11 +0900 (90d20cd)
@@ -52,8 +52,6 @@ bool mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj *value)
 bool mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj **value);
 bool mrn_hash_remove(grn_ctx *ctx, grn_hash *hash, const char *key);
 
-char *mrn_index_table_name_gen(const char *arg, const char *idx_name, char *dest);
-
 MRN_END_DECLS
 
 #endif /* _mrn_sys_hpp */

  Modified: test/unit/test_mrn_sys.cpp (+0 -7)
===================================================================
--- test/unit/test_mrn_sys.cpp    2012-04-09 18:32:44 +0900 (053d5c5)
+++ test/unit/test_mrn_sys.cpp    2012-04-09 19:23:11 +0900 (4051790)
@@ -92,11 +92,4 @@ namespace test_mrn_sys
     cut_assert_equal_int(0, mrn_hash_remove(ctx, hash, key));
     cut_assert_equal_int(-1, mrn_hash_remove(ctx, hash, key));
   }
-
-  void test_mrn_index_table_name_gen()
-  {
-    char buf[64];
-    cut_assert_equal_string("users-name",
-                            mrn_index_table_name_gen("users", "name", buf));
-  }
 }




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