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