null+****@clear*****
null+****@clear*****
2012年 3月 19日 (月) 18:08:55 JST
Kouhei Sutou 2012-03-19 18:08:55 +0900 (Mon, 19 Mar 2012)
New Revision: e6e0279c7b7a2334a93dcdd0f494cbf26af0c71c
Log:
Use mrn::PathMapper
Remove mrn_db_path_gen() and mrn_db_name_gen().
Modified files:
Makefile.am
ha_mroonga.cc
mrn_sys.c
mrn_sys.h
test/unit/test_mrn_sys.cpp
Modified: Makefile.am (+6 -0)
===================================================================
--- Makefile.am 2012-03-19 17:48:03 +0900 (51eacf7)
+++ Makefile.am 2012-03-19 18:08:55 +0900 (8d2ee41)
@@ -19,6 +19,9 @@ sources = \
mrn_sys.c \
mrn_table.cc
+libraries = \
+ $(top_builddir)/lib/libmroonga.la
+
dynamic_plugin_ldflags = -module $(GROONGA_LIBS)
dynamic_plugin_cxxflags = $(AM_CXXFLAGS) $(MYSQL_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
dynamic_plugin_cflags = $(AM_CFLAGS) $(MYSQL_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
@@ -28,17 +31,20 @@ ha_mroonga_la_LDFLAGS = $(dynamic_plugin_ldflags)
ha_mroonga_la_CXXFLAGS = $(dynamic_plugin_cxxflags)
ha_mroonga_la_CFLAGS = $(dynamic_plugin_cflags)
ha_mroonga_la_SOURCES = $(sources)
+ha_mroonga_la_LIBADD = $(libraries)
plugin_LTLIBRARIES += ha_groonga.la
ha_groonga_la_LDFLAGS = $(dynamic_plugin_ldflags)
ha_groonga_la_CXXFLAGS = $(dynamic_plugin_cxxflags) -DMRN_USE_DEPRECATED_NAME
ha_groonga_la_CFLAGS = $(dynamic_plugin_cflags) -DMRN_USE_DEPRECATED_NAME
ha_groonga_la_SOURCES = $(sources)
+ha_groonga_la_LIBADD = $(libraries)
plugin_LIBRARIES = libmroonga.a
libmroonga_a_CXXFLAGS = $(AM_CXXFLAGS) $(MYSQL_CFLAGS)
libmroonga_a_CFLAGS = $(AM_CFLAGS) $(MYSQL_CFLAGS)
libmroonga_a_SOURCES = $(sources)
+libmroonga_a_LIBADD = $(libraries)
SUBDIRS = \
lib \
Modified: ha_mroonga.cc (+33 -45)
===================================================================
--- ha_mroonga.cc 2012-03-19 17:48:03 +0900 (918774e)
+++ ha_mroonga.cc 2012-03-19 18:08:55 +0900 (bf8c939)
@@ -43,6 +43,7 @@
#include "mrn_err.h"
#include "mrn_table.h"
#include "ha_mroonga.h"
+#include <mrn_path_mapper.hpp>
#define MRN_MESSAGE_BUFFER_SIZE 1024
@@ -919,24 +920,22 @@ static handler *mrn_handler_create(handlerton *hton, TABLE_SHARE *share, MEM_ROO
static void mrn_drop_db(handlerton *hton, char *path)
{
MRN_DBUG_ENTER_FUNCTION();
- char db_path[MRN_MAX_PATH_SIZE];
- char db_name[MRN_MAX_PATH_SIZE];
- mrn_db_path_gen(path, db_path);
- mrn_db_name_gen(path, db_name);
+ mrn::PathMapper mapper(path);
pthread_mutex_lock(&mrn_db_mutex);
grn_obj *db = NULL;
- if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) {
+ if (mrn_hash_get(&mrn_ctx, mrn_hash, mapper.db_name(), &db) != 0) {
struct stat dummy;
- if (stat(db_path, &dummy) == 0) {
- db = grn_db_open(&mrn_ctx, db_path);
+ if (stat(mapper.db_path(), &dummy) == 0) {
+ db = grn_db_open(&mrn_ctx, mapper.db_path());
}
}
if (db) {
if (grn_obj_remove(&mrn_ctx, db)) {
- GRN_LOG(&mrn_ctx, GRN_LOG_ERROR, "cannot drop database (%s)", db_path);
+ GRN_LOG(&mrn_ctx, GRN_LOG_ERROR,
+ "cannot drop database (%s)", mapper.db_path());
}
}
- mrn_hash_remove(&mrn_ctx, mrn_hash, db_name);
+ mrn_hash_remove(&mrn_ctx, mrn_hash, mapper.db_name());
pthread_mutex_unlock(&mrn_db_mutex);
DBUG_VOID_RETURN;
}
@@ -2807,23 +2806,20 @@ int ha_mroonga::ensure_database_create(const char *name)
MRN_DBUG_ENTER_METHOD();
/* before creating table, we must check if database is alreadly opened, created */
grn_obj *db;
- char db_name[MRN_MAX_PATH_SIZE];
- char db_path[MRN_MAX_PATH_SIZE];
struct stat db_stat;
error = mrn_change_encoding(ctx, system_charset_info);
if (error)
DBUG_RETURN(error);
- mrn_db_name_gen(name, db_name);
- mrn_db_path_gen(name, db_path);
-
+ mrn::PathMapper mapper(name);
pthread_mutex_lock(&mrn_db_mutex);
- if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) {
- if (stat(db_path, &db_stat)) {
+ if (mrn_hash_get(&mrn_ctx, mrn_hash, mapper.db_name(), &db) != 0) {
+ if (stat(mapper.db_path(), &db_stat)) {
// creating new database
- GRN_LOG(ctx, GRN_LOG_INFO, "database not found. creating...(%s)", db_path);
- db = grn_db_create(&mrn_ctx, db_path, NULL);
+ GRN_LOG(ctx, GRN_LOG_INFO,
+ "database not found. creating...(%s)", mapper.db_path());
+ db = grn_db_create(&mrn_ctx, mapper.db_path(), NULL);
if (mrn_ctx.rc) {
pthread_mutex_unlock(&mrn_db_mutex);
error = ER_CANT_CREATE_TABLE;
@@ -2832,7 +2828,7 @@ int ha_mroonga::ensure_database_create(const char *name)
}
} else {
// opening existing database
- db = grn_db_open(&mrn_ctx, db_path);
+ db = grn_db_open(&mrn_ctx, mapper.db_path());
if (mrn_ctx.rc) {
pthread_mutex_unlock(&mrn_db_mutex);
error = ER_CANT_OPEN_FILE;
@@ -2840,7 +2836,7 @@ int ha_mroonga::ensure_database_create(const char *name)
DBUG_RETURN(error);
}
}
- mrn_hash_put(&mrn_ctx, mrn_hash, db_name, db);
+ mrn_hash_put(&mrn_ctx, mrn_hash, mapper.db_name(), db);
}
pthread_mutex_unlock(&mrn_db_mutex);
grn_ctx_use(ctx, db);
@@ -2854,26 +2850,22 @@ int ha_mroonga::ensure_database_open(const char *name)
MRN_DBUG_ENTER_METHOD();
grn_obj *db;
- char db_name[MRN_MAX_PATH_SIZE];
- char db_path[MRN_MAX_PATH_SIZE];
error = mrn_change_encoding(ctx, system_charset_info);
if (error)
DBUG_RETURN(error);
- mrn_db_name_gen(name, db_name);
- mrn_db_path_gen(name, db_path);
-
+ mrn::PathMapper mapper(name);
pthread_mutex_lock(&mrn_db_mutex);
- if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) {
- db = grn_db_open(&mrn_ctx, db_path);
+ if (mrn_hash_get(&mrn_ctx, mrn_hash, mapper.db_name(), &db) != 0) {
+ db = grn_db_open(&mrn_ctx, mapper.db_path());
if (ctx->rc) {
pthread_mutex_unlock(&mrn_db_mutex);
error = ER_CANT_OPEN_FILE;
my_message(error, ctx->errbuf, MYF(0));
DBUG_RETURN(error);
}
- mrn_hash_put(&mrn_ctx, mrn_hash, db_name, db);
+ mrn_hash_put(&mrn_ctx, mrn_hash, mapper.db_name(), db);
}
pthread_mutex_unlock(&mrn_db_mutex);
grn_ctx_use(ctx, db);
@@ -3457,23 +3449,22 @@ int ha_mroonga::close()
}
if (is_temporary_table_name(share->table_name)) {
- char db_name[MRN_MAX_PATH_SIZE];
char table_name[MRN_MAX_PATH_SIZE];
char mysql_table_name[MRN_MAX_PATH_SIZE];
TABLE_LIST table_list;
TABLE_SHARE *tmp_table_share;
int tmp_error;
/* no need to decode */
- mrn_db_name_gen(share->table_name, db_name);
+ mrn::PathMapper mapper(share->table_name);
mrn_table_name_gen(share->table_name, table_name);
mrn_table_name_gen_for_mysql(share->table_name, mysql_table_name);
#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
- table_list.init_one_table(db_name, strlen(db_name),
+ table_list.init_one_table(mapper.db_name(), strlen(mapper.db_name()),
mysql_table_name, strlen(mysql_table_name),
mysql_table_name,
TL_WRITE);
#else
- table_list.init_one_table(db_name, mysql_table_name, TL_WRITE);
+ table_list.init_one_table(mapper.db_name(), mysql_table_name, TL_WRITE);
#endif
mrn_open_mutex_lock();
tmp_table_share =
@@ -3618,7 +3609,6 @@ int ha_mroonga::delete_table(const char *name)
{
int error = 0;
THD *thd = ha_thd();
- char db_name[MRN_MAX_PATH_SIZE];
char table_name[MRN_MAX_PATH_SIZE];
char mysql_table_name[MRN_MAX_PATH_SIZE];
TABLE_LIST table_list;
@@ -3627,7 +3617,6 @@ int ha_mroonga::delete_table(const char *name)
MRN_SHARE *tmp_share;
st_mrn_alter_share *alter_share, *tmp_alter_share;
MRN_DBUG_ENTER_METHOD();
- mrn_db_name_gen(name, db_name);
mrn_table_name_gen(name, table_name);
mrn_table_name_gen_for_mysql(name, mysql_table_name);
st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, FALSE);
@@ -3654,13 +3643,14 @@ int ha_mroonga::delete_table(const char *name)
}
if (!tmp_table_share)
{
+ mrn::PathMapper mapper(name);
#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
- table_list.init_one_table(db_name, strlen(db_name),
+ table_list.init_one_table(mapper.db_name(), strlen(mapper.db_name()),
mysql_table_name, strlen(mysql_table_name),
mysql_table_name,
TL_WRITE);
#else
- table_list.init_one_table(db_name, mysql_table_name, TL_WRITE);
+ table_list.init_one_table(mapper.db_name(), mysql_table_name, TL_WRITE);
#endif
mrn_open_mutex_lock();
tmp_table_share = mrn_create_tmp_table_share(&table_list, name, &error);
@@ -10125,8 +10115,6 @@ int ha_mroonga::storage_rename_table(const char *from, const char *to,
int ha_mroonga::rename_table(const char *from, const char *to)
{
int error = 0;
- char from_db_name[MRN_MAX_PATH_SIZE];
- char to_db_name[MRN_MAX_PATH_SIZE];
char from_table_name[MRN_MAX_PATH_SIZE];
char to_table_name[MRN_MAX_PATH_SIZE];
char from_mysql_table_name[MRN_MAX_PATH_SIZE];
@@ -10135,21 +10123,23 @@ int ha_mroonga::rename_table(const char *from, const char *to)
TABLE tmp_table;
MRN_SHARE *tmp_share;
MRN_DBUG_ENTER_METHOD();
- mrn_db_name_gen(to, to_db_name);
+ mrn::PathMapper to_mapper(to);
+ mrn::PathMapper from_mapper(from);
mrn_table_name_gen(to, to_table_name);
- mrn_db_name_gen(from, from_db_name);
mrn_table_name_gen(from, from_table_name);
mrn_table_name_gen_for_mysql(from, from_mysql_table_name);
- if (strcmp(from_db_name, to_db_name))
+ if (strcmp(from_mapper.db_name(), to_mapper.db_name()))
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
#ifdef MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
- table_list.init_one_table(from_db_name, strlen(from_db_name),
+ table_list.init_one_table(from_mapper.db_name(),
+ strlen(from_mapper.db_name()),
from_mysql_table_name,
strlen(from_mysql_table_name),
from_mysql_table_name, TL_WRITE);
#else
- table_list.init_one_table(from_db_name, from_mysql_table_name, TL_WRITE);
+ table_list.init_one_table(from_mapper.db_name(), from_mysql_table_name,
+ TL_WRITE);
#endif
mrn_open_mutex_lock();
tmp_table_share = mrn_create_tmp_table_share(&table_list, from, &error);
@@ -10358,10 +10348,8 @@ int ha_mroonga::wrapper_recreate_indexes(THD *thd)
KEY *p_key_info = &table->key_info[table_share->primary_key];
KEY *tmp_key_info;
KEY *key_info = table->key_info;
- char db_name[MRN_MAX_PATH_SIZE];
char table_name[MRN_MAX_PATH_SIZE];
MRN_DBUG_ENTER_METHOD();
- mrn_db_name_gen(table_share->normalized_path.str, db_name);
mrn_table_name_gen(table_share->normalized_path.str, table_name);
bitmap_clear_all(table->read_set);
clear_indexes();
Modified: mrn_sys.c (+0 -43)
===================================================================
--- mrn_sys.c 2012-03-19 17:48:03 +0900 (3f19dae)
+++ mrn_sys.c 2012-03-19 18:08:55 +0900 (b90cfc6)
@@ -84,49 +84,6 @@ int mrn_hash_remove(grn_ctx *ctx, grn_hash *hash, const char *key)
}
/**
- * "./${db}/${table}" ==> "${db}.mrn"
- * "./${db}/" ==> "${db}.mrn"
- * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0" ==>
- * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0.mrn"
- */
-char *mrn_db_path_gen(const char *db_path_in_mysql, char *dest)
-{
- if (strncmp(db_path_in_mysql, "./", 2) == 0) {
- int i = 2, j = 0, len;
- len = strlen(db_path_in_mysql);
- while (db_path_in_mysql[i] != '/' && i < len) {
- dest[j++] = db_path_in_mysql[i++];
- }
- dest[j] = '\0';
- } else {
- strcpy(dest, db_path_in_mysql);
- }
- strcat(dest, MRN_DB_FILE_SUFFIX);
- return dest;
-}
-
-/**
- * "./${db}/${table}" ==> "${db}"
- * "./${db}/" ==> "${db}"
- * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0" ==>
- * "/tmp/mysql-test/var/tmp/mysqld.1/#sql27c5_1_0"
- */
-char *mrn_db_name_gen(const char *db_path_in_mysql, char *dest)
-{
- if (strncmp(db_path_in_mysql, "./", 2) == 0) {
- int i = 2, j = 0, len;
- len = strlen(db_path_in_mysql);
- while (db_path_in_mysql[i] != '/' && i < len) {
- dest[j++] = db_path_in_mysql[i++];
- }
- dest[j] = '\0';
- } else {
- strcpy(dest, db_path_in_mysql);
- }
- return dest;
-}
-
-/**
* "./${db}/${table}" ==> "${table}" (with encoding first '_')
*/
char *mrn_table_name_gen(const char *arg, char *dest)
Modified: mrn_sys.h (+0 -2)
===================================================================
--- mrn_sys.h 2012-03-19 17:48:03 +0900 (6346eef)
+++ mrn_sys.h 2012-03-19 18:08:55 +0900 (45e74f3)
@@ -52,8 +52,6 @@ int mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj *value);
int mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj **value);
int mrn_hash_remove(grn_ctx *ctx, grn_hash *hash, const char *key);
-char *mrn_db_path_gen(const char *arg, char *dest);
-char *mrn_db_name_gen(const char *arg, char *dest);
char *mrn_table_name_gen(const char *arg, char *dest);
char *mrn_table_name_gen_for_mysql(const char *arg, char *dest);
char *mrn_index_table_name_gen(const char *arg, const char *idx_name, char *dest);
Modified: test/unit/test_mrn_sys.cpp (+0 -36)
===================================================================
--- test/unit/test_mrn_sys.cpp 2012-03-19 17:48:03 +0900 (f6b4983)
+++ test/unit/test_mrn_sys.cpp 2012-03-19 18:08:55 +0900 (94e52d8)
@@ -93,42 +93,6 @@ namespace test_mrn_sys
cut_assert_equal_int(-1, mrn_hash_remove(ctx, hash, key));
}
- void test_mrn_db_path_gen()
- {
- char buf[64];
- const char *arg1 = "./hoge/fuga";
- const char *arg2 = "./foobar/mysql";
- const char *arg3 = "./d/b";
- cut_assert_equal_string("hoge.mrn", mrn_db_path_gen(arg1, buf));
- cut_assert_equal_string("foobar.mrn", mrn_db_path_gen(arg2, buf));
- cut_assert_equal_string("d.mrn", mrn_db_path_gen(arg3, buf));
-
- const char *arg4 = "./hoge/";
- const char *arg5 = "./foobar/";
- const char *arg6 = "./d/";
- cut_assert_equal_string("hoge.mrn", mrn_db_path_gen(arg4, buf));
- cut_assert_equal_string("foobar.mrn", mrn_db_path_gen(arg5, buf));
- cut_assert_equal_string("d.mrn", mrn_db_path_gen(arg6, buf));
- }
-
- void test_mrn_db_name_gen()
- {
- char buf[64];
- const char *arg1 = "./hoge/fuga";
- const char *arg2 = "./foobar/mysql";
- const char *arg3 = "./d/b";
- cut_assert_equal_string("hoge", mrn_db_name_gen(arg1, buf));
- cut_assert_equal_string("foobar", mrn_db_name_gen(arg2, buf));
- cut_assert_equal_string("d", mrn_db_name_gen(arg3, buf));
-
- const char *arg4 = "./hoge/";
- const char *arg5 = "./foobar/";
- const char *arg6 = "./d/";
- cut_assert_equal_string("hoge", mrn_db_name_gen(arg4, buf));
- cut_assert_equal_string("foobar", mrn_db_name_gen(arg5, buf));
- cut_assert_equal_string("d", mrn_db_name_gen(arg6, buf));
- }
-
void test_mrn_table_name_gen()
{
char buf[64];