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));
- }
}