[Groonga-mysql-commit] mroonga/mroonga [master] Add PathMapper::mysql_table_name()

Back to archive index

null+****@clear***** null+****@clear*****
2012年 3月 19日 (月) 18:34:58 JST


Kouhei Sutou	2012-03-19 18:34:58 +0900 (Mon, 19 Mar 2012)

  New Revision: 94aeaca3824709ec8fbb00c36e10e2fa0a7629df

  Log:
    Add PathMapper::mysql_table_name()

  Modified files:
    lib/mrn_path_mapper.cpp
    lib/mrn_path_mapper.hpp
    test/unit/test_mrn_path_mapper.cpp

  Modified: lib/mrn_path_mapper.cpp (+19 -0)
===================================================================
--- lib/mrn_path_mapper.cpp    2012-03-19 18:34:32 +0900 (8cc047c)
+++ lib/mrn_path_mapper.cpp    2012-03-19 18:34:58 +0900 (3fdf619)
@@ -33,6 +33,7 @@ namespace mrn {
     db_path_[0] = '\0';
     db_name_[0] = '\0';
     table_name_[0] = '\0';
+    mysql_table_name_[0] = '\0';
   }
 
   /**
@@ -109,4 +110,22 @@ namespace mrn {
     table_name_[j] = '\0';
     return table_name_;
   }
+
+  /**
+   * "./${db}/${table}" ==> "${table}" (without encoding first '_')
+   */
+  const char* PathMapper::mysql_table_name() {
+    if (mysql_table_name_[0] != '\0') {
+      return mysql_table_name_;
+    }
+
+    int len = strlen(mysql_path_);
+    int i = len, j = 0;
+    for (; mysql_path_[--i] != '/' ;) {}
+    for (; i < len ;) {
+      mysql_table_name_[j++] = mysql_path_[++i];
+    }
+    mysql_table_name_[j] = '\0';
+    return mysql_table_name_;
+  }
 }

  Modified: lib/mrn_path_mapper.hpp (+2 -0)
===================================================================
--- lib/mrn_path_mapper.hpp    2012-03-19 18:34:32 +0900 (2a492de)
+++ lib/mrn_path_mapper.hpp    2012-03-19 18:34:58 +0900 (f821df5)
@@ -31,11 +31,13 @@ namespace mrn {
     const char* db_path();
     const char* db_name();
     const char* table_name();
+    const char* mysql_table_name();
   private:
     const char* mysql_path_;
     char db_path_[MRN_MAX_PATH_SIZE];
     char db_name_[MRN_MAX_PATH_SIZE];
     char table_name_[MRN_MAX_PATH_SIZE];
+    char mysql_table_name_[MRN_MAX_PATH_SIZE];
   };
 }
 

  Modified: test/unit/test_mrn_path_mapper.cpp (+17 -0)
===================================================================
--- test/unit/test_mrn_path_mapper.cpp    2012-03-19 18:34:32 +0900 (007f988)
+++ test/unit/test_mrn_path_mapper.cpp    2012-03-19 18:34:58 +0900 (7287602)
@@ -75,5 +75,22 @@ namespace test_mrn_path_mapper {
       cppcut_assert_equal("@005ftable", mapper.table_name());
     }
   }
+
+  namespace mysql_table_name {
+    void test_normal_table() {
+      mrn::PathMapper mapper("./db/table");
+      cppcut_assert_equal("table", mapper.mysql_table_name());
+    }
+
+    void test_temporary_table() {
+      mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0");
+      cppcut_assert_equal("#sql27c5_1_0", mapper.mysql_table_name());
+    }
+
+    void test_underscore_start_table() {
+      mrn::PathMapper mapper("./db/_table");
+      cppcut_assert_equal("_table", mapper.mysql_table_name());
+    }
+  }
 }
 




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