1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Update Mroonga to the latest version on 2015-07-02T04:12:21+0900

This commit is contained in:
Kentoku SHIBA
2015-07-02 04:12:21 +09:00
parent 0319304893
commit 06913d0162
329 changed files with 11220 additions and 2156 deletions

View File

@@ -39,11 +39,6 @@ if(BIG_ENDIAN)
endif()
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
message(STATUS "Mroonga is not supported on Solaris")
return()
endif()
if(MSVC)
if(MSVC_VERSION LESS 1800)
set(MRN_OLD_MSVC_MESSAGE "Mroonga supports only MSVC 2013 or later")
@@ -115,6 +110,8 @@ if(MRN_GROONGA_BUNDLED)
add_subdirectory("${MRN_BUNDLED_GROONGA_RELATIVE_DIR}")
else()
set(MRN_GROONGA_EMBED OFF)
file(READ ${MRN_SOURCE_DIR}/required_groonga_version REQUIRED_GROONGA_VERSION)
string(STRIP "${REQUIRED_GROONGA_VERSION}" REQUIRED_GROONGA_VERSION)
@@ -323,8 +320,7 @@ set(MRN_ALL_SOURCES
if(MRN_BUNDLED)
mysql_add_plugin(mroonga
${MRN_ALL_SOURCES}
STORAGE_ENGINE MODULE_ONLY DISABLED # see MDEV-7246
RECOMPILE_FOR_EMBEDDED
STORAGE_ENGINE MODULE_ONLY
LINK_LIBRARIES ${MRN_LIBRARIES})
else()
add_library(mroonga MODULE ${MRN_ALL_SOURCES})
@@ -334,28 +330,33 @@ else()
option(WITH_DEBUG "Enable debug options" OFF)
if(WITH_DEBUG)
add_definitions("-DSAFE_MUTEX")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "SAFE_MUTEX")
if(CMAKE_COMPILER_IS_GNUCXX)
set(MRN_C_COMPILE_FLAGS "${MRN_C_COMPILE_FLAGS} -g3 -O0")
set(MRN_CXX_COMPILE_FLAGS "${MRN_CXX_COMPILE_FLAGS} -g3 -O0")
endif()
else()
add_definitions("-DDBUG_OFF")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "DBUG_OFF")
endif()
option(WITH_DEBUG_FULL "Enable full debug options" OFF)
if(WITH_DEBUG_FULL)
add_definitions("-DSAFE_MUTEX" "SAFEMALLOC")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "SAFE_MUTEX" "SAFEMALLOC")
endif()
option(DISABLE_FAST_MUTEXES "Force disabling fast mutex" OFF)
if(DISABLE_FAST_MUTEXES)
add_definitions("-DFORCE_FAST_MUTEX_DISABLED=1")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "FORCE_FAST_MUTEX_DISABLED=1")
endif()
option(WITH_FAST_MUTEXES "Enable fast mutex" OFF)
if(WITH_FAST_MUTEXES)
add_definitions("-DMY_PTHREAD_FASTMUTEX")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MY_PTHREAD_FASTMUTEX")
endif()
if(CMAKE_COMPILER_IS_GNUCXX)
@@ -381,7 +382,8 @@ else()
COMPILE_FLAGS "${MRN_CXX_COMPILE_FLAGS}")
set_source_files_properties(${LIBMRN_NO_MYSQL_SOURCES} PROPERTIES
COMPILE_FLAGS "${MRN_CXX_COMPILE_FLAGS}")
add_definitions("-DMYSQL_DYNAMIC_PLUGIN")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MYSQL_DYNAMIC_PLUGIN")
set_target_properties(mroonga PROPERTIES
PREFIX ""
OUTPUT_NAME "ha_mroonga")
@@ -390,16 +392,33 @@ else()
endif()
if(GROONGA_NORMALIZER_MYSQL_FOUND)
add_definitions("-DWITH_GROONGA_NORMALIZER_MYSQL=1")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "WITH_GROONGA_NORMALIZER_MYSQL=1")
if(MRN_GROONGA_NORMALIZER_MYSQL_EMBED)
add_definitions("-DMRN_GROONGA_NORMALIZER_MYSQL_EMBED")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MRN_GROONGA_NORMALIZER_MYSQL_EMBEDDED")
else()
add_definitions("-DGROONGA_NORMALIZER_MYSQL_PLUGIN_NAME=\"normalizers/mysql\"")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME=\"normalizers/mysql\"")
endif()
endif()
set(MRN_DEFAULT_PARSER "TokenBigram" CACHE STRING "The default fulltext parser")
add_definitions("-DMRN_PARSER_DEFAULT=\"${MRN_DEFAULT_PARSER}\"")
if(MRN_GROONGA_EMBED)
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MRN_GROONGA_EMBEDDED")
endif()
set(MRN_DEFAULT_PARSER "" CACHE STRING
"The default fulltext parser (Deprecated. Use MRN_DEFAULT_TOKENIZER instead.)")
set(MRN_DEFAULT_TOKENIZER "" CACHE STRING
"The default tokenizer for fulltext index")
if(NOT ${MRN_DEFAULT_TOKENIZER} STREQUAL "")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MRN_DEFAULT_TOKENIZER=\"${MRN_DEFAULT_TOKENIZER}\"")
elseif(NOT ${MRN_DEFAULT_PARSER} STREQUAL "")
set_property(TARGET mroonga APPEND PROPERTY
COMPILE_DEFINITIONS "MRN_DEFAULT_TOKENIZER=\"${MRN_DEFAULT_PARSER}\"")
endif()
configure_file(
"${PROJECT_SOURCE_DIR}/mrn_version.h.in"

View File

@@ -3,16 +3,16 @@ clone_depth: 10
install:
- cd ..
- choco install -y curl 7zip.commandline
- curl -O http://mirror.jmu.edu/pub/mariadb/mariadb-10.0.17/source/mariadb-10.0.17.tar.gz
- 7z x mariadb-10.0.17.tar.gz
- 7z x mariadb-10.0.17.tar > nul
- cd mariadb-10.0.17
- curl -O http://mirror.jmu.edu/pub/mariadb/mariadb-10.0.20/source/mariadb-10.0.20.tar.gz
- 7z x mariadb-10.0.20.tar.gz
- 7z x mariadb-10.0.20.tar > nul
- cd mariadb-10.0.20
- rmdir /S /Q storage\mroonga\
- move ..\mroonga storage\mroonga
- git clone --quiet --depth 1 https://github.com/groonga/groonga.git ..\groonga
- cd ..\groonga
- git submodule update --init
- cd ..\mariadb-10.0.17
- cd ..\mariadb-10.0.20
- rmdir /S /Q ..\groonga\test\
- mkdir storage\mroonga\vendor
- move ..\groonga storage\mroonga\vendor\groonga

View File

@@ -1,6 +1,8 @@
include $(top_srcdir)/doc/files.am
include $(top_srcdir)/build/makefiles/sphinx-build.am
CLEANFILES =
EXTRA_DIST += \
$(po_files)
@@ -11,9 +13,11 @@ endif
if DOCUMENT_BUILDABLE
BUILT_SOURCES += \
mo-build-stamp
CLEANFILES += \
pot-build-stamp \
edit-po-build-stamp \
$(mo_files)
mo-build-stamp
endif
SUFFIXES += .pot .po .mo .edit
@@ -47,8 +51,8 @@ SUFFIXES += .pot .po .mo .edit
msgfmt -o $@ $<
if DOCUMENT_BUILDABLE
update: pot-build-stamp edit-po-build-stamp
build: update $(mo_files)
update: edit-po-build-stamp
build: mo-build-stamp
else
update:
build:
@@ -68,6 +72,15 @@ pot-build-stamp: $(absolute_source_files)
$(MAKE) gettext
@touch $@
edit-po-build-stamp: $(absolute_source_files)
edit-po-build-stamp: pot-build-stamp
$(MAKE) $(edit_po_files)
@touch $@
mo_build_stamp_dependencies = edit-po-build-stamp
if DOCUMENT_BUILDABLE
mo_build_stamp_dependencies += $(edit_po_files)
endif
mo-build-stamp: $(mo_build_stamp_dependencies)
$(MAKE) $(mo_files)
@touch $@

View File

@@ -106,7 +106,7 @@ help:
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
man: man-build-stamp
html: html-build-stamp
html: html-recursive html-build-stamp
dirhtml: dirhtml-build-stamp
pickle: pickle-build-stamp
json: json-build-stamp

View File

@@ -309,20 +309,30 @@ CONFIG_OPTION_GROONGA_NORMALIZER_MYSQL
AC_ARG_WITH(default_parser,
[AS_HELP_STRING([--with-default-parser=PARSER],
[specify the default fulltext parser like
[Deprecated. Use --with-default-tokenizer=TOKENIZER instead.
specify the default fulltext parser like
--with-default-parser=TokenMecab.
(default: TokenBigram)])],
[default_parser=$withval],
[default_parser=no])
if test x"$default_parser" != x"no"; then
AC_DEFINE_UNQUOTED(MRN_PARSER_DEFAULT,
AC_DEFINE_UNQUOTED(MRN_TOKENIZER_DEFAULT,
"$default_parser",
"specified default fulltext parser")
MRN_DEFAULT_PARSER=$default_parser
else
MRN_DEFAULT_PARSER=TokenBigram
"specified the default tokenizer for fulltext index")
fi
AC_ARG_WITH(default_tokenizer,
[AS_HELP_STRING([--with-default-tokenizer=TOKENIZER],
[specify the default tokenizer for fulltext index like
--with-default-tokenizer=TokenMecab.
(default: TokenBigram)])],
[default_tokenizer=$withval],
[default_tokenizer=no])
if test x"$default_tokenizer" != x"no"; then
AC_DEFINE_UNQUOTED(MRN_DEFAULT_TOKENIZER,
"$default_tokenizer",
"specified the default tokenizer for fulltext index")
fi
AC_SUBST(MRN_DEFAULT_PARSER)
AC_ARG_ENABLE(fast_mutexes,
[AS_HELP_STRING([--disable-fast-mutexes],

File diff suppressed because it is too large Load Diff

View File

@@ -33,18 +33,11 @@ extern "C" {
#include <groonga.h>
#include "mrn_mysql_compat.h"
#if (MYSQL_VERSION_ID >= 50603) || \
(MYSQL_VERSION_ID >= 50513 && MYSQL_VERSION_ID < 50600) || \
(MYSQL_VERSION_ID >= 50158 && MYSQL_VERSION_ID < 50500)
# define MRN_HANDLER_CLONE_NEED_NAME 1
#endif
#if (MYSQL_VERSION_ID >= 50514 && MYSQL_VERSION_ID < 50600)
# define MRN_HANDLER_HAVE_FINAL_ADD_INDEX 1
#endif
#if (MYSQL_VERSION_ID >= 50603) || \
(defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50209)
#if (MYSQL_VERSION_ID >= 50603) || defined(MRN_MARIADB_P)
# define MRN_HANDLER_HAVE_HA_RND_NEXT 1
# define MRN_HANDLER_HAVE_HA_RND_POS 1
# define MRN_HANDLER_HAVE_HA_INDEX_READ_MAP 1
@@ -56,8 +49,7 @@ extern "C" {
# define MRN_HANDLER_HAVE_HA_INDEX_NEXT_SAME 1
#endif
#if (MYSQL_VERSION_ID >= 50604) || \
(defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50302)
#if (MYSQL_VERSION_ID >= 50604) || defined(MRN_MARIADB_P)
# define MRN_HANDLER_HAVE_HA_CLOSE 1
# define MRN_HANDLER_HAVE_MULTI_RANGE_READ 1
#endif
@@ -77,15 +69,10 @@ extern "C" {
# endif
#endif
#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 50302)
#ifdef MRN_MARIADB_P
# define MRN_HANDLER_HAVE_MULTI_RANGE_READ_INFO_KEY_PARTS
#endif
#if MYSQL_VERSION_ID >= 50500
# define MRN_HANDLER_HAVE_TRUNCATE
# define MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
#endif
#if MYSQL_VERSION_ID < 50600
# define MRN_HANDLER_HAVE_GET_TABLESPACE_NAME
#endif
@@ -94,10 +81,6 @@ extern "C" {
# define MRN_HANDLER_HAVE_SET_HA_SHARE_REF
#endif
#if MYSQL_VERSION_ID >= 50500
# define MRN_TABLE_LIST_INIT_REQUIRE_ALIAS
#endif
#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
# define MRN_BIG_TABLES
#elif defined(BIG_TABLES)
@@ -110,17 +93,10 @@ extern "C" {
# define MRN_HA_ROWS_FORMAT "lu"
#endif
#if (MYSQL_VERSION_ID < 50519) || \
defined(MRN_MARIADB_P) || \
(50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID < 50604)
#ifdef MRN_MARIADB_P
# define MRN_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR
#endif
#if MYSQL_VERSION_ID >= 50500
# define MRN_HAVE_HA_EXTRA_ADD_CHILDREN_LIST
# define MRN_HAVE_HA_EXTRA_IS_ATTACHED_CHILDREN
#endif
#ifdef MRN_MARIADB_P
# define MRN_HAVE_HA_EXTRA_DETACH_CHILD
# define MRN_HAVE_HA_EXTRA_PREPARE_FOR_FORCED_CLOSE
@@ -147,10 +123,6 @@ extern "C" {
# define MRN_FIELD_STORE_TIME_NEED_TYPE
#endif
#if MYSQL_VERSION_ID < 50500
# define MRN_HAVE_TL_WRITE_ALLOW_READ
#endif
#if MYSQL_VERSION_ID < 50706 || defined(MRN_MARIADB_P)
# define MRN_HAVE_TL_WRITE_DELAYED
#endif
@@ -159,9 +131,7 @@ extern "C" {
# define MRN_HAVE_TL_WRITE_CONCURRENT_DEFAULT
#endif
#if (defined(MRN_MARIADB_P) && \
((MYSQL_VERSION_ID >= 50306 && MYSQL_VERSION_ID < 50500) || \
MYSQL_VERSION_ID >= 50523))
#ifdef MRN_MARIADB_P
# define MRN_HANDLER_AUTO_REPAIR_HAVE_ERROR
#endif
@@ -191,6 +161,9 @@ extern "C" {
#if (defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100010)
# define MRN_HAVE_TDC_LOCK_TABLE_SHARE
# if MYSQL_VERSION_ID >= 100100
# define MRN_TABLE_SHARE_TDC_IS_POINTER
# endif
#endif
#ifdef MRN_MARIADB_P
@@ -256,6 +229,22 @@ struct st_mrn_ft_info
ha_mroonga *mroonga;
};
#ifdef MRN_SUPPORT_CUSTOM_OPTIONS
struct ha_field_option_struct
{
const char *groonga_type;
const char *flags;
};
struct ha_index_option_struct
{
const char *tokenizer;
const char *normalizer;
const char *token_filters;
const char *flags;
};
#endif
/* handler class */
class ha_mroonga: public handler
{
@@ -446,11 +435,7 @@ public:
int reset();
#ifdef MRN_HANDLER_CLONE_NEED_NAME
handler *clone(const char *name, MEM_ROOT *mem_root);
#else
handler *clone(MEM_ROOT *mem_root);
#endif
uint8 table_cache_type();
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
ha_rows multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
@@ -481,9 +466,7 @@ public:
#endif
int end_bulk_insert();
int delete_all_rows();
#ifdef MRN_HANDLER_HAVE_TRUNCATE
int truncate();
#endif // MRN_HANDLER_HAVE_TRUNCATE
double scan_time();
double read_time(uint index, uint ranges, ha_rows rows);
const key_map *keys_to_use_for_scanning();
@@ -567,9 +550,7 @@ protected:
#endif
bool can_switch_engines();
int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
#ifdef MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
int get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
#endif
uint referenced_by_foreign_key();
void init_table_handle_for_HANDLER();
void free_foreign_key_create_info(char* str);
@@ -597,6 +578,8 @@ private:
void mkdir_p(const char *directory);
ulonglong file_size(const char *path);
bool have_unique_index();
void push_warning_unsupported_spatial_index_search(enum ha_rkey_function flag);
void clear_cursor();
void clear_cursor_geo();
@@ -604,14 +587,23 @@ private:
void clear_search_result();
void clear_search_result_geo();
void clear_indexes();
int alter_share_add(const char *path, TABLE_SHARE *table_share);
int add_wrap_hton(const char *path, handlerton *wrap_handlerton);
void remove_related_files(const char *base_path);
void remove_grn_obj_force(const char *name);
int drop_index(MRN_SHARE *target_share, uint key_index);
int drop_indexes_normal(const char *table_name, grn_obj *table);
int drop_indexes_multiple(const char *table_name, grn_obj *table);
int drop_indexes(const char *table_name);
bool find_column_flags(Field *field, MRN_SHARE *mrn_share, int i,
grn_obj_flags *column_flags);
grn_obj *find_column_type(Field *field, MRN_SHARE *mrn_share, int i,
int error_code);
grn_obj *find_tokenizer(KEY *key, MRN_SHARE *mrn_share, int i);
grn_obj *find_tokenizer(const char *name, int name_length);
grn_obj *find_normalizer(KEY *key_info);
bool find_index_column_flags(KEY *key_info, grn_obj_flags *index_column_flags);
bool find_token_filters(KEY *key_info, grn_obj *token_filters);
grn_obj *find_normalizer(KEY *key);
grn_obj *find_normalizer(KEY *key, const char *name);
bool find_index_column_flags(KEY *key, grn_obj_flags *index_column_flags);
bool find_token_filters(KEY *key, grn_obj *token_filters);
bool find_token_filters_put(grn_obj *token_filters,
const char *token_filter_name,
int token_filter_name_length);
@@ -788,12 +780,9 @@ private:
int close_databases();
int ensure_database_open(const char *name);
int ensure_database_remove(const char *name);
int wrapper_delete_table(const char *name, MRN_SHARE *tmp_share,
const char *table_name);
int wrapper_delete_index(const char *name, MRN_SHARE *tmp_share,
const char *table_name);
int storage_delete_table(const char *name, MRN_SHARE *tmp_share,
int wrapper_delete_table(const char *name, handlerton *wrap_handlerton,
const char *table_name);
int generic_delete_table(const char *name, const char *table_name);
int wrapper_open(const char *name, int mode, uint test_if_locked);
int wrapper_open_indexes(const char *name);
int storage_open(const char *name, int mode, uint test_if_locked);
@@ -987,13 +976,8 @@ private:
void storage_cond_pop();
bool wrapper_get_error_message(int error, String *buf);
bool storage_get_error_message(int error, String *buf);
#ifdef MRN_HANDLER_CLONE_NEED_NAME
handler *wrapper_clone(const char *name, MEM_ROOT *mem_root);
handler *storage_clone(const char *name, MEM_ROOT *mem_root);
#else
handler *wrapper_clone(MEM_ROOT *mem_root);
handler *storage_clone(MEM_ROOT *mem_root);
#endif
uint8 wrapper_table_cache_type();
uint8 storage_table_cache_type();
#ifdef MRN_HANDLER_HAVE_MULTI_RANGE_READ
@@ -1049,9 +1033,7 @@ private:
const char *function_name);
int wrapper_delete_all_rows();
int storage_delete_all_rows();
#ifdef MRN_HANDLER_HAVE_TRUNCATE
int wrapper_truncate();
#endif // MRN_HANDLER_HAVE_TRUNCATE
int wrapper_truncate_index();
int storage_truncate();
int storage_truncate_index();
@@ -1216,10 +1198,8 @@ private:
bool storage_can_switch_engines();
int wrapper_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
int storage_get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
#ifdef MRN_HANDLER_HAVE_GET_PARENT_FOREIGN_KEY_LIST
int wrapper_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
int storage_get_parent_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
#endif
uint wrapper_referenced_by_foreign_key();
uint storage_referenced_by_foreign_key();
void wrapper_init_table_handle_for_HANDLER();

View File

@@ -17,10 +17,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "mrn_condition_converter.hpp"
#include "mrn_time_converter.hpp"
#include "mrn_smart_grn_obj.hpp"

View File

@@ -20,11 +20,12 @@
#ifndef MRN_CONDITION_CONVERTER_HPP_
#define MRN_CONDITION_CONVERTER_HPP_
#include <groonga.h>
#include <mrn_mysql_compat.h>
#include <item_cmpfunc.h>
#include <groonga.h>
namespace mrn {
class ConditionConverter {
public:

View File

@@ -2,7 +2,7 @@
/*
Copyright(C) 2010 Tetsuro IKEDA
Copyright(C) 2010-2013 Kentoku SHIBA
Copyright(C) 2011-2014 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2011-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -126,13 +126,12 @@ namespace mrn {
mapper.db_name(), strlen(mapper.db_name()),
&db_address, NULL);
memcpy(db_address, db, sizeof(grn_obj *));
error = ensure_normalizers_registered(*db);
} else {
memcpy(db, db_address, sizeof(grn_obj *));
grn_ctx_use(ctx_, *db);
}
error = ensure_normalizers_registered(*db);
DBUG_RETURN(error);
}
@@ -313,18 +312,18 @@ namespace mrn {
int error = 0;
#ifdef WITH_GROONGA_NORMALIZER_MYSQL
{
# ifdef MRN_GROONGA_NORMALIZER_MYSQL_EMBEDDED
GRN_PLUGIN_IMPL_NAME_TAGGED(init, normalizers_mysql)(ctx_);
GRN_PLUGIN_IMPL_NAME_TAGGED(register, normalizers_mysql)(ctx_);
# else
grn_obj *mysql_normalizer;
mysql_normalizer = grn_ctx_get(ctx_, "NormalizerMySQLGeneralCI", -1);
if (mysql_normalizer) {
grn_obj_unlink(ctx_, mysql_normalizer);
} else {
# ifdef MRN_GROONGA_NORMALIZER_MYSQL_EMBED
GRN_PLUGIN_IMPL_NAME_TAGGED(init, normalizers_mysql)(ctx_);
GRN_PLUGIN_IMPL_NAME_TAGGED(register, normalizers_mysql)(ctx_);
# else
grn_plugin_register(ctx_, GROONGA_NORMALIZER_MYSQL_PLUGIN_NAME);
# endif
}
# endif
}
#endif

View File

@@ -233,7 +233,7 @@ namespace mrn {
bool *succeeded = static_cast<bool *>(user_data);
if (grn_db_recover(ctx_, db) != GRN_SUCCESS) {
push_warning_printf(thd_,
Sql_condition::WARN_LEVEL_WARN,
MRN_SEVERITY_WARNING,
ER_NOT_KEYFILE,
"mroonga: repair: "
"Failed to recover database: <%s>: <%s>",

View File

@@ -18,7 +18,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <mrn_mysql.h>
#include <mrn_err.h>
#include "mrn_encoding.hpp"

View File

@@ -1,6 +1,6 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -20,11 +20,11 @@
#ifndef MRN_ENCODING_HPP_
#define MRN_ENCODING_HPP_
#include <groonga.h>
#include <mrn_mysql.h>
#include <mrn_mysql_compat.h>
#include <groonga.h>
namespace mrn {
namespace encoding {
void init(void);

View File

@@ -17,8 +17,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <mrn_mysql.h>
#include "mrn_field_normalizer.hpp"
#include "mrn_encoding.hpp"

View File

@@ -1,6 +1,6 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -20,11 +20,11 @@
#ifndef MRN_FIELD_NORMALIZER_HPP_
#define MRN_FIELD_NORMALIZER_HPP_
#include <groonga.h>
#include <mrn_mysql.h>
#include <mrn_mysql_compat.h>
#include <groonga.h>
namespace mrn {
class FieldNormalizer {
public:

View File

@@ -26,6 +26,32 @@
#define MRN_CLASS_NAME "mrn::IndexTableName"
namespace mrn {
const char *IndexTableName::SEPARATOR = "-";
bool IndexTableName::is_custom_name(const char *table_name,
size_t table_name_length,
const char *index_table_name,
size_t index_table_name_length)
{
MRN_DBUG_ENTER_METHOD();
if (index_table_name_length <= (table_name_length + strlen(SEPARATOR))) {
DBUG_RETURN(true);
}
if (strncmp(table_name, index_table_name, table_name_length) != 0) {
DBUG_RETURN(true);
}
if (strncmp(SEPARATOR,
index_table_name + table_name_length,
strlen(SEPARATOR)) != 0) {
DBUG_RETURN(true);
}
DBUG_RETURN(false);
}
IndexTableName::IndexTableName(const char *table_name,
const char *mysql_index_name)
: table_name_(table_name),
@@ -38,7 +64,10 @@ namespace mrn {
mysql_index_name_multibyte,
mysql_index_name_multibyte + strlen(mysql_index_name_));
snprintf(name_, MRN_MAX_KEY_SIZE,
"%s-%s", table_name_, encoded_mysql_index_name_multibyte);
"%s%s%s",
table_name_,
SEPARATOR,
encoded_mysql_index_name_multibyte);
length_ = strlen(name_);
}

View File

@@ -26,6 +26,13 @@
namespace mrn {
class IndexTableName {
public:
static const char *SEPARATOR;
static bool is_custom_name(const char *table_name,
size_t table_name_length,
const char *index_table_name,
size_t index_table_name_length);
IndexTableName(const char *table_name, const char *mysql_index_name);
const char *c_str();
size_t length();

View File

@@ -1,6 +1,6 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -20,12 +20,17 @@
#include "mrn_lock.hpp"
namespace mrn {
Lock::Lock(mysql_mutex_t *mutex)
: mutex_(mutex) {
Lock::Lock(mysql_mutex_t *mutex, bool execute)
: mutex_(mutex),
execute_(execute) {
if (execute_) {
mysql_mutex_lock(mutex_);
}
}
Lock::~Lock() {
if (execute_) {
mysql_mutex_unlock(mutex_);
}
}
}

View File

@@ -1,6 +1,6 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -26,10 +26,11 @@
namespace mrn {
class Lock {
public:
Lock(mysql_mutex_t *mutex);
Lock(mysql_mutex_t *mutex, bool execute=true);
~Lock();
private:
mysql_mutex_t *mutex_;
bool execute_;
};
}

View File

@@ -23,6 +23,7 @@
#include "mrn_multiple_column_key_codec.hpp"
#include "mrn_field_normalizer.hpp"
#include "mrn_smart_grn_obj.hpp"
#include "mrn_time_converter.hpp"
#include "mrn_value_decoder.hpp"
// for debug
@@ -36,6 +37,13 @@
uint8 *key_ = (uint8 *)(key); \
while (size_--) { *buf_++ = *key_++; } \
}
#define mrn_byte_order_network_to_host(buf, key, size) \
{ \
uint32 size_ = (uint32)(size); \
uint8 *buf_ = (uint8 *)(buf); \
uint8 *key_ = (uint8 *)(key); \
while (size_) { *buf_++ = *key_++; size_--; } \
}
#else /* WORDS_BIGENDIAN */
#define mrn_byte_order_host_to_network(buf, key, size) \
{ \
@@ -44,6 +52,13 @@
uint8 *key_ = (uint8 *)(key) + size_; \
while (size_--) { *buf_++ = *(--key_); } \
}
#define mrn_byte_order_network_to_host(buf, key, size) \
{ \
uint32 size_ = (uint32)(size); \
uint8 *buf_ = (uint8 *)(buf); \
uint8 *key_ = (uint8 *)(key) + size_; \
while (size_) { *buf_++ = *(--key_); size_--; } \
}
#endif /* WORDS_BIGENDIAN */
namespace mrn {
@@ -87,6 +102,7 @@ namespace mrn {
DataType data_type = TYPE_UNKNOWN;
uint data_size = 0;
get_key_info(key_part, &data_type, &data_size);
uint grn_key_data_size = data_size;
switch (data_type) {
case TYPE_UNKNOWN:
@@ -97,26 +113,17 @@ namespace mrn {
case TYPE_LONG_LONG_NUMBER:
{
long long int long_long_value = 0;
switch (data_size) {
case 3:
long_long_value = (long long int)sint3korr(current_mysql_key);
break;
case 8:
long_long_value = (long long int)sint8korr(current_mysql_key);
break;
}
mrn_byte_order_host_to_network(current_grn_key, &long_long_value,
data_size);
*((uint8 *)(current_grn_key)) ^= 0x80;
long_long_value = sint8korr(current_mysql_key);
encode_long_long_int(long_long_value, current_grn_key);
}
break;
case TYPE_NUMBER:
mrn_byte_order_host_to_network(current_grn_key, current_mysql_key, data_size);
{
Field_num *number_field = (Field_num *)field;
if (!number_field->unsigned_flag) {
*((uint8 *)(current_grn_key)) ^= 0x80;
}
Field_num *number_field = static_cast<Field_num *>(field);
encode_number(current_mysql_key,
data_size,
!number_field->unsigned_flag,
current_grn_key);
}
break;
case TYPE_FLOAT:
@@ -133,6 +140,44 @@ namespace mrn {
encode_double(value, data_size, current_grn_key);
}
break;
case TYPE_DATETIME:
{
long long int mysql_datetime;
#ifdef WORDS_BIGENDIAN
if (field->table && field->table->s->db_low_byte_first) {
mysql_datetime = sint8korr(current_mysql_key);
} else
#endif
{
value_decoder::decode(&mysql_datetime, current_mysql_key);
}
TimeConverter time_converter;
bool truncated;
long long int grn_time =
time_converter.mysql_datetime_to_grn_time(mysql_datetime,
&truncated);
encode_long_long_int(grn_time, current_grn_key);
}
break;
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
case TYPE_DATETIME2:
{
Field_datetimef *datetimef_field =
static_cast<Field_datetimef *>(field);
long long int mysql_datetime_packed =
my_datetime_packed_from_binary(current_mysql_key,
datetimef_field->decimals());
MYSQL_TIME mysql_time;
TIME_from_longlong_datetime_packed(&mysql_time, mysql_datetime_packed);
TimeConverter time_converter;
bool truncated;
long long int grn_time =
time_converter.mysql_time_to_grn_time(&mysql_time, &truncated);
grn_key_data_size = 8;
encode_long_long_int(grn_time, current_grn_key);
}
break;
#endif
case TYPE_BYTE_SEQUENCE:
memcpy(current_grn_key, current_mysql_key, data_size);
break;
@@ -140,7 +185,8 @@ namespace mrn {
encode_reverse(current_mysql_key, data_size, current_grn_key);
break;
case TYPE_BYTE_BLOB:
encode_blob(field, current_mysql_key, current_grn_key, &data_size);
encode_blob(current_mysql_key, &data_size, field, current_grn_key);
grn_key_data_size = data_size;
break;
}
@@ -149,8 +195,8 @@ namespace mrn {
}
current_mysql_key += data_size;
current_grn_key += data_size;
*grn_key_length += data_size;
current_grn_key += grn_key_data_size;
*grn_key_length += grn_key_data_size;
}
DBUG_RETURN(error);
@@ -185,6 +231,7 @@ namespace mrn {
DataType data_type = TYPE_UNKNOWN;
uint data_size = 0;
get_key_info(key_part, &data_type, &data_size);
uint grn_key_data_size = data_size;
switch (data_type) {
case TYPE_UNKNOWN:
@@ -194,43 +241,68 @@ namespace mrn {
break;
case TYPE_LONG_LONG_NUMBER:
{
long long int long_long_value = 0;
switch (data_size) {
case 3:
long_long_value = (long long int)sint3korr(current_grn_key);
break;
case 8:
long_long_value = (long long int)sint8korr(current_grn_key);
break;
}
*((uint8 *)(&long_long_value)) ^= 0x80;
mrn_byte_order_host_to_network(current_mysql_key, &long_long_value,
data_size);
long long int value;
decode_long_long_int(current_grn_key, &value);
int8store(current_mysql_key, value);
}
break;
case TYPE_NUMBER:
{
uchar buffer[8];
memcpy(buffer, current_grn_key, data_size);
Field_num *number_field = (Field_num *)field;
if (!number_field->unsigned_flag) {
buffer[0] ^= 0x80;
}
mrn_byte_order_host_to_network(current_mysql_key, buffer,
data_size);
Field_num *number_field = static_cast<Field_num *>(field);
decode_number(current_grn_key,
grn_key_data_size,
!number_field->unsigned_flag,
current_mysql_key);
}
break;
case TYPE_FLOAT:
decode_float(current_grn_key, current_mysql_key, data_size);
decode_float(current_grn_key, grn_key_data_size, current_mysql_key);
break;
case TYPE_DOUBLE:
decode_double(current_grn_key, current_mysql_key, data_size);
decode_double(current_grn_key, grn_key_data_size, current_mysql_key);
break;
case TYPE_DATETIME:
{
long long int grn_time;
decode_long_long_int(current_grn_key, &grn_time);
TimeConverter time_converter;
long long int mysql_datetime =
time_converter.grn_time_to_mysql_datetime(grn_time);
#ifdef WORDS_BIGENDIAN
if (field->table && field->table->s->db_low_byte_first) {
int8store(current_mysql_key, mysql_datetime);
} else
#endif
{
longlongstore(current_mysql_key, mysql_datetime);
}
}
break;
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
case TYPE_DATETIME2:
{
Field_datetimef *datetimef_field =
static_cast<Field_datetimef *>(field);
long long int grn_time;
grn_key_data_size = 8;
decode_long_long_int(current_grn_key, &grn_time);
TimeConverter time_converter;
MYSQL_TIME mysql_time;
mysql_time.time_type = MYSQL_TIMESTAMP_DATETIME;
time_converter.grn_time_to_mysql_time(grn_time, &mysql_time);
long long int mysql_datetime_packed =
TIME_to_longlong_datetime_packed(&mysql_time);
my_datetime_packed_to_binary(mysql_datetime_packed,
current_mysql_key,
datetimef_field->decimals());
}
break;
#endif
case TYPE_BYTE_SEQUENCE:
memcpy(current_mysql_key, current_grn_key, data_size);
memcpy(current_mysql_key, current_grn_key, grn_key_data_size);
break;
case TYPE_BYTE_REVERSE:
decode_reverse(current_grn_key, current_mysql_key, data_size);
decode_reverse(current_grn_key, grn_key_data_size, current_mysql_key);
break;
case TYPE_BYTE_BLOB:
memcpy(current_mysql_key,
@@ -240,6 +312,7 @@ namespace mrn {
current_grn_key,
data_size);
data_size += HA_KEY_BLOB_LENGTH;
grn_key_data_size = data_size;
break;
}
@@ -247,7 +320,7 @@ namespace mrn {
break;
}
current_grn_key += data_size;
current_grn_key += grn_key_data_size;
current_mysql_key += data_size;
*mysql_key_length += data_size;
}
@@ -275,10 +348,19 @@ namespace mrn {
DataType data_type = TYPE_UNKNOWN;
uint data_size = 0;
get_key_info(key_part, &data_type, &data_size);
total_size += data_size;
if (data_type == TYPE_BYTE_BLOB) {
total_size += HA_KEY_BLOB_LENGTH;
switch (data_type) {
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
case TYPE_DATETIME2:
data_size = 8;
break;
#endif
case TYPE_BYTE_BLOB:
data_size += HA_KEY_BLOB_LENGTH;
break;
default:
break;
}
total_size += data_size;
}
DBUG_RETURN(total_size);
@@ -331,10 +413,22 @@ namespace mrn {
*data_size = 1;
break;
case MYSQL_TYPE_TIMESTAMP:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TIMESTAMP"));
*data_type = TYPE_BYTE_REVERSE;
*data_size = key_part->length;
break;
case MYSQL_TYPE_DATE:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DATE"));
*data_type = TYPE_BYTE_REVERSE;
*data_size = key_part->length;
break;
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_NEWDATE:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DATETIME"));
*data_type = TYPE_DATETIME;
*data_size = key_part->length;
break;
case MYSQL_TYPE_NEWDATE:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_NEWDATE"));
*data_type = TYPE_BYTE_REVERSE;
*data_size = key_part->length;
break;
@@ -350,7 +444,7 @@ namespace mrn {
break;
case MYSQL_TYPE_TIME:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_TIME"));
*data_type = TYPE_LONG_LONG_NUMBER;
*data_type = TYPE_NUMBER;
*data_size = 3;
break;
case MYSQL_TYPE_VARCHAR:
@@ -374,7 +468,7 @@ namespace mrn {
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
case MYSQL_TYPE_DATETIME2:
DBUG_PRINT("info", ("mroonga: MYSQL_TYPE_DATETIME2"));
*data_type = TYPE_BYTE_SEQUENCE;
*data_type = TYPE_DATETIME2;
*data_size = key_part->length;
break;
#endif
@@ -428,77 +522,127 @@ namespace mrn {
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_float(volatile float value, uint data_size,
void MultipleColumnKeyCodec::encode_number(const uchar *mysql_key,
uint mysql_key_size,
bool is_signed,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
int n_bits = (data_size * 8 - 1);
mrn_byte_order_host_to_network(grn_key, mysql_key, mysql_key_size);
if (is_signed) {
grn_key[0] ^= 0x80;
}
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::decode_number(const uchar *grn_key,
uint grn_key_size,
bool is_signed,
uchar *mysql_key) {
MRN_DBUG_ENTER_METHOD();
uchar buffer[8];
memcpy(buffer, grn_key, grn_key_size);
if (is_signed) {
buffer[0] ^= 0x80;
}
mrn_byte_order_network_to_host(mysql_key, buffer, grn_key_size);
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_long_long_int(volatile long long int value,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
uint value_size = 8;
mrn_byte_order_host_to_network(grn_key, &value, value_size);
grn_key[0] ^= 0x80;
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::decode_long_long_int(const uchar *grn_key,
long long int *value) {
MRN_DBUG_ENTER_METHOD();
uint grn_key_size = 8;
uchar buffer[8];
memcpy(buffer, grn_key, grn_key_size);
buffer[0] ^= 0x80;
mrn_byte_order_network_to_host(value, buffer, grn_key_size);
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_float(volatile float value,
uint value_size,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
int n_bits = (value_size * 8 - 1);
volatile int *int_value_pointer = (int *)(&value);
int int_value = *int_value_pointer;
int_value ^= ((int_value >> n_bits) | (1 << n_bits));
mrn_byte_order_host_to_network(grn_key, &int_value, data_size);
mrn_byte_order_host_to_network(grn_key, &int_value, value_size);
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::decode_float(const uchar *grn_key,
uchar *mysql_key,
uint data_size) {
uint grn_key_size,
uchar *mysql_key) {
MRN_DBUG_ENTER_METHOD();
int int_value;
mrn_byte_order_host_to_network(&int_value, grn_key, data_size);
int max_bit = (data_size * 8 - 1);
mrn_byte_order_network_to_host(&int_value, grn_key, grn_key_size);
int max_bit = (grn_key_size * 8 - 1);
*((int *)mysql_key) =
int_value ^ (((int_value ^ (1 << max_bit)) >> max_bit) |
(1 << max_bit));
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_double(volatile double value, uint data_size,
void MultipleColumnKeyCodec::encode_double(volatile double value,
uint value_size,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
int n_bits = (data_size * 8 - 1);
int n_bits = (value_size * 8 - 1);
volatile long long int *long_long_value_pointer = (long long int *)(&value);
volatile long long int long_long_value = *long_long_value_pointer;
long_long_value ^= ((long_long_value >> n_bits) | (1LL << n_bits));
mrn_byte_order_host_to_network(grn_key, &long_long_value, data_size);
mrn_byte_order_host_to_network(grn_key, &long_long_value, value_size);
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::decode_double(const uchar *grn_key,
uchar *mysql_key,
uint data_size) {
uint grn_key_size,
uchar *mysql_key) {
MRN_DBUG_ENTER_METHOD();
long long int long_long_value;
mrn_byte_order_host_to_network(&long_long_value, grn_key, data_size);
int max_bit = (data_size * 8 - 1);
mrn_byte_order_network_to_host(&long_long_value, grn_key, grn_key_size);
int max_bit = (grn_key_size * 8 - 1);
*((long long int *)mysql_key) =
long_long_value ^ (((long_long_value ^ (1LL << max_bit)) >> max_bit) |
(1LL << max_bit));
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_reverse(const uchar *mysql_key, uint data_size,
void MultipleColumnKeyCodec::encode_reverse(const uchar *mysql_key,
uint mysql_key_size,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
for (uint i = 0; i < data_size; i++) {
grn_key[i] = mysql_key[data_size - i - 1];
for (uint i = 0; i < mysql_key_size; i++) {
grn_key[i] = mysql_key[mysql_key_size - i - 1];
}
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::decode_reverse(const uchar *grn_key,
uchar *mysql_key,
uint data_size) {
uint grn_key_size,
uchar *mysql_key) {
MRN_DBUG_ENTER_METHOD();
for (uint i = 0; i < data_size; i++) {
mysql_key[i] = grn_key[data_size - i - 1];
for (uint i = 0; i < grn_key_size; i++) {
mysql_key[i] = grn_key[grn_key_size - i - 1];
}
DBUG_VOID_RETURN;
}
void MultipleColumnKeyCodec::encode_blob(Field *field,
const uchar *mysql_key,
uchar *grn_key,
uint *data_size) {
void MultipleColumnKeyCodec::encode_blob(const uchar *mysql_key,
uint *mysql_key_size,
Field *field,
uchar *grn_key) {
MRN_DBUG_ENTER_METHOD();
FieldNormalizer normalizer(ctx_, thread_, field);
if (normalizer.should_normalize()) {
#if HA_KEY_BLOB_LENGTH != 2
@@ -517,15 +661,15 @@ namespace mrn {
uint16 new_blob_data_length;
if (normalized_length <= UINT_MAX16) {
memcpy(grn_key, normalized, normalized_length);
if (normalized_length < *data_size) {
if (normalized_length < *mysql_key_size) {
memset(grn_key + normalized_length,
'\0', *data_size - normalized_length);
'\0', *mysql_key_size - normalized_length);
}
new_blob_data_length = normalized_length;
} else {
push_warning_printf(thread_,
MRN_SEVERITY_WARNING,
WARN_DATA_TRUNCATED,
MRN_ERROR_CODE_DATA_TRUNCATE(thread_),
"normalized data truncated "
"for multiple column index: "
"normalized-data-size: <%u> "
@@ -539,11 +683,14 @@ namespace mrn {
memcpy(grn_key, normalized, blob_data_length);
new_blob_data_length = blob_data_length;
}
memcpy(grn_key + *data_size, &new_blob_data_length, HA_KEY_BLOB_LENGTH);
memcpy(grn_key + *mysql_key_size,
&new_blob_data_length,
HA_KEY_BLOB_LENGTH);
} else {
memcpy(grn_key + *data_size, mysql_key, HA_KEY_BLOB_LENGTH);
memcpy(grn_key, mysql_key + HA_KEY_BLOB_LENGTH, *data_size);
memcpy(grn_key + *mysql_key_size, mysql_key, HA_KEY_BLOB_LENGTH);
memcpy(grn_key, mysql_key + HA_KEY_BLOB_LENGTH, *mysql_key_size);
}
*data_size += HA_KEY_BLOB_LENGTH;
*mysql_key_size += HA_KEY_BLOB_LENGTH;
DBUG_VOID_RETURN;
}
}

View File

@@ -44,6 +44,10 @@ namespace mrn {
TYPE_NUMBER,
TYPE_FLOAT,
TYPE_DOUBLE,
TYPE_DATETIME,
#ifdef MRN_HAVE_MYSQL_TYPE_DATETIME2
TYPE_DATETIME2,
#endif
TYPE_BYTE_SEQUENCE,
TYPE_BYTE_REVERSE,
TYPE_BYTE_BLOB
@@ -56,14 +60,40 @@ namespace mrn {
void get_key_info(KEY_PART_INFO *key_part,
DataType *data_type, uint *data_size);
void encode_float(volatile float value, uint data_size, uchar *grn_key);
void decode_float(const uchar *grn_key, uchar *mysql_key, uint data_size);
void encode_double(volatile double value, uint data_size, uchar *grn_key);
void decode_double(const uchar *grn_key, uchar *mysql_key, uint data_size);
void encode_reverse(const uchar *mysql_key, uint data_size, uchar *grn_key);
void decode_reverse(const uchar *grn_key, uchar *mysql_key, uint data_size);
void encode_blob(Field *field,
const uchar *mysql_key, uchar *grn_key, uint *data_size);
void encode_number(const uchar *mysql_key,
uint mysql_key_size,
bool is_signed,
uchar *grn_key);
void decode_number(const uchar *grn_key,
uint grn_key_size,
bool is_signed,
uchar *mysql_key);
void encode_long_long_int(volatile long long int value,
uchar *grn_key);
void decode_long_long_int(const uchar *grn_key,
long long int *value);
void encode_float(volatile float value,
uint value_size,
uchar *grn_key);
void decode_float(const uchar *grn_key,
uint grn_key_size,
uchar *mysql_key);
void encode_double(volatile double value,
uint value_size,
uchar *grn_key);
void decode_double(const uchar *grn_key,
uint grn_key_size,
uchar *mysql_key);
void encode_reverse(const uchar *mysql_key,
uint mysql_key_size,
uchar *grn_key);
void decode_reverse(const uchar *grn_key,
uint grn_key_size,
uchar *mysql_key);
void encode_blob(const uchar *mysql_key,
uint *mysql_key_size,
Field *field,
uchar *grn_key);
};
}

View File

@@ -17,10 +17,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <mrn_mysql.h>
#include <mrn_mysql_compat.h>

View File

@@ -50,4 +50,10 @@ namespace mrn {
grn_obj *SmartGrnObj::get() {
return obj_;
}
grn_obj *SmartGrnObj::release() {
grn_obj *obj = obj_;
obj_ = NULL;
return obj;
}
}

View File

@@ -33,6 +33,7 @@ namespace mrn {
~SmartGrnObj();
grn_obj *get();
grn_obj *release();
};
}

View File

@@ -1,7 +1,7 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2010-2013 Kentoku SHIBA
Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2011-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -18,10 +18,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include "mrn_time_converter.hpp"
#ifdef min
@@ -257,4 +253,43 @@ namespace mrn {
}
DBUG_VOID_RETURN;
}
long long int TimeConverter::mysql_datetime_to_grn_time(long long int mysql_datetime,
bool *truncated) {
MRN_DBUG_ENTER_METHOD();
MYSQL_TIME mysql_time;
mysql_time.time_type = MYSQL_TIMESTAMP_DATETIME;
mysql_time.neg = 0;
mysql_time.second_part = 0;
mysql_time.second = (mysql_datetime % 100);
mysql_time.minute = (mysql_datetime / 100 % 100);
mysql_time.hour = (mysql_datetime / 10000 % 100);
mysql_time.day = (mysql_datetime / 1000000 % 100);
mysql_time.month = (mysql_datetime / 100000000 % 100);
mysql_time.year = (mysql_datetime / 10000000000LL % 10000);
long long int grn_time = mysql_time_to_grn_time(&mysql_time, truncated);
DBUG_RETURN(grn_time);
}
long long int TimeConverter::grn_time_to_mysql_datetime(long long int grn_time) {
MRN_DBUG_ENTER_METHOD();
MYSQL_TIME mysql_time;
mysql_time.time_type = MYSQL_TIMESTAMP_DATETIME;
grn_time_to_mysql_time(grn_time, &mysql_time);
long long int mysql_datetime =
(mysql_time.second * 1) +
(mysql_time.minute * 100) +
(mysql_time.hour * 10000) +
(mysql_time.day * 1000000) +
(mysql_time.month * 100000000) +
(mysql_time.year * 10000000000LL);
DBUG_RETURN(mysql_datetime);
}
}

View File

@@ -1,7 +1,7 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2010-2013 Kentoku SHIBA
Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2011-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -21,9 +21,10 @@
#ifndef MRN_TIME_CONVERTER_HPP_
#define MRN_TIME_CONVERTER_HPP_
#include <groonga.h>
#include <mrn_mysql_compat.h>
#include <groonga.h>
namespace mrn {
class TimeConverter {
public:
@@ -34,10 +35,13 @@ namespace mrn {
long long int mysql_time_to_grn_time(MYSQL_TIME *mysql_time,
bool *truncated);
long long int mysql_datetime_to_grn_time(long long int mysql_datetime,
bool *truncated);
long long int tm_to_grn_time(struct tm *time, int usec, bool *truncated);
void grn_time_to_mysql_time(long long int grn_time, MYSQL_TIME *mysql_time);
long long int grn_time_to_mysql_datetime(long long int grn_time);
private:
time_t tm_to_time_gm(struct tm *time, bool *truncated);

View File

@@ -57,6 +57,17 @@ namespace mrn {
double value;
float8get(value, source);
*dest = value;
#endif
DBUG_VOID_RETURN;
}
void decode(long long int *dest, const uchar *source) {
MRN_DBUG_ENTER_FUNCTION();
#ifdef MRN_DEST_IS_POINTER
longlongget(dest, source);
#else
long long int value;
longlongget(value, source);
*dest = value;
#endif
DBUG_VOID_RETURN;
}

View File

@@ -27,6 +27,7 @@ namespace mrn {
void decode(uint16 *dest, const uchar *source);
void decode(float *dest, const uchar *source);
void decode(double *dest, const uchar *source);
void decode(long long int *dest, const uchar *source);
}
}

View File

@@ -42,8 +42,8 @@
#define MRN_COLUMN_NAME_ID "_id"
#define MRN_COLUMN_NAME_KEY "_key"
#define MRN_COLUMN_NAME_SCORE "_score"
#ifndef MRN_PARSER_DEFAULT
# define MRN_PARSER_DEFAULT "TokenBigram"
#ifndef MRN_DEFAULT_TOKENIZER
# define MRN_DEFAULT_TOKENIZER "TokenBigram"
#endif
#endif /* MRN_CONSTANTS_HPP_ */

View File

@@ -1,4 +1,6 @@
/* Copyright(C) 2011 Kentoku SHIBA
/*
Copyright(C) 2011 Kentoku SHIBA
Copyright(C) 2014-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -33,7 +35,7 @@
"The column flag '%-.64s' is unsupported. It is ignored"
#define ER_MRN_INVALID_COLUMN_FLAG_NUM 16507
#define ER_MRN_INVALID_COLUMN_FLAG_STR \
"The column flag '%-.64s' is invalid. '%-64s' is used instead"
"The column flag '%-.64s' is invalid. It is ignored"
#define ER_MRN_INVALID_INDEX_FLAG_NUM 16508
#define ER_MRN_INVALID_INDEX_FLAG_STR \
"The index flag '%-.64s' is invalid. It is ignored"

View File

@@ -33,20 +33,11 @@
#endif
#if defined(MRN_MARIADB_P)
# if MYSQL_VERSION_ID >= 50302 && MYSQL_VERSION_ID < 100000
# if MYSQL_VERSION_ID < 100000
typedef COST_VECT Cost_estimate;
# endif
#endif
#if MYSQL_VERSION_ID >= 50516
# define MRN_PLUGIN_HAVE_FLAGS 1
#endif
// for MySQL < 5.5
#ifndef MY_ALL_CHARSETS_SIZE
# define MY_ALL_CHARSETS_SIZE 256
#endif
#ifndef MRN_MARIADB_P
typedef char *range_id_t;
#endif
@@ -79,9 +70,11 @@
#if MYSQL_VERSION_ID >= 50607
# if MYSQL_VERSION_ID >= 100007 && defined(MRN_MARIADB_P)
# define MRN_GET_ERROR_MESSAGE thd_get_error_message(current_thd)
# define MRN_GET_ERROR_NUMBER thd_get_error_number(current_thd)
# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd_get_error_row(thd)
# else
# define MRN_GET_ERROR_MESSAGE current_thd->get_stmt_da()->message()
# define MRN_GET_ERROR_NUMBER current_thd->get_stmt_da()->sql_errno()
# if MYSQL_VERSION_ID >= 50706
# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) \
thd->get_stmt_da()->current_row_for_condition()
@@ -91,20 +84,16 @@
# endif
# endif
#else
# if MYSQL_VERSION_ID >= 50500
# define MRN_GET_ERROR_MESSAGE current_thd->stmt_da->message()
# define MRN_GET_ERROR_NUMBER current_thd->stmt_da->sql_errno()
# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->warning_info->current_row_for_warning()
# else
# define MRN_GET_ERROR_MESSAGE current_thd->main_da.message()
# define MRN_GET_CURRENT_ROW_FOR_WARNING(thd) thd->row_count
# endif
#endif
#if MYSQL_VERSION_ID >= 50607 && !defined(MRN_MARIADB_P)
# define MRN_ITEM_HAVE_ITEM_NAME
#endif
#if MYSQL_VERSION_ID >= 50500 && MYSQL_VERSION_ID < 100000
#if MYSQL_VERSION_ID < 100000
# define MRN_HAVE_TABLE_DEF_CACHE
#endif
@@ -124,10 +113,6 @@
# define MRN_TABLE_SHARE_HAVE_LOCK_SHARE
#endif
#if MYSQL_VERSION_ID >= 50404
# define MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
#endif
#ifndef TIME_FUZZY_DATE
/* For MariaDB 10. */
# ifdef TIME_FUZZY_DATES
@@ -217,4 +202,42 @@
# define MRN_FORMAT_STRING_LENGTH "u"
#endif
#ifdef MRN_MARIADB_P
# define MRN_SUPPORT_CUSTOM_OPTIONS
#endif
#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000
# if MYSQL_VERSION_ID >= 100104
# define mrn_init_sql_alloc(thd, mem_root) \
init_sql_alloc(mem_root, \
TABLE_ALLOC_BLOCK_SIZE, \
0, \
MYF(thd->slave_thread ? 0 : MY_THREAD_SPECIFIC))
# else
# define mrn_init_sql_alloc(thd, mem_root) \
init_sql_alloc(mem_root, \
TABLE_ALLOC_BLOCK_SIZE, \
0, \
MYF(0))
# endif
#else
# define mrn_init_sql_alloc(thd, mem_root) \
init_sql_alloc(mem_root, \
TABLE_ALLOC_BLOCK_SIZE, \
0)
#endif
#ifdef MRN_MARIADB_P
# define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning
#else
# if MYSQL_VERSION_ID >= 50706
# define MRN_ABORT_ON_WARNING(thd) false
# else
# define MRN_ABORT_ON_WARNING(thd) thd->abort_on_warning
# endif
#endif
#define MRN_ERROR_CODE_DATA_TRUNCATE(thd) \
(MRN_ABORT_ON_WARNING(thd) ? ER_WARN_DATA_OUT_OF_RANGE : WARN_DATA_TRUNCATED)
#endif /* MRN_MYSQL_COMPAT_H_ */

View File

@@ -35,11 +35,19 @@
#include "mrn_variables.hpp"
#include <mrn_lock.hpp>
#ifdef MRN_MARIADB_P
# if MYSQL_VERSION_ID >= 100100
# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name), TRUE)
# else
# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name))
# endif
#else
# if MYSQL_VERSION_ID >= 50603
# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name), TRUE)
# else
# define MRN_HA_RESOLVE_BY_NAME(name) ha_resolve_by_name(NULL, (name))
# endif
#endif
#if MYSQL_VERSION_ID >= 50706 && !defined(MRN_MARIADB_P)
# define MRN_PLUGIN_DATA(plugin, type) plugin_data<type>(plugin)
@@ -68,10 +76,8 @@ extern "C" {
# ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
extern PSI_mutex_key *mrn_table_share_lock_share;
# endif
# ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
extern PSI_mutex_key *mrn_table_share_lock_ha_data;
# endif
# endif
extern PSI_mutex_key mrn_share_mutex_key;
extern PSI_mutex_key mrn_long_term_share_auto_inc_mutex_key;
#endif
@@ -80,7 +86,7 @@ extern HASH mrn_open_tables;
extern mysql_mutex_t mrn_open_tables_mutex;
extern HASH mrn_long_term_share;
extern mysql_mutex_t mrn_long_term_share_mutex;
extern char *mrn_default_parser;
extern char *mrn_default_tokenizer;
extern char *mrn_default_wrapper_engine;
extern handlerton *mrn_hton_ptr;
extern HASH mrn_allocated_thds;
@@ -333,8 +339,8 @@ int mrn_parse_table_param(MRN_SHARE *share, TABLE *table)
for (i = 2; i > 0; i--)
#endif
{
const char *params_string_value;
uint params_string_length;
const char *params_string_value = NULL;
uint params_string_length = 0;
switch (i)
{
#ifdef WITH_PARTITION_STORAGE_ENGINE
@@ -515,16 +521,16 @@ int mrn_add_index_param(MRN_SHARE *share, KEY *key_info, int i)
#if MYSQL_VERSION_ID >= 50500
if (key_info->comment.length == 0)
{
if (share->key_parser[i]) {
my_free(share->key_parser[i]);
if (share->key_tokenizer[i]) {
my_free(share->key_tokenizer[i]);
}
if (
!(share->key_parser[i] = mrn_my_strdup(mrn_default_parser, MYF(MY_WME)))
) {
share->key_tokenizer[i] = mrn_my_strdup(mrn_default_tokenizer, MYF(MY_WME));
if (!share->key_tokenizer[i]) {
error = HA_ERR_OUT_OF_MEM;
goto error;
}
share->key_parser_length[i] = strlen(share->key_parser[i]);
share->key_tokenizer_length[i] = strlen(share->key_tokenizer[i]);
DBUG_RETURN(0);
}
DBUG_PRINT("info", ("mroonga create comment string"));
@@ -572,21 +578,23 @@ int mrn_add_index_param(MRN_SHARE *share, KEY *key_info, int i)
MRN_PARAM_STR_LIST("table", index_table, i);
break;
case 6:
MRN_PARAM_STR_LIST("parser", key_parser, i);
MRN_PARAM_STR_LIST("parser", key_tokenizer, i);
break;
case 9:
MRN_PARAM_STR_LIST("tokenizer", key_tokenizer, i);
break;
default:
break;
}
}
#endif
if (!share->key_parser[i]) {
if (
!(share->key_parser[i] = mrn_my_strdup(mrn_default_parser, MYF(MY_WME)))
) {
if (!share->key_tokenizer[i]) {
share->key_tokenizer[i] = mrn_my_strdup(mrn_default_tokenizer, MYF(MY_WME));
if (!share->key_tokenizer[i]) {
error = HA_ERR_OUT_OF_MEM;
goto error;
}
share->key_parser_length[i] = strlen(share->key_parser[i]);
share->key_tokenizer_length[i] = strlen(share->key_tokenizer[i]);
}
if (param_string)
@@ -687,6 +695,9 @@ int mrn_add_column_param(MRN_SHARE *share, Field *field, int i)
case 5:
MRN_PARAM_STR_LIST("flags", col_flags, i);
break;
case 12:
MRN_PARAM_STR_LIST("groonga_type", col_type, i);
break;
default:
break;
}
@@ -741,8 +752,8 @@ int mrn_free_share_alloc(
{
if (share->index_table && share->index_table[i])
my_free(share->index_table[i]);
if (share->key_parser[i])
my_free(share->key_parser[i]);
if (share->key_tokenizer[i])
my_free(share->key_tokenizer[i]);
}
for (i = 0; i < share->table_share->fields; i++)
{
@@ -817,9 +828,9 @@ error_alloc_long_term_share:
MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
{
MRN_SHARE *share;
char *tmp_name, **index_table, **key_parser, **col_flags, **col_type;
char *tmp_name, **index_table, **key_tokenizer, **col_flags, **col_type;
uint length, *wrap_key_nr, *index_table_length;
uint *key_parser_length, *col_flags_length, *col_type_length, i, j;
uint *key_tokenizer_length, *col_flags_length, *col_type_length, i, j;
KEY *wrap_key_info;
TABLE_SHARE *wrap_table_share;
MRN_DBUG_ENTER_FUNCTION();
@@ -834,8 +845,8 @@ MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
&tmp_name, length + 1,
&index_table, sizeof(char *) * table->s->keys,
&index_table_length, sizeof(uint) * table->s->keys,
&key_parser, sizeof(char *) * table->s->keys,
&key_parser_length, sizeof(uint) * table->s->keys,
&key_tokenizer, sizeof(char *) * table->s->keys,
&key_tokenizer_length, sizeof(uint) * table->s->keys,
&col_flags, sizeof(char *) * table->s->fields,
&col_flags_length, sizeof(uint) * table->s->fields,
&col_type, sizeof(char *) * table->s->fields,
@@ -853,8 +864,8 @@ MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
share->table_name = tmp_name;
share->index_table = index_table;
share->index_table_length = index_table_length;
share->key_parser = key_parser;
share->key_parser_length = key_parser_length;
share->key_tokenizer = key_tokenizer;
share->key_tokenizer_length = key_tokenizer_length;
share->col_flags = col_flags;
share->col_flags_length = col_flags_length;
share->col_type = col_type;
@@ -903,6 +914,7 @@ MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
share->wrap_primary_key = MAX_KEY;
}
memcpy(wrap_table_share, table->s, sizeof(*wrap_table_share));
mrn_init_sql_alloc(current_thd, &(wrap_table_share->mem_root));
wrap_table_share->keys = share->wrap_keys;
wrap_table_share->key_info = share->wrap_key_info;
wrap_table_share->primary_key = share->wrap_primary_key;
@@ -917,20 +929,18 @@ MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
&(wrap_table_share->LOCK_share), MY_MUTEX_INIT_SLOW);
# endif
#endif
#ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
#ifdef WIN32
mysql_mutex_init(*mrn_table_share_lock_ha_data,
&(wrap_table_share->LOCK_ha_data), MY_MUTEX_INIT_FAST);
#else
mysql_mutex_init(key_TABLE_SHARE_LOCK_ha_data,
&(wrap_table_share->LOCK_ha_data), MY_MUTEX_INIT_FAST);
# endif
#endif
share->wrap_table_share = wrap_table_share;
}
if (mysql_mutex_init(mrn_share_mutex_key,
&share->mutex,
&share->record_mutex,
MY_MUTEX_INIT_FAST) != 0)
{
*error = HA_ERR_OUT_OF_MEM;
@@ -953,7 +963,7 @@ MRN_SHARE *mrn_get_share(const char *table_name, TABLE *table, int *error)
error_hash_insert:
error_get_long_term_share:
mysql_mutex_destroy(&share->mutex);
mysql_mutex_destroy(&share->record_mutex);
error_init_mutex:
error_parse_table_param:
mrn_free_share_alloc(share);
@@ -973,14 +983,13 @@ int mrn_free_share(MRN_SHARE *share)
plugin_unlock(NULL, share->plugin);
mrn_free_share_alloc(share);
thr_lock_delete(&share->lock);
mysql_mutex_destroy(&share->mutex);
mysql_mutex_destroy(&share->record_mutex);
if (share->wrapper_mode) {
#ifdef MRN_TABLE_SHARE_HAVE_LOCK_SHARE
mysql_mutex_destroy(&(share->wrap_table_share->LOCK_share));
#endif
#ifdef MRN_TABLE_SHARE_HAVE_LOCK_HA_DATA
mysql_mutex_destroy(&(share->wrap_table_share->LOCK_ha_data));
#endif
free_root(&(share->wrap_table_share->mem_root), MYF(0));
}
my_free(share);
}
@@ -1114,7 +1123,7 @@ st_mrn_slot_data *mrn_get_slot_data(THD *thd, bool can_create)
if (slot_data == NULL) {
slot_data = (st_mrn_slot_data*) malloc(sizeof(st_mrn_slot_data));
slot_data->last_insert_record_id = GRN_ID_NIL;
slot_data->first_alter_share = NULL;
slot_data->first_wrap_hton = NULL;
slot_data->alter_create_info = NULL;
slot_data->disable_keys_create_info = NULL;
slot_data->alter_connect_string = NULL;
@@ -1132,22 +1141,21 @@ st_mrn_slot_data *mrn_get_slot_data(THD *thd, bool can_create)
DBUG_RETURN(slot_data);
}
void mrn_clear_alter_share(THD *thd)
void mrn_clear_slot_data(THD *thd)
{
MRN_DBUG_ENTER_FUNCTION();
st_mrn_slot_data *slot_data = mrn_get_slot_data(thd, FALSE);
if (slot_data) {
if (slot_data->first_alter_share) {
st_mrn_alter_share *tmp_alter_share;
st_mrn_alter_share *alter_share = slot_data->first_alter_share;
while (alter_share)
if (slot_data->first_wrap_hton) {
st_mrn_wrap_hton *tmp_wrap_hton;
st_mrn_wrap_hton *wrap_hton = slot_data->first_wrap_hton;
while (wrap_hton)
{
tmp_alter_share = alter_share->next;
mrn_free_tmp_table_share(alter_share->alter_share);
free(alter_share);
alter_share = tmp_alter_share;
tmp_wrap_hton = wrap_hton->next;
free(wrap_hton);
wrap_hton = tmp_wrap_hton;
}
slot_data->first_alter_share = NULL;
slot_data->first_wrap_hton = NULL;
}
slot_data->alter_create_info = NULL;
slot_data->disable_keys_create_info = NULL;

View File

@@ -1,7 +1,7 @@
/* -*- c-basic-offset: 2 -*- */
/*
Copyright(C) 2011-2013 Kentoku SHIBA
Copyright(C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
Copyright(C) 2011-2015 Kouhei Sutou <kou@clear-code.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
@@ -43,7 +43,7 @@ typedef struct st_mroonga_share
char *table_name;
uint table_name_length;
uint use_count;
mysql_mutex_t mutex;
mysql_mutex_t record_mutex;
THR_LOCK lock;
TABLE_SHARE *table_share;
TABLE_SHARE *wrap_table_share;
@@ -60,11 +60,11 @@ typedef struct st_mroonga_share
plugin_ref plugin;
handlerton *hton;
char **index_table;
char **key_parser;
char **key_tokenizer;
char **col_flags;
char **col_type;
uint *index_table_length;
uint *key_parser_length;
uint *key_tokenizer_length;
uint *col_flags_length;
uint *col_type_length;
uint *wrap_key_nr;
@@ -78,17 +78,17 @@ typedef struct st_mroonga_share
bool disable_keys;
} MRN_SHARE;
struct st_mrn_alter_share
struct st_mrn_wrap_hton
{
char path[FN_REFLEN + 1];
TABLE_SHARE *alter_share;
st_mrn_alter_share *next;
handlerton *hton;
st_mrn_wrap_hton *next;
};
struct st_mrn_slot_data
{
grn_id last_insert_record_id;
st_mrn_alter_share *first_alter_share;
st_mrn_wrap_hton *first_wrap_hton;
HA_CREATE_INFO *alter_create_info;
HA_CREATE_INFO *disable_keys_create_info;
char *alter_connect_string;
@@ -167,7 +167,7 @@ void mrn_free_tmp_table_share(TABLE_SHARE *table_share);
KEY *mrn_create_key_info_for_table(MRN_SHARE *share, TABLE *table, int *error);
void mrn_set_bitmap_by_key(MY_BITMAP *map, KEY *key_info);
st_mrn_slot_data *mrn_get_slot_data(THD *thd, bool can_create);
void mrn_clear_alter_share(THD *thd);
void mrn_clear_slot_data(THD *thd);
#ifdef __cplusplus
}

View File

@@ -0,0 +1,19 @@
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--disable_query_log
let $libgroonga_embedded = `SELECT @@mroonga_libgroonga_embedded;`;
--enable_query_log

View File

@@ -0,0 +1,22 @@
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/check_libgroonga_embedded.inc
if ($libgroonga_embedded) {
--source ../../include/mroonga/have_mroonga_deinit.inc
skip "This test requires plugin_register of Groonga. libgroonga embedded build doesn't support it.";
}

View File

@@ -1,4 +1,4 @@
# Copyright(C) 2012 Kouhei Sutou <kou@clear-code.com>
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
@@ -14,12 +14,8 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--source ../../include/mroonga/check_version.inc
--source ../../include/mroonga/check_mariadb.inc
if ($version_55_or_later) {
let $fulltext_index_comment = 1;
}
if (!$fulltext_index_comment) {
skip Fulltext index comment is available in version 5.5 or later;
if (!$mariadb) {
skip This test is for MariaDB;
}

View File

@@ -38,6 +38,9 @@ if (!$have_default_storage_engine_variable) {
let have_default_tmp_storage_engine_variable=`SELECT 1 FROM information_schema.global_variables WHERE variable_name = "default_tmp_storage_engine"`;
if ($have_default_tmp_storage_engine_variable) {
let original_default_tmp_storage_engine=`SELECT variable_value FROM information_schema.global_variables WHERE variable_name = "default_tmp_storage_engine"`;
if (!$original_default_tmp_storage_engine) {
let original_default_tmp_storage_engine=NULL;
}
set default_tmp_storage_engine=Mroonga;
}

View File

@@ -0,0 +1,17 @@
CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE tags ADD COLUMN name VARCHAR(64) FLAGS='COLUMN_VECTOR';
SHOW CREATE TABLE tags;
Table Create Table
tags CREATE TABLE `tags` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) DEFAULT NULL `FLAGS`='COLUMN_VECTOR',
PRIMARY KEY (`id`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create tags TABLE_PAT_KEY UInt32
column_create tags id COLUMN_SCALAR UInt32
column_create tags name COLUMN_VECTOR ShortText
DROP TABLE tags;

View File

@@ -0,0 +1,18 @@
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'groonga_type "tags"';
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create tags TABLE_PAT_KEY UInt32
column_create tags id COLUMN_SCALAR UInt32
table_create bugs TABLE_PAT_KEY UInt32
column_create bugs id COLUMN_SCALAR UInt32
column_create bugs name COLUMN_SCALAR tags
DROP TABLE bugs;
DROP TABLE tags;

View File

@@ -0,0 +1,26 @@
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE bugs ADD COLUMN name VARCHAR(64) GROONGA_TYPE='tags';
SHOW CREATE TABLE bugs;
Table Create Table
bugs CREATE TABLE `bugs` (
`id` int(10) unsigned NOT NULL,
`name` varchar(64) DEFAULT NULL `GROONGA_TYPE`='tags',
PRIMARY KEY (`id`),
CONSTRAINT `name` FOREIGN KEY (`name`) REFERENCES `test`.`tags` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create tags TABLE_PAT_KEY UInt32
column_create tags id COLUMN_SCALAR UInt32
table_create bugs TABLE_PAT_KEY UInt32
column_create bugs id COLUMN_SCALAR UInt32
column_create bugs name COLUMN_SCALAR tags
DROP TABLE bugs;
DROP TABLE tags;

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
SET NAMES utf8;
CREATE TABLE memos (

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
CREATE TABLE terms (
term VARCHAR(64) NOT NULL PRIMARY KEY,

View File

@@ -0,0 +1,23 @@
DROP TABLE IF EXISTS timestamps;
CREATE TABLE timestamps (
id INT PRIMARY KEY AUTO_INCREMENT,
create_dt DATETIME
) DEFAULT CHARSET UTF8;
SHOW CREATE TABLE timestamps;
Table Create Table
timestamps CREATE TABLE `timestamps` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_dt` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SET sql_mode='STRICT_TRANS_TABLES';
INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00");
ERROR 22003: Out of range value for column 'create_dt' at row 1
SET sql_mode=default;
SELECT * FROM timestamps;
id create_dt
INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00");
SELECT * FROM timestamps;
id create_dt
2 2015-06-17 00:00:00
DROP TABLE timestamps;

View File

@@ -0,0 +1,17 @@
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tags TEXT FLAGS='COLUMN_VECTOR'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE bugs;
Table Create Table
bugs CREATE TABLE `bugs` (
`id` int(10) unsigned NOT NULL,
`tags` text `FLAGS`='COLUMN_VECTOR',
PRIMARY KEY (`id`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create bugs TABLE_PAT_KEY UInt32
column_create bugs id COLUMN_SCALAR UInt32
column_create bugs tags COLUMN_VECTOR LongText
DROP TABLE bugs;

View File

@@ -0,0 +1,18 @@
CREATE TABLE tags (
name VARCHAR(64) PRIMARY KEY
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) COMMENT 'groonga_type "tags"'
) DEFAULT CHARSET=utf8;
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create tags TABLE_PAT_KEY ShortText
column_create tags name COLUMN_SCALAR ShortText
table_create bugs TABLE_PAT_KEY UInt32
column_create bugs id COLUMN_SCALAR UInt32
column_create bugs tag COLUMN_SCALAR tags
DROP TABLE bugs;
DROP TABLE tags;

View File

@@ -0,0 +1,6 @@
DROP TABLE IF EXISTS bugs;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"'
) DEFAULT CHARSET=utf8mb4;
ERROR HY000: unknown custom Groonga type name for <tag> column: <Nonexistent>

View File

@@ -0,0 +1,26 @@
CREATE TABLE tags (
name VARCHAR(64) PRIMARY KEY
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) GROONGA_TYPE='tags'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE bugs;
Table Create Table
bugs CREATE TABLE `bugs` (
`id` int(10) unsigned NOT NULL,
`tag` varchar(64) DEFAULT NULL `GROONGA_TYPE`='tags',
PRIMARY KEY (`id`),
CONSTRAINT `tag` FOREIGN KEY (`tag`) REFERENCES `test`.`tags` (`name`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create tags TABLE_PAT_KEY ShortText
column_create tags name COLUMN_SCALAR ShortText
table_create bugs TABLE_PAT_KEY UInt32
column_create bugs id COLUMN_SCALAR UInt32
column_create bugs tag COLUMN_SCALAR tags
DROP TABLE bugs;
DROP TABLE tags;

View File

@@ -0,0 +1,6 @@
DROP TABLE IF EXISTS bugs;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) COMMENT 'type "Nonexistent"'
) DEFAULT CHARSET=utf8mb4;
ERROR HY000: unknown custom Groonga type name for <tag> column: <Nonexistent>

View File

@@ -0,0 +1,9 @@
SET NAMES utf8;
CREATE TABLE memos (
content VARCHAR(64) NOT NULL,
FULLTEXT INDEX (content) COMMENT 'flags "WITH_POSITION|WITH_WEIGHT"'
) DEFAULT CHARSET=utf8;
SELECT mroonga_command("dump --dump_plugins no --dump_schema no");
mroonga_command("dump --dump_plugins no --dump_schema no")
column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content
DROP TABLE memos;

View File

@@ -1,7 +1,7 @@
SET NAMES utf8;
CREATE TABLE memos (
content VARCHAR(64) NOT NULL,
FULLTEXT INDEX (content) COMMENT 'index_flags "NONE"'
FULLTEXT INDEX (content) COMMENT 'flags "NONE"'
) DEFAULT CHARSET=utf8;
SELECT mroonga_command("dump --dump_plugins no --dump_schema no");
mroonga_command("dump --dump_plugins no --dump_schema no")

View File

@@ -0,0 +1,15 @@
SET NAMES utf8;
CREATE TABLE memos (
content VARCHAR(64) NOT NULL,
FULLTEXT INDEX (content) FLAGS='WITH_POSITION|WITH_WEIGHT'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE memos;
Table Create Table
memos CREATE TABLE `memos` (
`content` varchar(64) NOT NULL,
FULLTEXT KEY `content` (`content`) `FLAGS`='WITH_POSITION|WITH_WEIGHT'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no --dump_schema no");
mroonga_command("dump --dump_plugins no --dump_schema no")
column_create memos-content index COLUMN_INDEX|WITH_WEIGHT|WITH_POSITION memos content
DROP TABLE memos;

View File

@@ -0,0 +1,9 @@
SET NAMES utf8;
CREATE TABLE memos (
content VARCHAR(64) NOT NULL,
FULLTEXT INDEX (content) COMMENT 'index_flags "NONE"'
) DEFAULT CHARSET=utf8;
SELECT mroonga_command("dump --dump_plugins no --dump_schema no");
mroonga_command("dump --dump_plugins no --dump_schema no")
column_create memos-content index COLUMN_INDEX memos content
DROP TABLE memos;

View File

@@ -0,0 +1,21 @@
DROP TABLE IF EXISTS memos;
SET NAMES utf8;
CREATE TABLE memos (
id INT NOT NULL PRIMARY KEY,
content TEXT NOT NULL,
FULLTEXT INDEX (content) NORMALIZER='NormalizerAuto'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE memos;
Table Create Table
memos CREATE TABLE `memos` (
`id` int(11) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `content` (`content`) `NORMALIZER`='NormalizerAuto'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
INSERT INTO memos VALUES (1, "1日の消費㌍は約2000㌔㌍");
SELECT * FROM memos
WHERE MATCH (content) AGAINST ("+カロリー" IN BOOLEAN MODE);
id content
1 1日の消費㌍は約2000㌔㌍
DROP TABLE memos;

View File

@@ -0,0 +1,31 @@
DROP TABLE IF EXISTS diaries;
CREATE TABLE diaries (
id int PRIMARY KEY AUTO_INCREMENT,
body text,
FULLTEXT INDEX body_index (body)
COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"'
) DEFAULT CHARSET utf8;
SHOW CREATE TABLE diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
INSERT INTO diaries (body) VALUES ("will start Groonga!");
INSERT INTO diaries (body) VALUES ("starting Groonga...");
INSERT INTO diaries (body) VALUES ("started Groonga.");
SELECT * FROM diaries;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
SELECT * FROM diaries
WHERE MATCH(body) AGAINST("+start" IN BOOLEAN MODE)
ORDER BY id;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
DROP TABLE diaries;

View File

@@ -14,20 +14,20 @@ diaries CREATE TABLE `diaries` (
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8
insert into diaries (body) values ("will start groonga!");
insert into diaries (body) values ("starting groonga...");
insert into diaries (body) values ("started groonga.");
insert into diaries (body) values ("finished groonga.");
insert into diaries (body) values ("will start Groonga!");
insert into diaries (body) values ("starting Groonga...");
insert into diaries (body) values ("started Groonga.");
insert into diaries (body) values ("finished Groonga.");
select * from diaries;
id body
1 will start groonga!
2 starting groonga...
3 started groonga.
4 finished groonga.
select * from diaries where match(body) against("start");
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
4 finished Groonga.
select * from diaries where match(body) against("+start" IN BOOLEAN MODE) order by id;
id body
1 will start groonga!
2 starting groonga...
3 started groonga.
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
drop table diaries;
set global mroonga_default_parser=@mroonga_default_parser_backup;

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
SET NAMES utf8;
CREATE TABLE memos (

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
SET NAMES utf8;
CREATE TABLE memos (

View File

@@ -0,0 +1,23 @@
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
SET NAMES utf8;
CREATE TABLE memos (
content VARCHAR(64) NOT NULL,
FULLTEXT INDEX (content) TOKEN_FILTERS='TokenFilterStopWord,TokenFilterStopWord'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE memos;
Table Create Table
memos CREATE TABLE `memos` (
`content` varchar(64) NOT NULL,
FULLTEXT KEY `content` (`content`) `TOKEN_FILTERS`='TokenFilterStopWord,TokenFilterStopWord'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
SELECT mroonga_command("dump --dump_plugins no");
mroonga_command("dump --dump_plugins no")
table_create memos TABLE_NO_KEY
column_create memos content COLUMN_SCALAR ShortText
table_create memos-content TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerMySQLGeneralCI --token_filters TokenFilterStopWord,TokenFilterStopWord
column_create memos-content index COLUMN_INDEX|WITH_POSITION memos content
DROP TABLE memos;

View File

@@ -0,0 +1,31 @@
DROP TABLE IF EXISTS diaries;
CREATE TABLE diaries (
id int PRIMARY KEY AUTO_INCREMENT,
body text,
FULLTEXT INDEX body_index (body)
COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'
) DEFAULT CHARSET utf8;
SHOW CREATE TABLE diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`) COMMENT 'tokenizer "TokenBigramSplitSymbolAlphaDigit"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
INSERT INTO diaries (body) VALUES ("will start Groonga!");
INSERT INTO diaries (body) VALUES ("starting Groonga...");
INSERT INTO diaries (body) VALUES ("started Groonga.");
SELECT * FROM diaries;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
SELECT * FROM diaries
WHERE MATCH(body) AGAINST("+start" IN BOOLEAN MODE)
ORDER BY id;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
DROP TABLE diaries;

View File

@@ -0,0 +1,33 @@
drop table if exists diaries;
set @mroonga_default_tokenizer_backup=@@mroonga_default_tokenizer;
set global mroonga_default_tokenizer=TokenBigramSplitSymbolAlphaDigit;
create table diaries (
id int primary key auto_increment,
body text,
fulltext index body_index (body)
) default charset utf8;
show create table diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`)
) ENGINE=Mroonga DEFAULT CHARSET=utf8
insert into diaries (body) values ("will start Groonga!");
insert into diaries (body) values ("starting Groonga...");
insert into diaries (body) values ("started Groonga.");
insert into diaries (body) values ("finished Groonga.");
select * from diaries;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
4 finished Groonga.
select * from diaries where match(body) against("+start" IN BOOLEAN MODE) order by id;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
drop table diaries;
set global mroonga_default_tokenizer=@mroonga_default_tokenizer_backup;

View File

@@ -0,0 +1,42 @@
DROP TABLE IF EXISTS variables;
CREATE TABLE variables (
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
FULLTEXT INDEX (name) COMMENT 'tokenizer "off"'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE variables;
Table Create Table
variables CREATE TABLE `variables` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `name` (`name`) COMMENT 'tokenizer "off"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
INSERT INTO variables (name) VALUES ("mroonga_database_path_prefix");
INSERT INTO variables (name) VALUES ("mroonga_default_tokenizer");
INSERT INTO variables (name) VALUES ("mroonga_default_wrapper_engine");
INSERT INTO variables (name) VALUES ("mroonga_dry_write");
INSERT INTO variables (name) VALUES ("mroonga_enable_optimization");
INSERT INTO variables (name) VALUES ("mroonga_libgroonga_version");
INSERT INTO variables (name) VALUES ("mroonga_log_file");
INSERT INTO variables (name) VALUES ("mroonga_log_level");
INSERT INTO variables (name) VALUES ("mroonga_match_escalation_threshold");
INSERT INTO variables (name) VALUES ("mroonga_version");
SELECT * FROM variables;
id name
1 mroonga_database_path_prefix
2 mroonga_default_tokenizer
3 mroonga_default_wrapper_engine
4 mroonga_dry_write
5 mroonga_enable_optimization
6 mroonga_libgroonga_version
7 mroonga_log_file
8 mroonga_log_level
9 mroonga_match_escalation_threshold
10 mroonga_version
SELECT * FROM variables
WHERE MATCH (name) AGAINST ("mroonga_default*" IN BOOLEAN MODE);
id name
3 mroonga_default_wrapper_engine
2 mroonga_default_tokenizer
DROP TABLE variables;

View File

@@ -0,0 +1,30 @@
DROP TABLE IF EXISTS diaries;
CREATE TABLE diaries (
id int PRIMARY KEY AUTO_INCREMENT,
body text,
FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit'
) DEFAULT CHARSET utf8;
SHOW CREATE TABLE diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`) `TOKENIZER`='TokenBigramSplitSymbolAlphaDigit'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
INSERT INTO diaries (body) VALUES ("will start Groonga!");
INSERT INTO diaries (body) VALUES ("starting Groonga...");
INSERT INTO diaries (body) VALUES ("started Groonga.");
SELECT * FROM diaries;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
SELECT * FROM diaries
WHERE MATCH(body) AGAINST("+start" IN BOOLEAN MODE)
ORDER BY id;
id body
1 will start Groonga!
2 starting Groonga...
3 started Groonga.
DROP TABLE diaries;

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
CREATE TABLE terms (
term VARCHAR(64) NOT NULL PRIMARY KEY,

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
CREATE TABLE terms (
term VARCHAR(64) NOT NULL PRIMARY KEY,

View File

@@ -1,5 +1,5 @@
SELECT mroonga_command("register token_filters/stop_word");
mroonga_command("register token_filters/stop_word")
SELECT mroonga_command("plugin_register token_filters/stop_word");
mroonga_command("plugin_register token_filters/stop_word")
true
CREATE TABLE terms (
term VARCHAR(64) NOT NULL PRIMARY KEY,

View File

@@ -10,9 +10,10 @@ INSERT INTO memos VALUES ("Today is fine.");
INSERT INTO memos VALUES ("Tomorrow will be fine.");
INSERT INTO memos VALUES ("Yesterday was fine.");
SELECT * FROM memos
WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE);
WHERE MATCH (content) AGAINST ("*DOR today good" IN BOOLEAN MODE)
ORDER BY content;
content
Today is good day.
Today is fine.
Today is good day.
Tomorrow will be good day.
DROP TABLE memos;

View File

@@ -10,9 +10,10 @@ INSERT INTO memos VALUES ("Today is fine.");
INSERT INTO memos VALUES ("Tomorrow will be fine.");
INSERT INTO memos VALUES ("Yesterday was fine.");
SELECT * FROM memos
WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE);
WHERE MATCH (content) AGAINST ("*DOR today -good tomorrow" IN BOOLEAN MODE)
ORDER BY content;
content
Tomorrow will be good day.
Today is fine.
Tomorrow will be fine.
Tomorrow will be good day.
DROP TABLE memos;

View File

@@ -10,9 +10,10 @@ INSERT INTO memos VALUES ("Today is fine.");
INSERT INTO memos VALUES ("Tomorrow will be fine.");
INSERT INTO memos VALUES ("Yesterday was fine.");
SELECT * FROM memos
WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE);
WHERE MATCH (content) AGAINST ("*DOR today +good tomorrow" IN BOOLEAN MODE)
ORDER BY content;
content
Today is good day.
Tomorrow will be good day.
Tomorrow will be fine.
Tomorrow will be good day.
DROP TABLE memos;

View File

@@ -0,0 +1,14 @@
DROP TABLE IF EXISTS memos;
SET NAMES utf8;
CREATE TABLE memos (
content TEXT,
FULLTEXT INDEX (content)
) DEFAULT CHARSET=utf8;
INSERT INTO memos VALUES ("Today is good day.");
INSERT INTO memos VALUES ("Tomorrow will be good day.");
INSERT INTO memos VALUES ("Today is fine.");
SELECT * FROM memos
WHERE MATCH (content) AGAINST ("*D+ today fi*" IN BOOLEAN MODE);
content
Today is fine.
DROP TABLE memos;

View File

@@ -18,21 +18,21 @@ c1 c2 c3
6 20 ka ki ku ke ko
7 20 aa ii uu ee oo
8 20 ka ki ku ke ko
select * from t1 where match(c3) against("uu");
select * from t1 where match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
1 10 aa ii uu ee oo
3 10 aa ii uu ee oo
5 20 aa ii uu ee oo
7 20 aa ii uu ee oo
select * from t1 where not match(c3) against("uu");
select * from t1 where not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
2 10 ka ki ku ke ko
4 10 ka ki ku ke ko
6 20 ka ki ku ke ko
8 20 ka ki ku ke ko
select * from t1 where match(c3) against("dummy");
select * from t1 where match(c3) against("+dummy" in boolean mode) order by c1;
c1 c2 c3
select * from t1 where not match(c3) against("dummy");
select * from t1 where not match(c3) against("+dummy" in boolean mode) order by c1;
c1 c2 c3
1 10 aa ii uu ee oo
2 10 ka ki ku ke ko
@@ -42,26 +42,26 @@ c1 c2 c3
6 20 ka ki ku ke ko
7 20 aa ii uu ee oo
8 20 ka ki ku ke ko
select * from t1 where c1 = 4 and not match(c3) against("uu");
select * from t1 where c1 = 4 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
4 10 ka ki ku ke ko
select * from t1 where c1 <= 4 and not match(c3) against("uu");
select * from t1 where c1 <= 4 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
2 10 ka ki ku ke ko
4 10 ka ki ku ke ko
select * from t1 where c1 > 4 and not match(c3) against("uu");
select * from t1 where c1 > 4 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
6 20 ka ki ku ke ko
8 20 ka ki ku ke ko
select * from t1 where c2 = 10 and not match(c3) against("uu");
select * from t1 where c2 = 10 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
2 10 ka ki ku ke ko
4 10 ka ki ku ke ko
select * from t1 where c2 >= 15 and not match(c3) against("uu");
select * from t1 where c2 >= 15 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
6 20 ka ki ku ke ko
8 20 ka ki ku ke ko
select * from t1 where c2 < 15 and not match(c3) against("uu");
select * from t1 where c2 < 15 and not match(c3) against("+uu" in boolean mode) order by c1;
c1 c2 c3
2 10 ka ki ku ke ko
4 10 ka ki ku ke ko

View File

@@ -1,29 +0,0 @@
drop table if exists diaries;
create table diaries (
id int primary key auto_increment,
body text,
fulltext index body_index (body)
comment 'parser "TokenBigramSplitSymbolAlphaDigit"'
) default charset utf8;
show create table diaries;
Table Create Table
diaries CREATE TABLE `diaries` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`body` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `body_index` (`body`) COMMENT 'parser "TokenBigramSplitSymbolAlphaDigit"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8
insert into diaries (body) values ("will start groonga!");
insert into diaries (body) values ("starting groonga...");
insert into diaries (body) values ("started groonga.");
select * from diaries;
id body
1 will start groonga!
2 starting groonga...
3 started groonga.
select * from diaries where match(body) against("start");
id body
1 will start groonga!
2 starting groonga...
3 started groonga.
drop table diaries;

View File

@@ -0,0 +1,21 @@
DROP TABLE IF EXISTS ranges;
CREATE TABLE ranges (
id int PRIMARY KEY,
start datetime,
end datetime,
UNIQUE KEY range_key(start, end)
);
INSERT INTO ranges VALUES (1, "1990-00-00 00:00:00", "2012-10-05 23:59:59");
Warnings:
Warning 1265 Data truncated for column 'start' at row 1
SELECT * FROM ranges;
id start end
1 1990-01-01 00:00:00 2012-10-05 23:59:59
DELETE FROM ranges WHERE id = 1;
INSERT INTO ranges VALUES (1, "1990-00-00 00:00:00", "2012-10-05 23:59:59");
Warnings:
Warning 1265 Data truncated for column 'start' at row 1
SELECT * FROM ranges;
id start end
1 1990-01-01 00:00:00 2012-10-05 23:59:59
DROP TABLE ranges;

View File

@@ -31,7 +31,8 @@ SELECT v.id, v.video_id, v.description, NULL
FROM videos_master AS v
WHERE v.video_id = (video_id);
SELECT *, MATCH(description) AGAINST("my") FROM videos_groonga
WHERE MATCH(description) AGAINST("my");
WHERE MATCH(description) AGAINST("my")
ORDER BY id;
id video_id description tags_unpack MATCH(description) AGAINST("my")
1 video-1 My Familly 209716
2 video-2 My Cat 209716

View File

@@ -6,5 +6,5 @@ content text,
FULLTEXT INDEX (content)
) DEFAULT CHARSET=utf8;
REPLACE INTO diaries(content) VALUES("Hello");
ERROR HY000: primary key is empty
Got one of the listed errors
DROP TABLE diaries;

View File

@@ -31,15 +31,18 @@ id year month day title content
1 2011 11 9 Hello 今日からはじめました。
2 2011 11 10 天気 明日の富士山の天気について
3 2011 11 11 富士山 今日も天気がよくてきれいに見える。
SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
SELECT * FROM diaries
WHERE MATCH(content) AGAINST("+今日" IN BOOLEAN MODE)
ORDER BY id;
id year month day title content
1 2011 11 9 Hello 今日からはじめました。
3 2011 11 11 富士山 今日も天気がよくてきれいに見える。
2 2011 11 10 天気 明日の富士山の天気について
TRUNCATE TABLE diaries;
SELECT * FROM diaries;
id year month day title content
SELECT * FROM diaries WHERE MATCH(content) AGAINST("今日 天気" IN BOOLEAN MODE);
SELECT * FROM diaries
WHERE MATCH(content) AGAINST("+今日" IN BOOLEAN MODE)
ORDER BY id;
id year month day title content
INSERT INTO diaries VALUES(1, 2011, 11, 11, "帰り道", "つかれたー");
INSERT INTO diaries VALUES(2, 2011, 12, 1, "久しぶり", "天気が悪いからずっと留守番。");
@@ -49,7 +52,9 @@ id year month day title content
1 2011 11 11 帰り道 つかれたー
2 2011 12 1 久しぶり 天気が悪いからずっと留守番。
3 2011 12 2 初雪 今年はじめての雪!
SELECT * FROM diaries WHERE MATCH(content) AGAINST("悪い" IN BOOLEAN MODE);
SELECT * FROM diaries
WHERE MATCH(content) AGAINST("+悪い" IN BOOLEAN MODE)
ORDER BY id;
id year month day title content
2 2011 12 1 久しぶり 天気が悪いからずっと留守番。
DROP TABLE diaries;

View File

@@ -5,11 +5,6 @@ package My::Suite::Mroonga;
return "No Mroonga engine" unless $ENV{HA_MROONGA_SO} or
$::mysqld_variables{'mroonga'} eq "ON";
# RECOMPILE_FOR_EMBEDDED also means that a plugin
# cannot be dynamically loaded into embedded
return "Not run for embedded server" if $::opt_embedded_server and
$ENV{HA_MROONGA_SO};
sub is_default { 1 }
my $groonga_normalizer_mysql_dir=$::basedir . '/storage/mroonga/vendor/groonga/vendor/plugins/groonga-normalizer-mysql';

View File

@@ -0,0 +1,41 @@
# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mariadb.inc
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE tags (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE tags ADD COLUMN name VARCHAR(64) FLAGS='COLUMN_VECTOR';
SHOW CREATE TABLE tags;
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE tags;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,44 @@
# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE bugs ADD COLUMN name VARCHAR(64) COMMENT 'groonga_type "tags"';
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE bugs;
DROP TABLE tags;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,47 @@
# Copyright(C) 2014 Kenji Maruyama <mmmaru777@gmail.com>
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mariadb.inc
--source ../../include/mroonga/have_version_56_or_later.inc
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE tags (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY
) DEFAULT CHARSET=utf8;
ALTER TABLE bugs ADD COLUMN name VARCHAR(64) GROONGA_TYPE='tags';
SHOW CREATE TABLE bugs;
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE bugs;
DROP TABLE tags;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -15,6 +15,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/have_groonga_plugin_register.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
@@ -23,7 +24,7 @@ CREATE DATABASE test;
USE test;
--enable_query_log
SELECT mroonga_command("register token_filters/stop_word");
SELECT mroonga_command("plugin_register token_filters/stop_word");
SET NAMES utf8;

View File

@@ -15,6 +15,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/have_groonga_plugin_register.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
@@ -23,7 +24,7 @@ CREATE DATABASE test;
USE test;
--enable_query_log
SELECT mroonga_command("register token_filters/stop_word");
SELECT mroonga_command("plugin_register token_filters/stop_word");
CREATE TABLE terms (
term VARCHAR(64) NOT NULL PRIMARY KEY,

View File

@@ -0,0 +1,41 @@
# Copyright(C) 2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mroonga.inc
--disable_warnings
DROP TABLE IF EXISTS timestamps;
--enable_warnings
CREATE TABLE timestamps (
id INT PRIMARY KEY AUTO_INCREMENT,
create_dt DATETIME
) DEFAULT CHARSET UTF8;
SHOW CREATE TABLE timestamps;
SET sql_mode='STRICT_TRANS_TABLES';
--error ER_WARN_DATA_OUT_OF_RANGE
INSERT INTO timestamps (create_dt) VALUES ("0000-00-00 00:00:00");
SET sql_mode=default;
SELECT * FROM timestamps;
INSERT INTO timestamps (create_dt) VALUES ("2015-06-17 00:00:00");
SELECT * FROM timestamps;
DROP TABLE timestamps;
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,39 @@
# Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mariadb.inc
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tags TEXT FLAGS='COLUMN_VECTOR'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE bugs;
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE bugs;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,42 @@
# Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE tags (
name VARCHAR(64) PRIMARY KEY
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) COMMENT 'groonga_type "tags"'
) DEFAULT CHARSET=utf8;
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE bugs;
DROP TABLE tags;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,29 @@
# Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mroonga.inc
--disable_warnings
DROP TABLE IF EXISTS bugs;
--enable_warnings
--error ER_CANT_CREATE_TABLE
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) COMMENT 'groonga_type "Nonexistent"'
) DEFAULT CHARSET=utf8mb4;
--source ../../include/mroonga/have_mroonga_deinit.inc

View File

@@ -0,0 +1,45 @@
# Copyright(C) 2013-2015 Kouhei Sutou <kou@clear-code.com>
#
# 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
--source ../../include/mroonga/have_mariadb.inc
--source ../../include/mroonga/have_version_56_or_later.inc
--source include/not_embedded.inc
--source ../../include/mroonga/have_mroonga.inc
--source ../../include/mroonga/load_mroonga_functions.inc
--disable_query_log
DROP DATABASE test;
CREATE DATABASE test;
USE test;
--enable_query_log
CREATE TABLE tags (
name VARCHAR(64) PRIMARY KEY
) DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE bugs (
id INT UNSIGNED PRIMARY KEY,
tag VARCHAR(64) GROONGA_TYPE='tags'
) DEFAULT CHARSET=utf8;
SHOW CREATE TABLE bugs;
SELECT mroonga_command("dump --dump_plugins no");
DROP TABLE bugs;
DROP TABLE tags;
--source ../../include/mroonga/unload_mroonga_functions.inc
--source ../../include/mroonga/have_mroonga_deinit.inc

Some files were not shown because too many files have changed in this diff Show More