[groonga-dev,04880] MariaDB 10.6対応

Back to archive index
Tomohiro 'Tomo-p' KATO tomop****@teamg*****
2021年 8月 7日 (土) 07:53:05 JST


 おはようございます。かとうです。

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


groonga-dev メーリングリストの案内
Back to archive index