null+****@clear*****
null+****@clear*****
2012年 3月 19日 (月) 17:46:05 JST
Kouhei Sutou 2012-03-19 17:46:05 +0900 (Mon, 19 Mar 2012) New Revision: 5da5fb9a3bb419721367ece3f677fb4ab7c38a21 Log: experimental: create PathMapper * mrn_db_path_gen() -> PathMapper.db_path() * mrn_db_name_gen() -> PathMapper.db_name() Added files: lib/Makefile.am lib/mrn_path_mapper.cpp lib/mrn_path_mapper.hpp test/unit/test_mrn_path_mapper.cpp Modified files: Makefile.am configure.ac test/unit/Makefile.am Modified: Makefile.am (+2 -1) =================================================================== --- Makefile.am 2012-03-19 16:13:20 +0900 (c294263) +++ Makefile.am 2012-03-19 17:46:05 +0900 (51eacf7) @@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = 1.9.7 LOCALES = ja -AM_CPPFLAGS = $(MYSQL_INC) $(GROONGA_CFLAGS) $(MYSQL_VERSION_CFLAGS) +AM_CPPFLAGS = $(MYSQL_INC) $(GROONGA_CFLAGS) $(MYSQL_VERSION_CFLAGS) -I$(top_srcdir)/lib ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS noinst_HEADERS = \ @@ -41,6 +41,7 @@ libmroonga_a_CFLAGS = $(AM_CFLAGS) $(MYSQL_CFLAGS) libmroonga_a_SOURCES = $(sources) SUBDIRS = \ + lib \ test \ doc \ tools \ Modified: configure.ac (+1 -0) =================================================================== --- configure.ac 2012-03-19 16:13:20 +0900 (5dad7a9) +++ configure.ac 2012-03-19 17:46:05 +0900 (6098e02) @@ -297,6 +297,7 @@ CXXFLAGS="$CXXFLAGS -Werror -fno-implicit-templates -fno-exceptions -fno-rtti -f AC_CONFIG_FILES([ Makefile + lib/Makefile test/Makefile test/unit/Makefile test/sql/Makefile Added: lib/Makefile.am (+12 -0) 100644 =================================================================== --- /dev/null +++ lib/Makefile.am 2012-03-19 17:46:05 +0900 (b5f5428) @@ -0,0 +1,12 @@ +AM_CPPFLAGS = \ + $(MYSQL_INC) \ + $(GROONGA_CFLAGS) \ + $(MYSQL_VERSION_CFLAGS) \ + -I$(top_srcdir) + +noinst_LTLIBRARIES = \ + libmroonga.la + +libmroonga_la_SOURCES = \ + mrn_path_mapper.cpp \ + mrn_path_mapper.hpp Added: lib/mrn_path_mapper.cpp (+75 -0) 100644 =================================================================== --- /dev/null +++ lib/mrn_path_mapper.cpp 2012-03-19 17:46:05 +0900 (2e2eb2b) @@ -0,0 +1,75 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2010 Tetsuro IKEDA + Copyright(C) 2011-2012 Kentoku SHIBA + Copyright(C) 2011 Kouhei Sutou <kou****@clear*****> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "mrn_path_mapper.hpp" + +#include <string.h> + +namespace mrn { + PathMapper::PathMapper(const char *mysql_path) + : mysql_path_(mysql_path) { + } + + /** + * "./${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" + */ + const char *PathMapper::db_path() { + if (strncmp(mysql_path_, "./", 2) == 0) { + int i = 2, j = 0, len; + len = strlen(mysql_path_); + while (mysql_path_[i] != '/' && i < len) { + db_path_[j++] = mysql_path_[i++]; + } + db_path_[j] = '\0'; + } else { + strcpy(db_path_, mysql_path_); + } + strcat(db_path_, MRN_DB_FILE_SUFFIX); + return db_path_; + } + + /** + * "./${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" + */ + const char *PathMapper::db_name() { + if (strncmp(mysql_path_, "./", 2) == 0) { + int i = 2, j = 0, len; + len = strlen(mysql_path_); + while (mysql_path_[i] != '/' && i < len) { + db_name_[j++] = mysql_path_[i++]; + } + db_name_[j] = '\0'; + } else { + strcpy(db_name_, mysql_path_); + } + return db_name_; + } +} Added: lib/mrn_path_mapper.hpp (+40 -0) 100644 =================================================================== --- /dev/null +++ lib/mrn_path_mapper.hpp 2012-03-19 17:46:05 +0900 (d24a3af) @@ -0,0 +1,40 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2010 Tetsuro IKEDA + Copyright(C) 2010-2012 Kentoku SHIBA + Copyright(C) 2011-2012 Kouhei Sutou <kou****@clear*****> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#ifndef MRN_PATH_MAPPER_HPP_ +#define MRN_PATH_MAPPER_HPP_ + +#include "mrn_sys.h" + +namespace mrn { + class PathMapper { + public: + PathMapper(const char* mysql_path); + const char* db_path(); + const char* db_name(); + private: + const char* mysql_path_; + char db_path_[MRN_MAX_PATH_SIZE]; + char db_name_[MRN_MAX_PATH_SIZE]; + }; +} + +#endif /* MRN_PATH_MAPPER_HPP_ */ Modified: test/unit/Makefile.am (+13 -4) =================================================================== --- test/unit/Makefile.am 2012-03-19 16:13:20 +0900 (fbb7ec0) +++ test/unit/Makefile.am 2012-03-19 17:46:05 +0900 (1214cf1) @@ -1,11 +1,14 @@ if WITH_CUTTER -noinst_LTLIBRARIES = test_mrn_sys.la +noinst_LTLIBRARIES = \ + test_mrn_sys.la \ + test_mrn_path_mapper.la endif AM_CPPFLAGS = \ $(GROONGA_CFLAGS) \ - $(CPPCUTTER_CFLAGS) -AM_INCLUDES = -I$(top_srcdir) + $(CPPCUTTER_CFLAGS) \ + -I$(top_srcdir) \ + -I$(top_srcdir)/lib ACLOCAL_AMFLAGS = $$ACLOCAL_ARGS DEFS = @DEFS@ @@ -17,7 +20,7 @@ LDFLAGS = \ -no-undefined LIBS = \ - $(CUTTER_LIBS) \ + $(CPPCUTTER_LIBS) \ $(GROONGA_LIBS) \ $(MECAB_LIBS) @@ -26,3 +29,9 @@ EXTERNAL_SRC = ../../mrn_sys.c test_mrn_sys_la_SOURCES = \ $(EXTERNAL_SRC) \ test_mrn_sys.cpp + +test_mrn_path_mapper_la_SOURCES = \ + test_mrn_path_mapper.cpp + +test_mrn_path_mapper_la_LIBADD = \ + $(top_builddir)/lib/libmroonga.la Added: test/unit/test_mrn_path_mapper.cpp (+62 -0) 100644 =================================================================== --- /dev/null +++ test/unit/test_mrn_path_mapper.cpp 2012-03-19 17:46:05 +0900 (91ed87a) @@ -0,0 +1,62 @@ +/* -*- c-basic-offset: 2 -*- */ +/* + Copyright(C) 2012 Kouhei Sutou <kou****@clear*****> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include <string.h> +#include <cppcutter.h> + +#include <mrn_path_mapper.hpp> + +namespace test_mrn_path_mapper { + namespace db_path { + void test_normal_db() { + mrn::PathMapper mapper("./db/"); + cppcut_assert_equal("db.mrn", mapper.db_path()); + } + + void test_normal_table() { + mrn::PathMapper mapper("./db/table"); + cppcut_assert_equal("db.mrn", mapper.db_path()); + } + + void test_temporary_table() { + mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0"); + cppcut_assert_equal("/tmp/mysqld.1/#sql27c5_1_0.mrn", + mapper.db_path()); + } + } + + namespace db_name { + void test_normal_db() { + mrn::PathMapper mapper("./db/"); + cppcut_assert_equal("db", mapper.db_name()); + } + + void test_normal_table() { + mrn::PathMapper mapper("./db/table"); + cppcut_assert_equal("db", mapper.db_name()); + } + + void test_temporary_table() { + mrn::PathMapper mapper("/tmp/mysqld.1/#sql27c5_1_0"); + cppcut_assert_equal("/tmp/mysqld.1/#sql27c5_1_0", + mapper.db_name()); + } + } +} +