おはようございます。かとうです。
MariaDB 10.6.4 との組み合わせでビルドできるようにするパッチを
作成しました。このパッチを適用すると MariaDB 10.6 以外でビルドで
きなくなってしまうため、マージできるようにするにはバージョンによ
りマクロ定義を行う等の作業が必要になりますが、そこまで手が回りま
せんでした。
--
__________________________________________________
_/_/ Tomohiro "Tomo-p" KATO <tomop****@teamg*****>
_/_/ Team Gedoh Network https://www.teamgedoh.net/
_/_/ Key fingerprint: 3347 89D9 5B87 29E6 33A2 30C1 B12F A313 30C4 13F0
-------------- next part --------------
diff --git a/ha_mroonga.cpp b/ha_mroonga.cpp
index 664de306..a9d6a2b4 100644
--- a/ha_mroonga.cpp
+++ b/ha_mroonga.cpp
@@ -11197,15 +11197,15 @@ bool ha_mroonga::check_fast_order_limit(grn_obj *result_set,
table_list->get_table_name()) == 0 &&
query_block->order_list.elements &&
MRN_QUERY_BLOCK_HAS_LIMIT(query_block) &&
- query_block->select_limit &&
- query_block->select_limit->val_int() > 0
+ query_block->limit_params.select_limit &&
+ query_block->limit_params.select_limit->val_int() > 0
) {
- if (query_block->offset_limit) {
- *limit = query_block->offset_limit->val_int();
+ if (query_block->limit_params.offset_limit) {
+ *limit = query_block->limit_params.offset_limit->val_int();
} else {
*limit = 0;
}
- *limit += query_block->select_limit->val_int();
+ *limit += query_block->limit_params.select_limit->val_int();
if (*limit > (longlong)INT_MAX) {
GRN_LOG(ctx, GRN_LOG_DEBUG,
"%s[false] too long limit: %lld <= %d is required",
@@ -12630,7 +12630,7 @@ void ha_mroonga::storage_store_fields_by_index(uchar *buf)
case MYSQL_TYPE_VAR_STRING:
case MYSQL_TYPE_STRING:
// Text values in index may be normalized.
- if (strcmp(key_info->key_part[i].field->charset()->csname,
+ if (strcmp(key_info->key_part[i].field->charset()->cs_name.str,
"binary") != 0) {
storage_store_fields(buf, record_id);
DBUG_VOID_RETURN;
diff --git a/lib/mrn_condition_converter.cpp b/lib/mrn_condition_converter.cpp
index e9e90278..d8274ce9 100644
--- a/lib/mrn_condition_converter.cpp
+++ b/lib/mrn_condition_converter.cpp
@@ -330,7 +330,7 @@ namespace mrn {
"mixed charset isn't supported: <%.*s>: <%s>",
MRN_ITEM_FIELD_GET_NAME_LENGTH(field_item),
MRN_ITEM_FIELD_GET_NAME(field_item),
- field_item->field->charset()->csname);
+ field_item->field->charset()->cs_name.str);
DBUG_RETURN(false);
}
encodings.push_back(encoding);
@@ -1015,7 +1015,7 @@ namespace mrn {
&errors);
query = &converted_query_buffer;
}
- if (match_item->flags & FT_BOOL) {
+ if (match_item->match_flags & FT_BOOL) {
grn_obj *match_columns;
grn_obj *match_columns_variable;
GRN_EXPR_CREATE_FOR_QUERY(ctx_,
diff --git a/lib/mrn_encoding.cpp b/lib/mrn_encoding.cpp
index 7388fa39..4d4c15c0 100644
--- a/lib/mrn_encoding.cpp
+++ b/lib/mrn_encoding.cpp
@@ -42,50 +42,50 @@ namespace mrn {
{
if (!cs[0])
continue;
- if (!strcmp(cs[0]->csname, "utf8"))
+ if (!strcmp(cs[0]->cs_name.str, "utf8") || !strcmp(cs[0]->cs_name.str, "utf8mb3"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_utf8)
mrn_charset_utf8 = cs[0];
else if (mrn_charset_utf8->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "utf8mb4"))
+ if (!strcmp(cs[0]->cs_name.str, "utf8mb4"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_utf8mb4)
mrn_charset_utf8mb4 = cs[0];
else if (mrn_charset_utf8mb4->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "binary"))
+ if (!strcmp(cs[0]->cs_name.str, "binary"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_binary)
mrn_charset_binary = cs[0];
else if (mrn_charset_binary->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "ascii"))
+ if (!strcmp(cs[0]->cs_name.str, "ascii"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_ascii)
mrn_charset_ascii = cs[0];
else if (mrn_charset_ascii->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "latin1"))
+ if (!strcmp(cs[0]->cs_name.str, "latin1"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_latin1_1)
mrn_charset_latin1_1 = cs[0];
else if (mrn_charset_latin1_1->cset != cs[0]->cset)
@@ -97,50 +97,50 @@ namespace mrn {
}
continue;
}
- if (!strcmp(cs[0]->csname, "cp932"))
+ if (!strcmp(cs[0]->cs_name.str, "cp932"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_cp932)
mrn_charset_cp932 = cs[0];
else if (mrn_charset_cp932->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "sjis"))
+ if (!strcmp(cs[0]->cs_name.str, "sjis"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_sjis)
mrn_charset_sjis = cs[0];
else if (mrn_charset_sjis->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "eucjpms"))
+ if (!strcmp(cs[0]->cs_name.str, "eucjpms"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_eucjpms)
mrn_charset_eucjpms = cs[0];
else if (mrn_charset_eucjpms->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "ujis"))
+ if (!strcmp(cs[0]->cs_name.str, "ujis"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_ujis)
mrn_charset_ujis = cs[0];
else if (mrn_charset_ujis->cset != cs[0]->cset)
assert(0);
continue;
}
- if (!strcmp(cs[0]->csname, "koi8r"))
+ if (!strcmp(cs[0]->cs_name.str, "koi8r"))
{
DBUG_PRINT("info", ("mroonga: %s is %s [%p]",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
if (!mrn_charset_koi8r)
mrn_charset_koi8r = cs[0];
else if (mrn_charset_koi8r->cset != cs[0]->cset)
@@ -148,7 +148,7 @@ namespace mrn {
continue;
}
DBUG_PRINT("info", ("mroonga: %s[%s][%p] is not supported",
- cs[0]->name, cs[0]->csname, cs[0]->cset));
+ cs[0]->coll_name.str, cs[0]->cs_name.str, cs[0]->cset));
}
DBUG_VOID_RETURN;
}
@@ -161,8 +161,8 @@ namespace mrn {
const char *name = "<null>";
const char *csname = "<null>";
if (charset) {
- name = charset->name;
- csname = charset->csname;
+ name = charset->coll_name.str;
+ csname = charset->cs_name.str;
}
error = ER_MRN_CHARSET_NOT_SUPPORT_NUM;
my_printf_error(error,
diff --git a/lib/mrn_field_normalizer.cpp b/lib/mrn_field_normalizer.cpp
index fd75377e..e70a004c 100644
--- a/lib/mrn_field_normalizer.cpp
+++ b/lib/mrn_field_normalizer.cpp
@@ -45,9 +45,9 @@ namespace mrn {
DBUG_PRINT("info",
("mroonga: result_type = %u", field_->result_type()));
DBUG_PRINT("info",
- ("mroonga: charset->name = %s", field_->charset()->name));
+ ("mroonga: charset->name = %s", field_->charset()->coll_name.str));
DBUG_PRINT("info",
- ("mroonga: charset->csname = %s", field_->charset()->csname));
+ ("mroonga: charset->csname = %s", field_->charset()->cs_name.str));
DBUG_PRINT("info",
("mroonga: charset->state = %u", field_->charset()->state));
bool need_normalize_p;
@@ -141,29 +141,32 @@ namespace mrn {
const char *normalizer_name = NULL;
const char *normalizer_spec = NULL;
const char *default_normalizer_name = "NormalizerAuto";
- if ((strcmp(charset_info->name, "utf8_general_ci") == 0) ||
- (strcmp(charset_info->name, "utf8mb4_general_ci") == 0)) {
+ if ((strcmp(charset_info->coll_name.str, "utf8_general_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb3_general_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb4_general_ci") == 0)) {
normalizer_name = normalizer_spec = "NormalizerMySQLGeneralCI";
- } else if ((strcmp(charset_info->name, "utf8_unicode_ci") == 0) ||
- (strcmp(charset_info->name, "utf8mb4_unicode_ci") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8_unicode_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb3_unicode_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb4_unicode_ci") == 0)) {
normalizer_name = normalizer_spec = "NormalizerMySQLUnicodeCI";
- } else if ((strcmp(charset_info->name, "utf8_unicode_520_ci") == 0) ||
- (strcmp(charset_info->name, "utf8mb4_unicode_520_ci") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8_unicode_520_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb3_unicode_520_ci") == 0) ||
+ (strcmp(charset_info->coll_name.str, "utf8mb4_unicode_520_ci") == 0)) {
normalizer_name = normalizer_spec = "NormalizerMySQLUnicode520CI";
- } else if ((strcmp(charset_info->name, "utf8mb4_0900_ai_ci") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8mb4_0900_ai_ci") == 0)) {
normalizer_name = "NormalizerMySQLUnicode900";
normalizer_spec = "NormalizerMySQLUnicode900('weight_level', 1)";
- } else if ((strcmp(charset_info->name, "utf8mb4_0900_as_ci") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8mb4_0900_as_ci") == 0)) {
normalizer_name = "NormalizerMySQLUnicode900";
normalizer_spec = "NormalizerMySQLUnicode900('weight_level', 2)";
- } else if ((strcmp(charset_info->name, "utf8mb4_0900_as_cs") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8mb4_0900_as_cs") == 0)) {
normalizer_name = "NormalizerMySQLUnicode900";
normalizer_spec = "NormalizerMySQLUnicode900('weight_level', 3)";
- } else if ((strcmp(charset_info->name, "utf8mb4_ja_0900_as_cs") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8mb4_ja_0900_as_cs") == 0)) {
normalizer_name = "NormalizerMySQLUnicode900";
normalizer_spec =
"NormalizerMySQLUnicode900('locale', 'ja', 'weight_level', 3)";
- } else if ((strcmp(charset_info->name, "utf8mb4_ja_0900_as_cs_ks") == 0)) {
+ } else if ((strcmp(charset_info->coll_name.str, "utf8mb4_ja_0900_as_cs_ks") == 0)) {
normalizer_name = "NormalizerMySQLUnicode900";
normalizer_spec =
"NormalizerMySQLUnicode900('locale', 'ja', 'weight_level', 4)";
@@ -177,7 +180,7 @@ namespace mrn {
"Install groonga-normalizer-mysql normalizer. "
"%s is used as fallback.",
normalizer_name,
- charset_info->name,
+ charset_info->coll_name.str,
default_normalizer_name);
push_warning(thread_, MRN_SEVERITY_WARNING,
HA_ERR_UNSUPPORTED, error_message);
diff --git a/mrn_mysql_compat.h b/mrn_mysql_compat.h
index 1eb7c98c..7c74454c 100644
--- a/mrn_mysql_compat.h
+++ b/mrn_mysql_compat.h
@@ -475,7 +475,7 @@ typedef uint mrn_srid;
(query_block->has_limit())
#else
# define MRN_QUERY_BLOCK_HAS_LIMIT(query_block) \
- (query_block->explicit_limit)
+ (query_block->limit_params.explicit_limit)
#endif
#if defined(MRN_MARIADB_P) && MYSQL_VERSION_ID >= 100000
diff --git a/udf/mrn_udf_snippet.cpp b/udf/mrn_udf_snippet.cpp
index 84a5736b..ec943045 100644
--- a/udf/mrn_udf_snippet.cpp
+++ b/udf/mrn_udf_snippet.cpp
@@ -79,7 +79,7 @@ static mrn_bool mrn_snippet_prepare(st_mrn_snip_info *snip_info, UDF_ARGS *args,
}
if (!mrn::encoding::set_raw(ctx, cs)) {
snprintf(message, MYSQL_ERRMSG_SIZE,
- "Unsupported charset: <%s>", cs->name);
+ "Unsupported charset: <%s>", cs->coll_name.str);
goto error;
}