diff options
Diffstat (limited to 'strings')
31 files changed, 962 insertions, 736 deletions
diff --git a/strings/CHARSET_INFO.txt b/strings/CHARSET_INFO.txt index 6f0a810be37..922a372495b 100644 --- a/strings/CHARSET_INFO.txt +++ b/strings/CHARSET_INFO.txt @@ -129,7 +129,7 @@ In all Asian charsets these arrays are set up as follows: In Unicode character sets we have full support of UPPER/LOWER mapping, for sorting order, and for character type detection. -"utf8_general_ci" still has the "old-fashioned" arrays +"utf8mb3_general_ci" still has the "old-fashioned" arrays like to_upper, to_lower, sort_order and ctype, but they are not really used (maybe only in some rare legacy functions). diff --git a/strings/CMakeLists.txt b/strings/CMakeLists.txt index 60f5b409bfb..0e62f9e34ad 100644 --- a/strings/CMakeLists.txt +++ b/strings/CMakeLists.txt @@ -32,7 +32,8 @@ ENDIF() # Avoid dependencies on perschema data defined in mysys ADD_DEFINITIONS(-DDISABLE_MYSQL_THREAD_H) ADD_CONVENIENCE_LIBRARY(strings ${STRINGS_SOURCES}) - +TARGET_LINK_LIBRARIES(strings dbug mysys) +MAYBE_DISABLE_IPO(strings) ADD_EXECUTABLE(conf_to_src EXCLUDE_FROM_ALL conf_to_src.c) SET_TARGET_PROPERTIES(conf_to_src PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD TRUE) TARGET_LINK_LIBRARIES(conf_to_src mysys strings) diff --git a/strings/ctype-big5.c b/strings/ctype-big5.c index 91d48a36c96..b12da023604 100644 --- a/strings/ctype-big5.c +++ b/strings/ctype-big5.c @@ -32,6 +32,8 @@ #ifdef HAVE_CHARSET_big5 +const char charset_name_big5[]= "big5"; + /* Support for Chinese(BIG5) characters, by jou@nematic.ieo.nctu.edu.tw CP950 and HKSCS additional characters are also accepted. @@ -6804,13 +6806,14 @@ static MY_CHARSET_HANDLER my_charset_big5_handler= my_well_formed_char_length_big5, my_copy_fix_mb, my_native_to_mb_big5, + my_wc_to_printable_generic }; struct charset_info_st my_charset_big5_chinese_ci= { 1,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "big5", /* cs name */ + charset_name_big5, /* cs name */ "big5_chinese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -6843,7 +6846,7 @@ struct charset_info_st my_charset_big5_bin= { 84,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "big5", /* cs name */ + charset_name_big5, /* cs name */ "big5_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -6876,7 +6879,7 @@ struct charset_info_st my_charset_big5_chinese_nopad_ci= { MY_NOPAD_ID(1),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */ - "big5", /* cs name */ + charset_name_big5, /* cs name */ "big5_chinese_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -6909,7 +6912,7 @@ struct charset_info_st my_charset_big5_nopad_bin= { MY_NOPAD_ID(84),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "big5", /* cs name */ + charset_name_big5, /* cs name */ "big5_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index 2893aadd99f..a8420722f25 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -23,6 +23,8 @@ #include "strings_def.h" #include <m_ctype.h> +const char charset_name_binary[]= "binary"; + static const uchar ctype_bin[]= { 0, @@ -585,6 +587,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_8bit, my_copy_8bit, my_wc_mb_bin, + my_wc_to_printable_generic }; @@ -592,7 +595,7 @@ struct charset_info_st my_charset_bin = { 63,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_PRIMARY|MY_CS_NOPAD,/* state */ - "binary", /* cs name */ + charset_name_binary, /* cs name */ "binary", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c index aeca63a86f9..5196a21ebeb 100644 --- a/strings/ctype-cp932.c +++ b/strings/ctype-cp932.c @@ -22,6 +22,7 @@ #ifdef HAVE_CHARSET_cp932 +const char charset_name_cp932[]= "cp932"; /* * This comment is parsed by configure to create ctype.c, @@ -34760,6 +34761,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_cp932, my_copy_fix_mb, my_native_to_mb_cp932, + my_wc_to_printable_generic }; @@ -34767,8 +34769,8 @@ struct charset_info_st my_charset_cp932_japanese_ci= { 95,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "cp932", /* cs name */ - "cp932_japanese_ci", /* name */ + charset_name_cp932, /* cs name */ + "cp932_japanese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ ctype_cp932, @@ -34799,8 +34801,8 @@ struct charset_info_st my_charset_cp932_bin= { 96,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "cp932", /* cs name */ - "cp932_bin", /* name */ + charset_name_cp932, /* cs name */ + "cp932_bin", /* name */ "", /* comment */ NULL, /* tailoring */ ctype_cp932, @@ -34832,7 +34834,7 @@ struct charset_info_st my_charset_cp932_japanese_nopad_ci= { MY_NOPAD_ID(95),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */ - "cp932", /* cs name */ + charset_name_cp932, /* cs name */ "cp932_japanese_nopad_ci",/* name */ "", /* comment */ NULL, /* tailoring */ @@ -34864,7 +34866,7 @@ struct charset_info_st my_charset_cp932_nopad_bin= { MY_NOPAD_ID(96),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "cp932", /* cs name */ + charset_name_cp932, /* cs name */ "cp932_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index 33d43d4dd4e..74ac4fc1494 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -626,7 +626,7 @@ struct charset_info_st my_charset_latin2_czech_ci = 2,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT| MY_CS_STRNXFRM_BAD_NWEIGHTS|MY_CS_NON1TO1, /* state */ - "latin2", /* cs name */ + charset_name_latin2, /* cs name */ "latin2_czech_cs", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-euc_kr.c b/strings/ctype-euc_kr.c index 62e42f2f942..54fae4de0c0 100644 --- a/strings/ctype-euc_kr.c +++ b/strings/ctype-euc_kr.c @@ -31,6 +31,7 @@ #ifdef HAVE_CHARSET_euckr +const char charset_name_euckr[]= "euckr"; static const uchar ctype_euc_kr[257] = { @@ -10050,6 +10051,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_euckr, my_copy_fix_mb, my_native_to_mb_euckr, + my_wc_to_printable_generic }; @@ -10057,7 +10059,7 @@ struct charset_info_st my_charset_euckr_korean_ci= { 19,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "euckr", /* cs name */ + charset_name_euckr, /* cs name */ "euckr_korean_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -10090,7 +10092,7 @@ struct charset_info_st my_charset_euckr_bin= { 85,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "euckr", /* cs name */ + charset_name_euckr, /* cs name */ "euckr_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -10123,7 +10125,7 @@ struct charset_info_st my_charset_euckr_korean_nopad_ci= { MY_NOPAD_ID(19),0,0,/* number */ MY_CS_COMPILED|MY_CS_NOPAD, /* state */ - "euckr", /* cs name */ + charset_name_euckr, /* cs name */ "euckr_korean_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -10156,7 +10158,7 @@ struct charset_info_st my_charset_euckr_nopad_bin= { MY_NOPAD_ID(85),0,0,/* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "euckr", /* cs name */ + charset_name_euckr, /* cs name */ "euckr_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c index f61e02697a6..27e2d1cbae6 100644 --- a/strings/ctype-eucjpms.c +++ b/strings/ctype-eucjpms.c @@ -33,6 +33,8 @@ ctype-ujis.c file. #ifdef HAVE_CHARSET_eucjpms +const char charset_name_eucjpms[]= "eucjpms"; + static const uchar ctype_eucjpms[257] = { @@ -67588,6 +67590,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_eucjpms, my_copy_fix_mb, my_native_to_mb_eucjpms, + my_wc_to_printable_generic }; @@ -67596,7 +67599,7 @@ struct charset_info_st my_charset_eucjpms_japanese_ci= { 97,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "eucjpms", /* cs name */ + charset_name_eucjpms, /* cs name */ "eucjpms_japanese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67629,7 +67632,7 @@ struct charset_info_st my_charset_eucjpms_bin= { 98,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "eucjpms", /* cs name */ + charset_name_eucjpms, /* cs name */ "eucjpms_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67662,7 +67665,7 @@ struct charset_info_st my_charset_eucjpms_japanese_nopad_ci= { MY_NOPAD_ID(97),0,0, /* number */ MY_CS_COMPILED|MY_CS_NOPAD,/* state */ - "eucjpms", /* cs name */ + charset_name_eucjpms, /* cs name */ "eucjpms_japanese_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67695,7 +67698,7 @@ struct charset_info_st my_charset_eucjpms_nopad_bin= { MY_NOPAD_ID(98),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "eucjpms", /* cs name */ + charset_name_eucjpms, /* cs name */ "eucjpms_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-gb2312.c b/strings/ctype-gb2312.c index f3a8a23bf18..a96931e0ba4 100644 --- a/strings/ctype-gb2312.c +++ b/strings/ctype-gb2312.c @@ -29,6 +29,8 @@ #ifdef HAVE_CHARSET_gb2312 +const char charset_name_gb2312[]= "gb2312"; + static const uchar ctype_gb2312[257] = { 0, /* For standard library */ @@ -6455,6 +6457,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_gb2312, my_copy_fix_mb, my_native_to_mb_gb2312, + my_wc_to_printable_generic }; @@ -6462,7 +6465,7 @@ struct charset_info_st my_charset_gb2312_chinese_ci= { 24,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "gb2312", /* cs name */ + charset_name_gb2312, /* cs name */ "gb2312_chinese_ci",/* name */ "", /* comment */ NULL, /* tailoring */ @@ -6495,7 +6498,7 @@ struct charset_info_st my_charset_gb2312_bin= { 86,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "gb2312", /* cs name */ + charset_name_gb2312, /* cs name */ "gb2312_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -6528,7 +6531,7 @@ struct charset_info_st my_charset_gb2312_chinese_nopad_ci= { MY_NOPAD_ID(24),0,0,/* number */ MY_CS_COMPILED|MY_CS_NOPAD, /* state */ - "gb2312", /* cs name */ + charset_name_gb2312, /* cs name */ "gb2312_chinese_nopad_ci",/* name */ "", /* comment */ NULL, /* tailoring */ @@ -6561,7 +6564,7 @@ struct charset_info_st my_charset_gb2312_nopad_bin= { MY_NOPAD_ID(86),0,0,/* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "gb2312", /* cs name */ + charset_name_gb2312, /* cs name */ "gb2312_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-gbk.c b/strings/ctype-gbk.c index 7d6488f727b..865d3bbc5df 100644 --- a/strings/ctype-gbk.c +++ b/strings/ctype-gbk.c @@ -31,6 +31,7 @@ #ifdef HAVE_CHARSET_gbk +const char charset_name_gbk[]= "gbk"; /* Support for Chinese(GBK) characters, by hewei@mail.ied.ac.cn */ @@ -10737,6 +10738,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_gbk, my_copy_fix_mb, my_native_to_mb_gbk, + my_wc_to_printable_generic }; @@ -10744,7 +10746,7 @@ struct charset_info_st my_charset_gbk_chinese_ci= { 28,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM, /* state */ - "gbk", /* cs name */ + charset_name_gbk, /* cs name */ "gbk_chinese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -10776,7 +10778,7 @@ struct charset_info_st my_charset_gbk_bin= { 87,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "gbk", /* cs name */ + charset_name_gbk, /* cs name */ "gbk_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -10809,7 +10811,7 @@ struct charset_info_st my_charset_gbk_chinese_nopad_ci= { MY_NOPAD_ID(28),0,0,/* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NOPAD, /* state */ - "gbk", /* cs name */ + charset_name_gbk, /* cs name */ "gbk_chinese_nopad_ci",/* name */ "", /* comment */ NULL, /* tailoring */ @@ -10841,7 +10843,7 @@ struct charset_info_st my_charset_gbk_nopad_bin= { MY_NOPAD_ID(87),0,0,/* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "gbk", /* cs name */ + charset_name_gbk, /* cs name */ "gbk_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-latin1.c b/strings/ctype-latin1.c index bcf1cc6c9f1..eeb00d29592 100644 --- a/strings/ctype-latin1.c +++ b/strings/ctype-latin1.c @@ -18,6 +18,8 @@ #include "strings_def.h" #include <m_ctype.h> +const char charset_name_latin1[]= "latin1"; + static const uchar ctype_latin1[] = { 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, @@ -423,6 +425,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_8bit, my_copy_8bit, my_wc_mb_bin, /* native_to_mb */ + my_wc_to_printable_generic }; @@ -430,7 +433,7 @@ struct charset_info_st my_charset_latin1= { 8,0,0, /* number */ MY_CS_COMPILED | MY_CS_PRIMARY, /* state */ - "latin1", /* cs name */ + charset_name_latin1, /* cs name */ "latin1_swedish_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -463,7 +466,7 @@ struct charset_info_st my_charset_latin1_nopad= { MY_NOPAD_ID(8),0,0, /* number */ MY_CS_COMPILED | MY_CS_NOPAD, /* state */ - "latin1", /* cs name */ + charset_name_latin1, /* cs name */ "latin1_swedish_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -742,7 +745,7 @@ struct charset_info_st my_charset_latin1_german2_ci= { 31,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NON1TO1, /* state */ - "latin1", /* cs name */ + charset_name_latin1, /* cs name */ "latin1_german2_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -775,7 +778,7 @@ struct charset_info_st my_charset_latin1_bin= { 47,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "latin1", /* cs name */ + charset_name_latin1, /* cs name */ "latin1_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -808,7 +811,7 @@ struct charset_info_st my_charset_latin1_nopad_bin= { MY_NOPAD_ID(47),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD,/* state */ - "latin1", /* cs name */ + charset_name_latin1, /* cs name */ "latin1_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c index fc882d087fb..f26c9fe10d2 100644 --- a/strings/ctype-mb.c +++ b/strings/ctype-mb.c @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2014, Oracle and/or its affiliates. - Copyright (c) 2009, 2020, MariaDB Corporation. + Copyright (c) 2009, 2021, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -158,7 +158,7 @@ int my_strcasecmp_mb(CHARSET_INFO * cs,const char *s, const char *t) if (*s++ != *t++) return 1; } - else if (my_charlen(cs, t, t + cs->mbmaxlen) > 1) + else if (my_ci_charlen(cs, (const uchar *) t, (const uchar *) t + cs->mbmaxlen) > 1) return 1; else if (map[(uchar) *s++] != map[(uchar) *t++]) return 1; @@ -354,8 +354,8 @@ my_append_fix_badly_formed_tail(CHARSET_INFO *cs, for ( ; nchars; nchars--) { int chlen; - if ((chlen= cs->cset->charlen(cs, (const uchar*) from, - (const uchar *) from_end)) > 0) + if ((chlen= my_ci_charlen(cs, (const uchar*) from, + (const uchar *) from_end)) > 0) { /* Found a valid character */ /* chlen == 1..MBMAXLEN */ DBUG_ASSERT(chlen <= (int) cs->mbmaxlen); @@ -381,7 +381,7 @@ bad: if (!status->m_well_formed_error_pos) status->m_well_formed_error_pos= from; - if ((chlen= cs->cset->wc_mb(cs, '?', (uchar*) to, (uchar *) to_end)) <= 0) + if ((chlen= my_ci_wc_mb(cs, '?', (uchar*) to, (uchar *) to_end)) <= 0) break; /* Question mark does not fit into the destination */ to+= chlen; from++; @@ -403,8 +403,7 @@ my_copy_fix_mb(CHARSET_INFO *cs, size_t fixed_length; size_t min_length= MY_MIN(src_length, dst_length); - well_formed_nchars= cs->cset->well_formed_char_length(cs, - src, src + min_length, + well_formed_nchars= my_ci_well_formed_char_length(cs, src, src + min_length, nchars, status); DBUG_ASSERT(well_formed_nchars <= nchars); well_formed_length= status->m_source_end_pos - src; @@ -452,8 +451,8 @@ uint my_instr_mb(CHARSET_INFO *cs, { int mb_len; - if (!cs->coll->strnncoll(cs, (uchar*) b, s_length, - (uchar*) s, s_length, 0)) + if (!my_ci_strnncoll(cs, (const uchar *) b, s_length, + (const uchar *) s, s_length, 0)) { if (nmatch) { @@ -662,7 +661,7 @@ my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), static void pad_max_char(CHARSET_INFO *cs, char *str, char *end) { char buf[10]; - char buflen= cs->cset->native_to_mb(cs, cs->max_sort_char, (uchar*) buf, + char buflen= my_ci_native_to_mb(cs, cs->max_sort_char, (uchar*) buf, (uchar*) buf + sizeof(buf)); DBUG_ASSERT(buflen > 0); do @@ -877,7 +876,7 @@ my_like_range_generic(CHARSET_INFO *cs, { my_wc_t wc, wc2; int res; - if ((res= cs->cset->mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) + if ((res= my_ci_mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) { if (res == MY_CS_ILSEQ) /* Bad sequence */ return TRUE; /* min_length and max_length are not important */ @@ -887,7 +886,7 @@ my_like_range_generic(CHARSET_INFO *cs, if (wc == (my_wc_t) escape) { - if ((res= cs->cset->mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) + if ((res= my_ci_mb_wc(cs, &wc, (uchar*) ptr, (uchar*) end)) <= 0) { if (res == MY_CS_ILSEQ) return TRUE; /* min_length and max_length are not important */ @@ -901,26 +900,24 @@ my_like_range_generic(CHARSET_INFO *cs, ptr+= res; /* Put escape character to min_str and max_str */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) min_str, (uchar*) min_end)) <= 0) goto pad_set_lengths; /* No space */ min_str+= res; - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) max_str, (uchar*) max_end)) <= 0) goto pad_set_lengths; /* No space */ max_str+= res; continue; } else if (wc == (my_wc_t) w_one) { - if ((res= cs->cset->wc_mb(cs, cs->min_sort_char, - (uchar*) min_str, (uchar*) min_end)) <= 0) + if ((res= my_ci_wc_mb(cs, cs->min_sort_char, + (uchar*) min_str, (uchar*) min_end)) <= 0) goto pad_set_lengths; min_str+= res; - if ((res= cs->cset->wc_mb(cs, cs->max_sort_char, - (uchar*) max_str, (uchar*) max_end)) <= 0) + if ((res= my_ci_wc_mb(cs, cs->max_sort_char, + (uchar*) max_str, (uchar*) max_end)) <= 0) goto pad_set_lengths; max_str+= res; continue; @@ -941,7 +938,7 @@ my_like_range_generic(CHARSET_INFO *cs, if (contractions && my_uca_can_be_contraction_head(contractions, wc) && - (res= cs->cset->mb_wc(cs, &wc2, (uchar*) ptr, (uchar*) end)) > 0) + (res= my_ci_mb_wc(cs, &wc2, (uchar*) ptr, (uchar*) end)) > 0) { const uint16 *weight; if ((wc2 == (my_wc_t) w_one || wc2 == (my_wc_t) w_many)) @@ -966,13 +963,11 @@ my_like_range_generic(CHARSET_INFO *cs, charlen--; /* Put contraction head */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) min_str, (uchar*) min_end)) <= 0) goto pad_set_lengths; min_str+= res; - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) max_str, (uchar*) max_end)) <= 0) goto pad_set_lengths; max_str+= res; wc= wc2; /* Prepare to put contraction tail */ @@ -980,12 +975,10 @@ my_like_range_generic(CHARSET_INFO *cs, } /* Normal character, or contraction tail */ - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) min_str, (uchar*) min_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) min_str, (uchar*) min_end)) <= 0) goto pad_set_lengths; min_str+= res; - if ((res= cs->cset->wc_mb(cs, wc, - (uchar*) max_str, (uchar*) max_end)) <= 0) + if ((res= my_ci_wc_mb(cs, wc, (uchar*) max_str, (uchar*) max_end)) <= 0) goto pad_set_lengths; max_str+= res; } @@ -1002,9 +995,9 @@ pad_min_max: Make sure to call fill() with proper "length" argument. */ res_length_diff= res_length % cs->mbminlen; - cs->cset->fill(cs, min_str, min_end - min_str - res_length_diff, + my_ci_fill(cs, min_str, min_end - min_str - res_length_diff, cs->min_sort_char); - cs->cset->fill(cs, max_str, max_end - max_str - res_length_diff, + my_ci_fill(cs, max_str, max_end - max_str - res_length_diff, cs->max_sort_char); /* In case of incomplete characters set the remainder to 0x00's */ @@ -1356,7 +1349,7 @@ size_t my_numcells_mb(CHARSET_INFO *cs, const char *b, const char *e) { int mb_len; uint pg; - if ((mb_len= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0) + if ((mb_len= my_ci_mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0) { mb_len= 1; /* Let's think a wrong sequence takes 1 dysplay cell */ b++; @@ -1383,7 +1376,7 @@ int my_mb_ctype_mb(CHARSET_INFO *cs, int *ctype, const uchar *s, const uchar *e) { my_wc_t wc; - int res= cs->cset->mb_wc(cs, &wc, s, e); + int res= my_ci_mb_wc(cs, &wc, s, e); if (res <= 0 || wc > 0xFFFF) *ctype= 0; else diff --git a/strings/ctype-mb.inl b/strings/ctype-mb.inl index 336c482d24f..6cde31a34ad 100644 --- a/strings/ctype-mb.inl +++ b/strings/ctype-mb.inl @@ -167,7 +167,7 @@ MY_FUNCTION_NAME(well_formed_char_length)(CHARSET_INFO *cs __attribute__((unused /** Returns well formed length of a string measured in characters (rather than in bytes). - Version for character sets that define CHARLEN(), e.g. utf8. + Version for character sets that define CHARLEN(), e.g. utf8mb3. CHARLEN(cs,b,e) must use the same return code convension that mb_wc() does: - a positive number in the range [1-mbmaxlen] if a valid single-byte or multi-byte character was found diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c index d150e457673..220cecbabfe 100644 --- a/strings/ctype-simple.c +++ b/strings/ctype-simple.c @@ -1,5 +1,5 @@ /* Copyright (c) 2002, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2019, MariaDB Corporation. + Copyright (c) 2009, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -1458,7 +1458,7 @@ my_cset_init_8bit(struct charset_info_st *cs, MY_CHARSET_LOADER *loader) cs->caseup_multiply= 1; cs->casedn_multiply= 1; cs->pad_char= ' '; - if (!cs->to_lower || !cs->to_upper || !cs->ctype || !cs->tab_to_uni) + if (!cs->to_lower || !cs->to_upper || !cs->m_ctype || !cs->tab_to_uni) return TRUE; return create_fromuni(cs, loader); } @@ -1508,7 +1508,7 @@ int my_mb_ctype_8bit(CHARSET_INFO *cs, int *ctype, *ctype= 0; return MY_CS_TOOSMALL; } - *ctype= cs->ctype[*s + 1]; + *ctype= cs->m_ctype[*s + 1]; return 1; } @@ -2035,14 +2035,14 @@ my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs, if (nweights && frmend < strend && (flags & MY_STRXFRM_PAD_WITH_SPACE)) { uint fill_length= MY_MIN((uint) (strend - frmend), nweights * cs->mbminlen); - cs->cset->fill(cs, (char*) frmend, fill_length, cs->pad_char); + my_ci_fill(cs, (char*) frmend, fill_length, cs->pad_char); frmend+= fill_length; } my_strxfrm_desc_and_reverse(str, frmend, flags, level); if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && frmend < strend) { size_t fill_length= strend - frmend; - cs->cset->fill(cs, (char*) frmend, fill_length, cs->pad_char); + my_ci_fill(cs, (char*) frmend, fill_length, cs->pad_char); frmend= strend; } return frmend - str; @@ -2101,6 +2101,7 @@ MY_CHARSET_HANDLER my_charset_8bit_handler= my_well_formed_char_length_8bit, my_copy_8bit, my_wc_mb_bin, /* native_to_mb */ + my_wc_to_printable_8bit }; MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler = diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c index e15ba5e36fc..7ecff065883 100644 --- a/strings/ctype-sjis.c +++ b/strings/ctype-sjis.c @@ -22,6 +22,7 @@ #ifdef HAVE_CHARSET_sjis +const char charset_name_sjis[]= "sjis"; /* * This comment is parsed by configure to create ctype.c, @@ -34004,6 +34005,15 @@ size_t my_numcells_sjis(CHARSET_INFO *cs __attribute__((unused)), } +static int +my_wc_to_printable_sjis(CHARSET_INFO *cs, my_wc_t wc, + uchar *str, uchar *end) +{ + return my_wc_to_printable_ex(cs, wc, str, end, + '\\', 2, 1); +} + + /* sjis_chinese_ci and sjis_bin sort character blocks in this order: 1. [00..7F] - 7BIT characters (ASCII) @@ -34139,6 +34149,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_sjis, my_copy_fix_mb, my_native_to_mb_sjis, + my_wc_to_printable_sjis }; @@ -34146,7 +34157,7 @@ struct charset_info_st my_charset_sjis_japanese_ci= { 13,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_NONASCII, /* state */ - "sjis", /* cs name */ + charset_name_sjis, /* cs name */ "sjis_japanese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -34178,7 +34189,7 @@ struct charset_info_st my_charset_sjis_bin= { 88,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII, /* state */ - "sjis", /* cs name */ + charset_name_sjis, /* cs name */ "sjis_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -34211,7 +34222,7 @@ struct charset_info_st my_charset_sjis_japanese_nopad_ci= { MY_NOPAD_ID(13),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NONASCII|MY_CS_NOPAD, /* state */ - "sjis", /* cs name */ + charset_name_sjis, /* cs name */ "sjis_japanese_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -34243,7 +34254,7 @@ struct charset_info_st my_charset_sjis_nopad_bin= { MY_NOPAD_ID(88),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NONASCII|MY_CS_NOPAD, /* state */ - "sjis", /* cs name */ + charset_name_sjis, /* cs name */ "sjis_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-tis620.c b/strings/ctype-tis620.c index b19832cc792..e6f6ad24eec 100644 --- a/strings/ctype-tis620.c +++ b/strings/ctype-tis620.c @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2011, Oracle and/or its affiliates. - Copyright (c) 2009-2011, Monty Program Ab + Copyright (c) 2009, 2020, MariaDB Corporation. Copyright (C) 2003 by Sathit Jittanupat <jsat66@hotmail.com,jsat66@yahoo.com> * solving bug crash with long text field string @@ -40,6 +40,8 @@ #ifdef HAVE_CHARSET_tis620 +const char charset_name_tis620[]= "tis620"; + #define M L_MIDDLE #define U L_UPPER #define L L_LOWER @@ -524,7 +526,7 @@ int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)), tc1= buf; if ((len1 + len2 +2) > (int) sizeof(buf)) - tc1= (uchar*) my_malloc(len1+len2+2, MYF(MY_FAE)); + tc1= (uchar*) my_malloc(PSI_INSTRUMENT_ME, len1+len2+2, MYF(MY_FAE)); tc2= tc1 + len1+1; memcpy((char*) tc1, (char*) s1, len1); tc1[len1]= 0; /* if length(s1)> len1, need to put 'end of string' */ @@ -550,7 +552,7 @@ int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)), a= buf; if ((a_length + b_length +2) > (int) sizeof(buf)) - alloced= a= (uchar*) my_malloc(a_length+b_length+2, MYF(MY_FAE)); + alloced= a= (uchar*) my_malloc(PSI_INSTRUMENT_ME, a_length+b_length+2, MYF(MY_FAE)); b= a + a_length+1; if (a_length) @@ -627,7 +629,7 @@ my_strnxfrm_tis620(CHARSET_INFO *cs, if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && len < dstlen0) { size_t fill_length= dstlen0 - len; - cs->cset->fill(cs, (char*) dst + len, fill_length, cs->pad_char); + my_ci_fill(cs, (char*) dst + len, fill_length, cs->pad_char); len= dstlen0; } return len; @@ -921,6 +923,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_8bit, my_copy_8bit, my_wc_mb_bin, /* native_to_mb */ + my_wc_to_printable_generic }; @@ -929,7 +932,7 @@ struct charset_info_st my_charset_tis620_thai_ci= { 18,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_NON1TO1, /* state */ - "tis620", /* cs name */ + charset_name_tis620, /* cs name */ "tis620_thai_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -961,7 +964,7 @@ struct charset_info_st my_charset_tis620_bin= { 89,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "tis620", /* cs name */ + charset_name_tis620, /* cs name */ "tis620_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -994,7 +997,7 @@ struct charset_info_st my_charset_tis620_thai_nopad_ci= { MY_NOPAD_ID(18),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_NON1TO1|MY_CS_NOPAD, /* state */ - "tis620", /* cs name */ + charset_name_tis620, /* cs name */ "tis620_thai_nopad_ci",/* name */ "", /* comment */ NULL, /* tailoring */ @@ -1027,7 +1030,7 @@ struct charset_info_st my_charset_tis620_nopad_bin= { MY_NOPAD_ID(89),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "tis620", /* cs name */ + charset_name_tis620, /* cs name */ "tis620_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index 969f642b51f..43390b81832 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -1,5 +1,5 @@ /* Copyright (c) 2004, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2015, MariaDB + Copyright (c) 2009, 2020, MariaDB This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -31532,8 +31532,7 @@ my_uca_scanner_contraction_find(my_uca_scanner *scanner, my_wc_t *wc, flag<<= 1) { int mblen; - if ((mblen= scanner->cs->cset->mb_wc(scanner->cs, &wc[clen], - s, scanner->send)) <= 0) + if ((mblen= my_ci_mb_wc(scanner->cs, &wc[clen], s, scanner->send)) <= 0) break; beg[clen]= s= s + mblen; if (!my_uca_can_be_contraction_part(&scanner->level->contractions, @@ -32340,7 +32339,7 @@ static my_coll_lexem_num my_coll_lexem_next(MY_COLL_LEXEM *lexem) /* Escaped character, e.g. \u1234 */ if ((*beg == '\\') && (beg + 2 < lexem->end) && - (beg[1] == 'u') && my_isxdigit(&my_charset_utf8_general_ci, beg[2])) + (beg[1] == 'u') && my_isxdigit(&my_charset_utf8mb3_general_ci, beg[2])) { int ch; @@ -32369,10 +32368,9 @@ static my_coll_lexem_num my_coll_lexem_next(MY_COLL_LEXEM *lexem) if (((uchar) *beg) > 0x7F) /* Unescaped multibyte character */ { - CHARSET_INFO *cs= &my_charset_utf8_general_ci; + CHARSET_INFO *cs= &my_charset_utf8mb3_general_ci; my_wc_t wc; - int nbytes= cs->cset->mb_wc(cs, &wc, - (uchar *) beg, (uchar *) lexem->end); + int nbytes= my_ci_mb_wc(cs, &wc, (uchar *) beg, (uchar *) lexem->end); if (nbytes > 0) { rc= MY_COLL_LEXEM_CHAR; @@ -33751,7 +33749,7 @@ static my_bool my_coll_init_uca(struct charset_info_st *cs, MY_CHARSET_LOADER *loader) { cs->pad_char= ' '; - cs->ctype= my_charset_utf8_unicode_ci.ctype; + cs->m_ctype= my_charset_utf8mb3_unicode_ci.m_ctype; if (!cs->caseinfo) cs->caseinfo= &my_unicase_default; return create_tailoring(cs, loader); @@ -33805,7 +33803,7 @@ static void my_uca_handler_map(struct charset_info_st *cs, instead of generic. */ #define MY_FUNCTION_NAME(x) my_uca_ ## x ## _generic -#define MY_MB_WC(scanner, wc, beg, end) (scanner->cs->cset->mb_wc(scanner->cs, wc, beg, end)) +#define MY_MB_WC(scanner, wc, beg, end) (my_ci_mb_wc(scanner->cs, wc, beg, end)) #define MY_LIKE_RANGE my_like_range_generic #define MY_UCA_ASCII_OPTIMIZE 0 #define MY_UCA_COMPILE_CONTRACTIONS 1 @@ -33922,7 +33920,6 @@ ex: #define MY_UCA_COLL_INIT my_coll_init_uca #include "ctype-uca.inl" - #define MY_CS_UCS2_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_NONASCII) #define MY_CS_UCS2_UCA_NOPAD_FLAGS (MY_CS_UCS2_UCA_FLAGS|MY_CS_NOPAD) @@ -33930,7 +33927,7 @@ struct charset_info_st my_charset_ucs2_unicode_ci= { 128,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_unicode_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -33962,7 +33959,7 @@ struct charset_info_st my_charset_ucs2_icelandic_uca_ci= { 129,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_icelandic_ci",/* name */ "", /* comment */ icelandic, /* tailoring */ @@ -33994,7 +33991,7 @@ struct charset_info_st my_charset_ucs2_latvian_uca_ci= { 130,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_latvian_ci", /* name */ "", /* comment */ latvian, /* tailoring */ @@ -34026,7 +34023,7 @@ struct charset_info_st my_charset_ucs2_romanian_uca_ci= { 131,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_romanian_ci", /* name */ "", /* comment */ romanian, /* tailoring */ @@ -34058,7 +34055,7 @@ struct charset_info_st my_charset_ucs2_slovenian_uca_ci= { 132,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_slovenian_ci",/* name */ "", /* comment */ slovenian, /* tailoring */ @@ -34090,7 +34087,7 @@ struct charset_info_st my_charset_ucs2_polish_uca_ci= { 133,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_polish_ci", /* name */ "", /* comment */ polish, /* tailoring */ @@ -34122,7 +34119,7 @@ struct charset_info_st my_charset_ucs2_estonian_uca_ci= { 134,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_estonian_ci", /* name */ "", /* comment */ estonian, /* tailoring */ @@ -34154,7 +34151,7 @@ struct charset_info_st my_charset_ucs2_spanish_uca_ci= { 135,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_spanish_ci", /* name */ "", /* comment */ spanish, /* tailoring */ @@ -34186,7 +34183,7 @@ struct charset_info_st my_charset_ucs2_swedish_uca_ci= { 136,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_swedish_ci", /* name */ "", /* comment */ swedish, /* tailoring */ @@ -34218,7 +34215,7 @@ struct charset_info_st my_charset_ucs2_turkish_uca_ci= { 137,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_turkish_ci", /* name */ "", /* comment */ turkish, /* tailoring */ @@ -34250,7 +34247,7 @@ struct charset_info_st my_charset_ucs2_czech_uca_ci= { 138,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_czech_ci", /* name */ "", /* comment */ czech, /* tailoring */ @@ -34283,7 +34280,7 @@ struct charset_info_st my_charset_ucs2_danish_uca_ci= { 139,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_danish_ci", /* name */ "", /* comment */ danish, /* tailoring */ @@ -34315,8 +34312,8 @@ struct charset_info_st my_charset_ucs2_lithuanian_uca_ci= { 140,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ - "ucs2_lithuanian_ci",/* name */ + charset_name_ucs2, /* cs name */ + "ucs2_lithuanian_ci",/* name */ "", /* comment */ lithuanian, /* tailoring */ NULL, /* ctype */ @@ -34347,7 +34344,7 @@ struct charset_info_st my_charset_ucs2_slovak_uca_ci= { 141,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_slovak_ci", /* name */ "", /* comment */ slovak, /* tailoring */ @@ -34379,7 +34376,7 @@ struct charset_info_st my_charset_ucs2_spanish2_uca_ci= { 142,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_spanish2_ci", /* name */ "", /* comment */ spanish2, /* tailoring */ @@ -34412,7 +34409,7 @@ struct charset_info_st my_charset_ucs2_roman_uca_ci= { 143,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_roman_ci", /* name */ "", /* comment */ roman, /* tailoring */ @@ -34445,7 +34442,7 @@ struct charset_info_st my_charset_ucs2_persian_uca_ci= { 144,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_persian_ci", /* name */ "", /* comment */ persian, /* tailoring */ @@ -34478,7 +34475,7 @@ struct charset_info_st my_charset_ucs2_esperanto_uca_ci= { 145,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_esperanto_ci",/* name */ "", /* comment */ esperanto, /* tailoring */ @@ -34511,7 +34508,7 @@ struct charset_info_st my_charset_ucs2_hungarian_uca_ci= { 146,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_hungarian_ci",/* name */ "", /* comment */ hungarian, /* tailoring */ @@ -34542,8 +34539,8 @@ struct charset_info_st my_charset_ucs2_hungarian_uca_ci= struct charset_info_st my_charset_ucs2_sinhala_uca_ci= { 147,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* csname */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* csname */ "ucs2_sinhala_ci", /* name */ "", /* comment */ sinhala, /* tailoring */ @@ -34576,8 +34573,8 @@ struct charset_info_st my_charset_ucs2_sinhala_uca_ci= struct charset_info_st my_charset_ucs2_german2_uca_ci= { 148,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* csname */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* csname */ "ucs2_german2_ci", /* name */ "", /* comment */ german2, /* tailoring */ @@ -34608,9 +34605,9 @@ struct charset_info_st my_charset_ucs2_german2_uca_ci= struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci= { 149,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ - "ucs2_croatian_mysql561_ci", /* name */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* cs name */ + "ucs2_croatian_mysql561_ci",/* name */ "", /* comment */ croatian_mysql561, /* tailoring */ NULL, /* ctype */ @@ -34641,9 +34638,9 @@ struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci= struct charset_info_st my_charset_ucs2_croatian_uca_ci= { MY_PAGE2_COLLATION_ID_UCS2,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ - "ucs2_croatian_ci", /* name */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* cs name */ + "ucs2_croatian_ci", /* name */ "", /* comment */ croatian_mariadb, /* tailoring */ NULL, /* ctype */ @@ -34674,9 +34671,9 @@ struct charset_info_st my_charset_ucs2_croatian_uca_ci= struct charset_info_st my_charset_ucs2_myanmar_uca_ci= { MY_PAGE2_COLLATION_ID_UCS2+1,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ - "ucs2_myanmar_ci", /* name */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* cs name */ + "ucs2_myanmar_ci", /* name */ "", /* comment */ myanmar, /* tailoring */ NULL, /* ctype */ @@ -34708,7 +34705,7 @@ struct charset_info_st my_charset_ucs2_thai_520_w2= { MY_PAGE2_COLLATION_ID_UCS2+2,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* flags */ - "ucs2", /* csname */ + charset_name_ucs2, /* csname */ "ucs2_thai_520_w2", /* name */ "", /* comment */ "[strength 2]", /* tailoring */ @@ -34740,7 +34737,7 @@ struct charset_info_st my_charset_ucs2_unicode_520_ci= { 150,0,0, /* number */ MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_unicode_520_ci",/* name */ "", /* comment */ "", /* tailoring */ @@ -34772,8 +34769,8 @@ struct charset_info_st my_charset_ucs2_unicode_520_ci= struct charset_info_st my_charset_ucs2_vietnamese_ci= { 151,0,0, /* number */ - MY_CS_UCS2_UCA_FLAGS,/* state */ - "ucs2", /* csname */ + MY_CS_UCS2_UCA_FLAGS,/* state */ + charset_name_ucs2, /* csname */ "ucs2_vietnamese_ci",/* name */ "", /* comment */ vietnamese, /* tailoring */ @@ -34806,7 +34803,7 @@ struct charset_info_st my_charset_ucs2_unicode_nopad_ci= { MY_NOPAD_ID(128),0,0, /* number */ MY_CS_UCS2_UCA_NOPAD_FLAGS,/* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_unicode_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -34839,7 +34836,7 @@ struct charset_info_st my_charset_ucs2_unicode_520_nopad_ci= { MY_NOPAD_ID(150),0,0, /* number */ MY_CS_UCS2_UCA_NOPAD_FLAGS, /* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_unicode_520_nopad_ci",/* name */ "", /* comment */ "", /* tailoring */ @@ -34871,7 +34868,7 @@ struct charset_info_st my_charset_ucs2_unicode_520_nopad_ci= #endif -#ifdef HAVE_CHARSET_utf8 +#ifdef HAVE_CHARSET_utf8mb3 static my_bool my_uca_coll_init_utf8mb3(struct charset_info_st *cs, MY_CHARSET_LOADER *loader); @@ -34912,7 +34909,7 @@ my_uca_coll_init_utf8mb3(struct charset_info_st *cs, MY_CHARSET_LOADER *loader) expressions. Note, there is no need to mark byte 255 as a letter, it is illegal byte in UTF8. */ -static uchar ctype_utf8[] = { +static uchar ctype_utf8mb3[] = { 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, @@ -34932,20 +34929,20 @@ static uchar ctype_utf8[] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0 }; -extern MY_CHARSET_HANDLER my_charset_utf8_handler; +extern MY_CHARSET_HANDLER my_charset_utf8mb3_handler; #define MY_CS_UTF8MB3_UCA_FLAGS MY_CS_COMMON_UCA_FLAGS #define MY_CS_UTF8MB3_UCA_NOPAD_FLAGS (MY_CS_UTF8MB3_UCA_FLAGS|MY_CS_NOPAD) -struct charset_info_st my_charset_utf8_unicode_ci= +struct charset_info_st my_charset_utf8mb3_unicode_ci= { 192,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_unicode_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_unicode_ci", /* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -34965,20 +34962,20 @@ struct charset_info_st my_charset_utf8_unicode_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_icelandic_uca_ci= +struct charset_info_st my_charset_utf8mb3_icelandic_uca_ci= { 193,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_icelandic_ci",/* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_icelandic_ci",/* name */ "", /* comment */ icelandic, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -34998,19 +34995,19 @@ struct charset_info_st my_charset_utf8_icelandic_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_latvian_uca_ci= +struct charset_info_st my_charset_utf8mb3_latvian_uca_ci= { 194,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_latvian_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_latvian_ci",/* name */ "", /* comment */ latvian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35030,19 +35027,19 @@ struct charset_info_st my_charset_utf8_latvian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_romanian_uca_ci= +struct charset_info_st my_charset_utf8mb3_romanian_uca_ci= { 195,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_romanian_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_romanian_ci", /* name */ "", /* comment */ romanian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35062,19 +35059,19 @@ struct charset_info_st my_charset_utf8_romanian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_slovenian_uca_ci= +struct charset_info_st my_charset_utf8mb3_slovenian_uca_ci= { 196,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_slovenian_ci",/* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_slovenian_ci",/* name */ "", /* comment */ slovenian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35094,19 +35091,19 @@ struct charset_info_st my_charset_utf8_slovenian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_polish_uca_ci= +struct charset_info_st my_charset_utf8mb3_polish_uca_ci= { 197,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_polish_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_polish_ci",/* name */ "", /* comment */ polish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35126,19 +35123,19 @@ struct charset_info_st my_charset_utf8_polish_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_estonian_uca_ci= +struct charset_info_st my_charset_utf8mb3_estonian_uca_ci= { 198,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_estonian_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_estonian_ci",/* name */ "", /* comment */ estonian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35158,19 +35155,19 @@ struct charset_info_st my_charset_utf8_estonian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_spanish_uca_ci= +struct charset_info_st my_charset_utf8mb3_spanish_uca_ci= { 199,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_spanish_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_spanish_ci", /* name */ "", /* comment */ spanish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35190,19 +35187,19 @@ struct charset_info_st my_charset_utf8_spanish_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_swedish_uca_ci= +struct charset_info_st my_charset_utf8mb3_swedish_uca_ci= { 200,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_swedish_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_swedish_ci", /* name */ "", /* comment */ swedish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35222,19 +35219,19 @@ struct charset_info_st my_charset_utf8_swedish_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_turkish_uca_ci= +struct charset_info_st my_charset_utf8mb3_turkish_uca_ci= { 201,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_turkish_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_turkish_ci", /* name */ "", /* comment */ turkish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35254,19 +35251,19 @@ struct charset_info_st my_charset_utf8_turkish_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_czech_uca_ci= +struct charset_info_st my_charset_utf8mb3_czech_uca_ci= { 202,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_czech_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_czech_ci", /* name */ "", /* comment */ czech, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35286,20 +35283,20 @@ struct charset_info_st my_charset_utf8_czech_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_danish_uca_ci= +struct charset_info_st my_charset_utf8mb3_danish_uca_ci= { 203,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_danish_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_danish_ci", /* name */ "", /* comment */ danish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35319,19 +35316,19 @@ struct charset_info_st my_charset_utf8_danish_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_lithuanian_uca_ci= +struct charset_info_st my_charset_utf8mb3_lithuanian_uca_ci= { 204,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_lithuanian_ci",/* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_lithuanian_ci",/* name */ "", /* comment */ lithuanian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35351,19 +35348,19 @@ struct charset_info_st my_charset_utf8_lithuanian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_slovak_uca_ci= +struct charset_info_st my_charset_utf8mb3_slovak_uca_ci= { 205,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_slovak_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_slovak_ci",/* name */ "", /* comment */ slovak, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35383,19 +35380,19 @@ struct charset_info_st my_charset_utf8_slovak_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_spanish2_uca_ci= +struct charset_info_st my_charset_utf8mb3_spanish2_uca_ci= { 206,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_spanish2_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_spanish2_ci",/* name */ "", /* comment */ spanish2, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35415,19 +35412,19 @@ struct charset_info_st my_charset_utf8_spanish2_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_roman_uca_ci= +struct charset_info_st my_charset_utf8mb3_roman_uca_ci= { 207,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_roman_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_roman_ci",/* name */ "", /* comment */ roman, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35447,19 +35444,19 @@ struct charset_info_st my_charset_utf8_roman_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_persian_uca_ci= +struct charset_info_st my_charset_utf8mb3_persian_uca_ci= { 208,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_persian_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_persian_ci",/* name */ "", /* comment */ persian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35479,19 +35476,19 @@ struct charset_info_st my_charset_utf8_persian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_esperanto_uca_ci= +struct charset_info_st my_charset_utf8mb3_esperanto_uca_ci= { 209,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_esperanto_ci",/* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_esperanto_ci",/* name */ "", /* comment */ esperanto, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35511,19 +35508,19 @@ struct charset_info_st my_charset_utf8_esperanto_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_hungarian_uca_ci= +struct charset_info_st my_charset_utf8mb3_hungarian_uca_ci= { 210,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_hungarian_ci",/* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_hungarian_ci",/* name */ "", /* comment */ hungarian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35543,19 +35540,19 @@ struct charset_info_st my_charset_utf8_hungarian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_sinhala_uca_ci= +struct charset_info_st my_charset_utf8mb3_sinhala_uca_ci= { 211,0,0, /* number */ - MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - "utf8", /* cs name */ - "utf8_sinhala_ci", /* name */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_sinhala_ci", /* name */ "", /* comment */ sinhala, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35575,20 +35572,20 @@ struct charset_info_st my_charset_utf8_sinhala_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_german2_uca_ci= +struct charset_info_st my_charset_utf8mb3_german2_uca_ci= { 212,0,0, /* number */ - MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* cs name */ - MY_UTF8MB3 "_german2_ci",/* name */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_german2_ci",/* name */ "", /* comment */ german2, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35608,19 +35605,19 @@ struct charset_info_st my_charset_utf8_german2_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_croatian_mysql561_uca_ci= +struct charset_info_st my_charset_utf8mb3_croatian_mysql561_uca_ci= { 213,0,0, /* number */ - MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* cs name */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + charset_name_utf8, /* cs name */ MY_UTF8MB3 "_croatian_mysql561_ci",/* name */ "", /* comment */ croatian_mysql561, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35640,20 +35637,20 @@ struct charset_info_st my_charset_utf8_croatian_mysql561_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_croatian_uca_ci= +struct charset_info_st my_charset_utf8mb3_croatian_uca_ci= { MY_PAGE2_COLLATION_ID_UTF8,0,0, /* number */ - MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* cs name */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + charset_name_utf8, /* cs name */ MY_UTF8MB3 "_croatian_ci",/* name */ "", /* comment */ croatian_mariadb, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35673,20 +35670,20 @@ struct charset_info_st my_charset_utf8_croatian_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_myanmar_uca_ci= +struct charset_info_st my_charset_utf8mb3_myanmar_uca_ci= { MY_PAGE2_COLLATION_ID_UTF8+1,0,0, /* number */ - MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* cs name */ - MY_UTF8MB3 "_myanmar_ci",/* name */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_myanmar_ci",/* name */ "", /* comment */ myanmar, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35706,20 +35703,20 @@ struct charset_info_st my_charset_utf8_myanmar_uca_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_unicode_520_ci= +struct charset_info_st my_charset_utf8mb3_unicode_520_ci= { 214,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* csname */ + charset_name_utf8, /* csname */ MY_UTF8MB3 "_unicode_520_ci",/* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35739,19 +35736,19 @@ struct charset_info_st my_charset_utf8_unicode_520_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_thai_520_w2= +struct charset_info_st my_charset_utf8mb3_thai_520_w2= { MY_PAGE2_COLLATION_ID_UTF8+2,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* csname */ + charset_name_utf8, /* csname */ MY_UTF8MB3 "_thai_520_w2",/* name */ "", /* comment */ "[strength 2]", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35771,19 +35768,19 @@ struct charset_info_st my_charset_utf8_thai_520_w2= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 2, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_multilevel_utf8mb3 }; -struct charset_info_st my_charset_utf8_vietnamese_ci= +struct charset_info_st my_charset_utf8mb3_vietnamese_ci= { 215,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ - MY_UTF8MB3, /* cs name */ + charset_name_utf8, /* cs name */ MY_UTF8MB3 "_vietnamese_ci",/* name */ "", /* comment */ vietnamese, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35803,20 +35800,20 @@ struct charset_info_st my_charset_utf8_vietnamese_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_utf8mb3 }; -struct charset_info_st my_charset_utf8_unicode_nopad_ci= +struct charset_info_st my_charset_utf8mb3_unicode_nopad_ci= { MY_NOPAD_ID(192),0,0, /* number */ MY_CS_UTF8MB3_UCA_NOPAD_FLAGS, /* flags */ - MY_UTF8MB3, /* cs name */ + charset_name_utf8, /* cs name */ MY_UTF8MB3 "_unicode_nopad_ci",/* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35836,20 +35833,20 @@ struct charset_info_st my_charset_utf8_unicode_nopad_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_nopad_utf8mb3 }; -struct charset_info_st my_charset_utf8_unicode_520_nopad_ci= +struct charset_info_st my_charset_utf8mb3_unicode_520_nopad_ci= { MY_NOPAD_ID(214),0,0, /* number */ MY_CS_UTF8MB3_UCA_NOPAD_FLAGS, /* flags */ - MY_UTF8MB3, /* csname */ + charset_name_utf8, /* csname */ MY_UTF8MB3 "_unicode_520_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35869,11 +35866,11 @@ struct charset_info_st my_charset_utf8_unicode_520_nopad_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_uca_collation_handler_nopad_utf8mb3 }; -#endif /* HAVE_CHARSET_utf8 */ +#endif /* HAVE_CHARSET_utf8mb3 */ #ifdef HAVE_CHARSET_utf8mb4 @@ -35919,12 +35916,12 @@ extern MY_CHARSET_HANDLER my_charset_utf8mb4_handler; struct charset_info_st my_charset_utf8mb4_unicode_ci= { 224,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_unicode_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_unicode_ci",/* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35952,12 +35949,12 @@ struct charset_info_st my_charset_utf8mb4_unicode_ci= struct charset_info_st my_charset_utf8mb4_icelandic_uca_ci= { 225,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_icelandic_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_icelandic_ci",/* name */ "", /* comment */ icelandic, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -35985,11 +35982,11 @@ struct charset_info_st my_charset_utf8mb4_latvian_uca_ci= { 226,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_latvian_ci", /* name */ "", /* comment */ latvian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36016,12 +36013,12 @@ struct charset_info_st my_charset_utf8mb4_latvian_uca_ci= struct charset_info_st my_charset_utf8mb4_romanian_uca_ci= { 227,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_romanian_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_romanian_ci", /* name */ "", /* comment */ romanian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36048,12 +36045,12 @@ struct charset_info_st my_charset_utf8mb4_romanian_uca_ci= struct charset_info_st my_charset_utf8mb4_slovenian_uca_ci= { 228,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_slovenian_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_slovenian_ci",/* name */ "", /* comment */ slovenian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36080,12 +36077,12 @@ struct charset_info_st my_charset_utf8mb4_slovenian_uca_ci= struct charset_info_st my_charset_utf8mb4_polish_uca_ci= { 229,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_polish_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_polish_ci", /* name */ "", /* comment */ polish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36113,11 +36110,11 @@ struct charset_info_st my_charset_utf8mb4_estonian_uca_ci= { 230,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_estonian_ci", /* name */ "", /* comment */ estonian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36144,12 +36141,12 @@ struct charset_info_st my_charset_utf8mb4_estonian_uca_ci= struct charset_info_st my_charset_utf8mb4_spanish_uca_ci= { 231,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_spanish_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_spanish_ci", /* name */ "", /* comment */ spanish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36176,12 +36173,12 @@ struct charset_info_st my_charset_utf8mb4_spanish_uca_ci= struct charset_info_st my_charset_utf8mb4_swedish_uca_ci= { 232,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_swedish_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_swedish_ci", /* name */ "", /* comment */ swedish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36208,12 +36205,12 @@ struct charset_info_st my_charset_utf8mb4_swedish_uca_ci= struct charset_info_st my_charset_utf8mb4_turkish_uca_ci= { 233,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_turkish_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_turkish_ci", /* name */ "", /* comment */ turkish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36240,12 +36237,12 @@ struct charset_info_st my_charset_utf8mb4_turkish_uca_ci= struct charset_info_st my_charset_utf8mb4_czech_uca_ci= { 234,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_czech_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_czech_ci", /* name */ "", /* comment */ czech, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36273,12 +36270,12 @@ struct charset_info_st my_charset_utf8mb4_czech_uca_ci= struct charset_info_st my_charset_utf8mb4_danish_uca_ci= { 235,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_danish_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_danish_ci", /* name */ "", /* comment */ danish, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36305,12 +36302,12 @@ struct charset_info_st my_charset_utf8mb4_danish_uca_ci= struct charset_info_st my_charset_utf8mb4_lithuanian_uca_ci= { 236,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_lithuanian_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_lithuanian_ci",/* name */ "", /* comment */ lithuanian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36337,12 +36334,12 @@ struct charset_info_st my_charset_utf8mb4_lithuanian_uca_ci= struct charset_info_st my_charset_utf8mb4_slovak_uca_ci= { 237,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_slovak_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_slovak_ci", /* name */ "", /* comment */ slovak, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36369,12 +36366,12 @@ struct charset_info_st my_charset_utf8mb4_slovak_uca_ci= struct charset_info_st my_charset_utf8mb4_spanish2_uca_ci= { 238,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_spanish2_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_spanish2_ci", /* name */ "", /* comment */ spanish2, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36401,12 +36398,12 @@ struct charset_info_st my_charset_utf8mb4_spanish2_uca_ci= struct charset_info_st my_charset_utf8mb4_roman_uca_ci= { 239,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_roman_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_roman_ci", /* name */ "", /* comment */ roman, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36433,12 +36430,12 @@ struct charset_info_st my_charset_utf8mb4_roman_uca_ci= struct charset_info_st my_charset_utf8mb4_persian_uca_ci= { 240,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_persian_ci", /* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_persian_ci", /* name */ "", /* comment */ persian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36465,12 +36462,12 @@ struct charset_info_st my_charset_utf8mb4_persian_uca_ci= struct charset_info_st my_charset_utf8mb4_esperanto_uca_ci= { 241,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_esperanto_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_esperanto_ci",/* name */ "", /* comment */ esperanto, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36497,12 +36494,12 @@ struct charset_info_st my_charset_utf8mb4_esperanto_uca_ci= struct charset_info_st my_charset_utf8mb4_hungarian_uca_ci= { 242,0,0, /* number */ - MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_hungarian_ci",/* name */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_hungarian_ci",/* name */ "", /* comment */ hungarian, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36530,11 +36527,11 @@ struct charset_info_st my_charset_utf8mb4_sinhala_uca_ci= { 243,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_sinhala_ci",/* name */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_sinhala_ci",/* name */ "", /* comment */ sinhala, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36562,11 +36559,11 @@ struct charset_info_st my_charset_utf8mb4_german2_uca_ci= { 244,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_german2_ci",/* name */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_german2_ci",/* name */ "", /* comment */ german2, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36594,11 +36591,11 @@ struct charset_info_st my_charset_utf8mb4_croatian_mysql561_uca_ci= { 245,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_croatian_mysql561_ci",/* name */ "", /* comment */ croatian_mysql561, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36627,11 +36624,11 @@ struct charset_info_st my_charset_utf8mb4_croatian_uca_ci= { MY_PAGE2_COLLATION_ID_UTF8MB4,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_croatian_ci",/* name */ "", /* comment */ croatian_mariadb, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36660,11 +36657,11 @@ struct charset_info_st my_charset_utf8mb4_myanmar_uca_ci= { MY_PAGE2_COLLATION_ID_UTF8MB4+1,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_myanmar_ci",/* name */ + charset_name_utf8mb4, /* csname */ + MY_UTF8MB4 "_myanmar_ci",/* name */ "", /* comment */ myanmar, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36692,11 +36689,11 @@ struct charset_info_st my_charset_utf8mb4_thai_520_w2= { MY_PAGE2_COLLATION_ID_UTF8MB4+2,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* flags */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_thai_520_w2", /* name */ "", /* comment */ "[strength 2]", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36724,11 +36721,11 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_ci= { 246,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* flags */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_unicode_520_ci",/* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36757,11 +36754,11 @@ struct charset_info_st my_charset_utf8mb4_vietnamese_ci= { 247,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_vietnamese_ci",/* name */ "", /* comment */ vietnamese, /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36790,11 +36787,11 @@ struct charset_info_st my_charset_utf8mb4_unicode_nopad_ci= { MY_NOPAD_ID(224),0,0, /* number */ MY_CS_UTF8MB4_UCA_NOPAD_FLAGS, /* state */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_unicode_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36823,11 +36820,11 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci= { MY_NOPAD_ID(246),0,0, /* number */ MY_CS_UTF8MB4_UCA_NOPAD_FLAGS, /* flags */ - MY_UTF8MB4, /* csname */ + charset_name_utf8mb4, /* csname */ MY_UTF8MB4 "_unicode_520_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ - ctype_utf8, /* ctype */ + ctype_utf8mb3, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ NULL, /* sort_order */ @@ -36866,7 +36863,6 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci= #define MY_UCA_COLL_INIT my_coll_init_uca #include "ctype-uca.inl" - extern MY_CHARSET_HANDLER my_charset_utf32_handler; #define MY_CS_UTF32_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_NONASCII) @@ -36876,7 +36872,7 @@ struct charset_info_st my_charset_utf32_unicode_ci= { 160,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_unicode_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -36909,7 +36905,7 @@ struct charset_info_st my_charset_utf32_icelandic_uca_ci= { 161,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_icelandic_ci",/* name */ "", /* comment */ icelandic, /* tailoring */ @@ -36941,7 +36937,7 @@ struct charset_info_st my_charset_utf32_latvian_uca_ci= { 162,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_latvian_ci", /* name */ "", /* comment */ latvian, /* tailoring */ @@ -36973,7 +36969,7 @@ struct charset_info_st my_charset_utf32_romanian_uca_ci= { 163,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_romanian_ci", /* name */ "", /* comment */ romanian, /* tailoring */ @@ -37005,7 +37001,7 @@ struct charset_info_st my_charset_utf32_slovenian_uca_ci= { 164,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_slovenian_ci",/* name */ "", /* comment */ slovenian, /* tailoring */ @@ -37037,7 +37033,7 @@ struct charset_info_st my_charset_utf32_polish_uca_ci= { 165,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_polish_ci", /* name */ "", /* comment */ polish, /* tailoring */ @@ -37069,7 +37065,7 @@ struct charset_info_st my_charset_utf32_estonian_uca_ci= { 166,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_estonian_ci", /* name */ "", /* comment */ estonian, /* tailoring */ @@ -37101,7 +37097,7 @@ struct charset_info_st my_charset_utf32_spanish_uca_ci= { 167,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_spanish_ci", /* name */ "", /* comment */ spanish, /* tailoring */ @@ -37133,7 +37129,7 @@ struct charset_info_st my_charset_utf32_swedish_uca_ci= { 168,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_swedish_ci", /* name */ "", /* comment */ swedish, /* tailoring */ @@ -37165,7 +37161,7 @@ struct charset_info_st my_charset_utf32_turkish_uca_ci= { 169,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_turkish_ci", /* name */ "", /* comment */ turkish, /* tailoring */ @@ -37197,7 +37193,7 @@ struct charset_info_st my_charset_utf32_czech_uca_ci= { 170,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_czech_ci", /* name */ "", /* comment */ czech, /* tailoring */ @@ -37230,7 +37226,7 @@ struct charset_info_st my_charset_utf32_danish_uca_ci= { 171,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_danish_ci", /* name */ "", /* comment */ danish, /* tailoring */ @@ -37262,7 +37258,7 @@ struct charset_info_st my_charset_utf32_lithuanian_uca_ci= { 172,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_lithuanian_ci",/* name */ "", /* comment */ lithuanian, /* tailoring */ @@ -37294,7 +37290,7 @@ struct charset_info_st my_charset_utf32_slovak_uca_ci= { 173,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_slovak_ci", /* name */ "", /* comment */ slovak, /* tailoring */ @@ -37326,7 +37322,7 @@ struct charset_info_st my_charset_utf32_spanish2_uca_ci= { 174,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_spanish2_ci", /* name */ "", /* comment */ spanish2, /* tailoring */ @@ -37358,7 +37354,7 @@ struct charset_info_st my_charset_utf32_roman_uca_ci= { 175,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_roman_ci", /* name */ "", /* comment */ roman, /* tailoring */ @@ -37390,7 +37386,7 @@ struct charset_info_st my_charset_utf32_persian_uca_ci= { 176,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_persian_ci", /* name */ "", /* comment */ persian, /* tailoring */ @@ -37422,7 +37418,7 @@ struct charset_info_st my_charset_utf32_esperanto_uca_ci= { 177,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_esperanto_ci",/* name */ "", /* comment */ esperanto, /* tailoring */ @@ -37454,7 +37450,7 @@ struct charset_info_st my_charset_utf32_hungarian_uca_ci= { 178,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_hungarian_ci",/* name */ "", /* comment */ hungarian, /* tailoring */ @@ -37486,7 +37482,7 @@ struct charset_info_st my_charset_utf32_sinhala_uca_ci= { 179,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_sinhala_ci", /* name */ "", /* comment */ sinhala, /* tailoring */ @@ -37518,7 +37514,7 @@ struct charset_info_st my_charset_utf32_german2_uca_ci= { 180,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_german2_ci", /* name */ "", /* comment */ german2, /* tailoring */ @@ -37550,7 +37546,7 @@ struct charset_info_st my_charset_utf32_croatian_mysql561_uca_ci= { 181,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_croatian_mysql561_ci", /* name */ "", /* comment */ croatian_mysql561, /* tailoring */ @@ -37582,7 +37578,7 @@ struct charset_info_st my_charset_utf32_croatian_uca_ci= { MY_PAGE2_COLLATION_ID_UTF32,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_croatian_ci", /* name */ "", /* comment */ croatian_mariadb, /* tailoring */ @@ -37615,7 +37611,7 @@ struct charset_info_st my_charset_utf32_myanmar_uca_ci= { MY_PAGE2_COLLATION_ID_UTF32+1,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_myanmar_ci", /* name */ "", /* comment */ myanmar, /* tailoring */ @@ -37648,7 +37644,7 @@ struct charset_info_st my_charset_utf32_thai_520_w2= { MY_PAGE2_COLLATION_ID_UTF32+2,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_thai_520_w2",/* name */ "", /* comment */ "[strength 2]", /* tailoring */ @@ -37681,7 +37677,7 @@ struct charset_info_st my_charset_utf32_unicode_520_ci= { 182,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* stat e */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_unicode_520_ci",/* name */ "", /* comment */ "", /* tailoring */ @@ -37714,7 +37710,7 @@ struct charset_info_st my_charset_utf32_vietnamese_ci= { 183,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_vietnamese_ci",/* name */ "", /* comment */ vietnamese, /* tailoring */ @@ -37747,7 +37743,7 @@ struct charset_info_st my_charset_utf32_unicode_nopad_ci= { MY_NOPAD_ID(160),0,0, /* number */ MY_CS_UTF32_UCA_NOPAD_FLAGS, /* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_unicode_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -37780,7 +37776,7 @@ struct charset_info_st my_charset_utf32_unicode_520_nopad_ci= { MY_NOPAD_ID(182),0,0, /* number */ MY_CS_UTF32_UCA_NOPAD_FLAGS, /* state */ - "utf32", /* csname */ + charset_name_utf32, /* csname */ "utf32_unicode_520_nopad_ci",/* name */ "", /* comment */ "", /* tailoring */ @@ -37824,7 +37820,6 @@ struct charset_info_st my_charset_utf32_unicode_520_nopad_ci= #define MY_UCA_COLL_INIT my_coll_init_uca #include "ctype-uca.inl" - extern MY_CHARSET_HANDLER my_charset_utf16_handler; #define MY_CS_UTF16_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_NONASCII) @@ -37834,7 +37829,7 @@ struct charset_info_st my_charset_utf16_unicode_ci= { 101,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* csname */ + charset_name_utf16, /* csname */ "utf16_unicode_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -37867,7 +37862,7 @@ struct charset_info_st my_charset_utf16_icelandic_uca_ci= { 102,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* csname */ + charset_name_utf16, /* csname */ "utf16_icelandic_ci",/* name */ "", /* comment */ icelandic, /* tailoring */ @@ -37899,7 +37894,7 @@ struct charset_info_st my_charset_utf16_latvian_uca_ci= { 103,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_latvian_ci", /* name */ "", /* comment */ latvian, /* tailoring */ @@ -37931,7 +37926,7 @@ struct charset_info_st my_charset_utf16_romanian_uca_ci= { 104,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_romanian_ci", /* name */ "", /* comment */ romanian, /* tailoring */ @@ -37963,7 +37958,7 @@ struct charset_info_st my_charset_utf16_slovenian_uca_ci= { 105,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_slovenian_ci",/* name */ "", /* comment */ slovenian, /* tailoring */ @@ -37995,7 +37990,7 @@ struct charset_info_st my_charset_utf16_polish_uca_ci= { 106,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_polish_ci", /* name */ "", /* comment */ polish, /* tailoring */ @@ -38027,7 +38022,7 @@ struct charset_info_st my_charset_utf16_estonian_uca_ci= { 107,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_estonian_ci", /* name */ "", /* comment */ estonian, /* tailoring */ @@ -38059,7 +38054,7 @@ struct charset_info_st my_charset_utf16_spanish_uca_ci= { 108,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_spanish_ci", /* name */ "", /* comment */ spanish, /* tailoring */ @@ -38091,7 +38086,7 @@ struct charset_info_st my_charset_utf16_swedish_uca_ci= { 109,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_swedish_ci", /* name */ "", /* comment */ swedish, /* tailoring */ @@ -38123,7 +38118,7 @@ struct charset_info_st my_charset_utf16_turkish_uca_ci= { 110,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_turkish_ci", /* name */ "", /* comment */ turkish, /* tailoring */ @@ -38155,7 +38150,7 @@ struct charset_info_st my_charset_utf16_czech_uca_ci= { 111,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_czech_ci", /* name */ "", /* comment */ czech, /* tailoring */ @@ -38188,7 +38183,7 @@ struct charset_info_st my_charset_utf16_danish_uca_ci= { 112,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_danish_ci", /* name */ "", /* comment */ danish, /* tailoring */ @@ -38220,7 +38215,7 @@ struct charset_info_st my_charset_utf16_lithuanian_uca_ci= { 113,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_lithuanian_ci",/* name */ "", /* comment */ lithuanian, /* tailoring */ @@ -38252,7 +38247,7 @@ struct charset_info_st my_charset_utf16_slovak_uca_ci= { 114,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_slovak_ci", /* name */ "", /* comment */ slovak, /* tailoring */ @@ -38284,7 +38279,7 @@ struct charset_info_st my_charset_utf16_spanish2_uca_ci= { 115,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_spanish2_ci",/* name */ "", /* comment */ spanish2, /* tailoring */ @@ -38316,7 +38311,7 @@ struct charset_info_st my_charset_utf16_roman_uca_ci= { 116,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_roman_ci", /* name */ "", /* comment */ roman, /* tailoring */ @@ -38348,7 +38343,7 @@ struct charset_info_st my_charset_utf16_persian_uca_ci= { 117,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_persian_ci", /* name */ "", /* comment */ persian, /* tailoring */ @@ -38380,7 +38375,7 @@ struct charset_info_st my_charset_utf16_esperanto_uca_ci= { 118,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_esperanto_ci",/* name */ "", /* comment */ esperanto, /* tailoring */ @@ -38412,7 +38407,7 @@ struct charset_info_st my_charset_utf16_hungarian_uca_ci= { 119,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_hungarian_ci",/* name */ "", /* comment */ hungarian, /* tailoring */ @@ -38444,7 +38439,7 @@ struct charset_info_st my_charset_utf16_sinhala_uca_ci= { 120,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_sinhala_ci",/* name */ "", /* comment */ sinhala, /* tailoring */ @@ -38476,7 +38471,7 @@ struct charset_info_st my_charset_utf16_german2_uca_ci= { 121,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_german2_ci",/* name */ "", /* comment */ german2, /* tailoring */ @@ -38509,7 +38504,7 @@ struct charset_info_st my_charset_utf16_croatian_mysql561_uca_ci= { 122,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_croatian_mysql561_ci",/* name */ "", /* comment */ croatian_mysql561, /* tailoring */ @@ -38542,7 +38537,7 @@ struct charset_info_st my_charset_utf16_croatian_uca_ci= { MY_PAGE2_COLLATION_ID_UTF16,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_croatian_ci",/* name */ "", /* comment */ croatian_mariadb, /* tailoring */ @@ -38575,7 +38570,7 @@ struct charset_info_st my_charset_utf16_myanmar_uca_ci= { MY_PAGE2_COLLATION_ID_UTF16+1,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_myanmar_ci",/* name */ "", /* comment */ myanmar, /* tailoring */ @@ -38608,7 +38603,7 @@ struct charset_info_st my_charset_utf16_thai_520_w2= { MY_PAGE2_COLLATION_ID_UTF16+2,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_thai_520_w2",/* name */ "", /* comment */ "[strength 2]", /* tailoring */ @@ -38641,7 +38636,7 @@ struct charset_info_st my_charset_utf16_unicode_520_ci= { 123,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* csname */ + charset_name_utf16, /* csname */ "utf16_unicode_520_ci",/* name */ "", /* comment */ "", /* tailoring */ @@ -38674,7 +38669,7 @@ struct charset_info_st my_charset_utf16_vietnamese_ci= { 124,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_vietnamese_ci",/* name */ "", /* comment */ vietnamese, /* tailoring */ @@ -38707,7 +38702,7 @@ struct charset_info_st my_charset_utf16_unicode_nopad_ci= { MY_NOPAD_ID(101),0,0, /* number */ MY_CS_UTF16_UCA_NOPAD_FLAGS, /* state */ - "utf16", /* csname */ + charset_name_utf16, /* csname */ "utf16_unicode_nopad_ci", /* name */ "", /* comment */ "", /* tailoring */ @@ -38740,7 +38735,7 @@ struct charset_info_st my_charset_utf16_unicode_520_nopad_ci= { MY_NOPAD_ID(123),0,0, /* number */ MY_CS_UTF16_UCA_NOPAD_FLAGS, /* state */ - "utf16", /* csname */ + charset_name_utf16, /* csname */ "utf16_unicode_520_nopad_ci",/* name */ "", /* comment */ "", /* tailoring */ diff --git a/strings/ctype-uca.inl b/strings/ctype-uca.inl index 7c9d34d217e..ddc397ce212 100644 --- a/strings/ctype-uca.inl +++ b/strings/ctype-uca.inl @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 MariaDB Corporation + Copyright (c) 2018, 2020, MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -500,7 +500,7 @@ MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs, This functions is used for one-level and for multi-level collations. We intentionally use only primary level in multi-level collations. This helps to have PARTITION BY KEY put primarily equal records - into the same partition. E.g. in utf8_thai_520_ci records that differ + into the same partition. E.g. in utf8mb3_thai_520_ci records that differ only in tone marks go into the same partition. RETURN @@ -739,7 +739,7 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs, */ if (flags & MY_STRXFRM_PAD_WITH_SPACE) - srclen= cs->cset->lengthsp(cs, (const char*) src, srclen); + srclen= my_ci_lengthsp(cs, (const char*) src, srclen); dst= MY_FUNCTION_NAME(strnxfrm_onelevel)(cs, &cs->uca->level[0], dst, de, nweights, src, srclen, flags); diff --git a/strings/ctype-ucs2.c b/strings/ctype-ucs2.c index 2e6b1239c0a..fd79a98e59a 100644 --- a/strings/ctype-ucs2.c +++ b/strings/ctype-ucs2.c @@ -1,5 +1,5 @@ /* Copyright (c) 2003, 2013, Oracle and/or its affiliates - Copyright (c) 2009, 2016, MariaDB + Copyright (c) 2009, 2020, MariaDB This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -35,7 +35,6 @@ #define HAVE_CHARSET_mb2_or_mb4 #endif - #ifndef EILSEQ #define EILSEQ ENOENT #endif @@ -143,12 +142,12 @@ my_copy_incomplete_char(CHARSET_INFO *cs, Make sure we didn't pad to an incorrect character. */ - if (cs->cset->charlen(cs, (uchar *) dst, (uchar *) dst + cs->mbminlen) == + if (my_ci_charlen(cs, (uchar *) dst, (uchar *) dst + cs->mbminlen) == (int) cs->mbminlen) return MY_CHAR_COPY_OK; if (fix && - cs->cset->wc_mb(cs, '?', (uchar *) dst, (uchar *) dst + cs->mbminlen) == + my_ci_wc_mb(cs, '?', (uchar *) dst, (uchar *) dst + cs->mbminlen) == (int) cs->mbminlen) return MY_CHAR_COPY_FIXED; @@ -733,7 +732,7 @@ my_l10tostr_mb2_or_mb4(CHARSET_INFO *cs, for ( db= dst, de= dst + len ; (dst < de) && *p ; p++) { - int cnvres= cs->cset->wc_mb(cs,(my_wc_t)p[0],(uchar*) dst, (uchar*) de); + int cnvres= my_ci_wc_mb(cs, (my_wc_t) p[0], (uchar*) dst, (uchar*) de); if (cnvres > 0) dst+= cnvres; else @@ -796,7 +795,7 @@ cnv: for ( db= dst, de= dst + len ; (dst < de) && *p ; p++) { - int cnvres= cs->cset->wc_mb(cs, (my_wc_t) p[0], (uchar*) dst, (uchar*) de); + int cnvres= my_ci_wc_mb(cs, (my_wc_t) p[0], (uchar*) dst, (uchar*) de); if (cnvres > 0) dst+= cnvres; else @@ -1057,7 +1056,7 @@ my_fill_mb2(CHARSET_INFO *cs, char *s, size_t slen, int fill) DBUG_ASSERT((slen % 2) == 0); - buflen= cs->cset->wc_mb(cs, (my_wc_t) fill, (uchar*) buf, + buflen= my_ci_wc_mb(cs, (my_wc_t) fill, (uchar*) buf, (uchar*) buf + sizeof(buf)); DBUG_ASSERT(buflen > 0); @@ -1281,6 +1280,7 @@ my_uni_utf16(CHARSET_INFO *cs __attribute__((unused)), #ifdef HAVE_CHARSET_utf16 +const char charset_name_utf16le[]= "utf16le"; static inline void my_tolower_utf16(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) @@ -1370,7 +1370,7 @@ static void my_hash_sort_utf16(CHARSET_INFO *cs, const uchar *s, size_t slen, ulong *nr1, ulong *nr2) { - size_t lengthsp= cs->cset->lengthsp(cs, (const char *) s, slen); + size_t lengthsp= my_ci_lengthsp(cs, (const char *) s, slen); my_hash_sort_utf16_nopad(cs, s, lengthsp, nr1, nr2); } @@ -1405,7 +1405,7 @@ static int my_charlen_utf16(CHARSET_INFO *cs, const uchar *str, const uchar *end) { my_wc_t wc; - return cs->cset->mb_wc(cs, &wc, str, end); + return my_ci_mb_wc(cs, &wc, str, end); } @@ -1495,7 +1495,7 @@ static void my_hash_sort_utf16_bin(CHARSET_INFO *cs, const uchar *pos, size_t len, ulong *nr1, ulong *nr2) { - size_t lengthsp= cs->cset->lengthsp(cs, (const char *) pos, len); + size_t lengthsp= my_ci_lengthsp(cs, (const char *) pos, len); my_hash_sort_utf16_nopad_bin(cs, pos, lengthsp, nr1, nr2); } @@ -1598,6 +1598,7 @@ MY_CHARSET_HANDLER my_charset_utf16_handler= my_well_formed_char_length_utf16, my_copy_fix_mb2_or_mb4, my_uni_utf16, + my_wc_to_printable_generic }; @@ -1605,7 +1606,7 @@ struct charset_info_st my_charset_utf16_general_ci= { 54,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_general_ci", /* name */ "UTF-16 Unicode", /* comment */ NULL, /* tailoring */ @@ -1638,7 +1639,7 @@ struct charset_info_st my_charset_utf16_bin= { 55,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_bin", /* name */ "UTF-16 Unicode", /* comment */ NULL, /* tailoring */ @@ -1671,7 +1672,7 @@ struct charset_info_st my_charset_utf16_general_nopad_ci= { MY_NOPAD_ID(54),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD, - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_general_nopad_ci", /* name */ "UTF-16 Unicode", /* comment */ NULL, /* tailoring */ @@ -1705,7 +1706,7 @@ struct charset_info_st my_charset_utf16_nopad_bin= MY_NOPAD_ID(55),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII| MY_CS_NOPAD, - "utf16", /* cs name */ + charset_name_utf16, /* cs name */ "utf16_nopad_bin", /* name */ "UTF-16 Unicode", /* comment */ NULL, /* tailoring */ @@ -1740,7 +1741,7 @@ struct charset_info_st my_charset_utf16_nopad_bin= #define MY_FUNCTION_NAME(x) my_ ## x ## _utf16le_general_ci #define DEFINE_STRNXFRM_UNICODE #define DEFINE_STRNXFRM_UNICODE_NOPAD -#define MY_MB_WC(cs, pwc, s, e) (cs->cset->mb_wc(cs, pwc, s, e)) +#define MY_MB_WC(cs, pwc, s, e) (my_ci_mb_wc(cs, pwc, s, e)) #define OPTIMIZE_ASCII 0 #define UNICASE_MAXCHAR MY_UNICASE_INFO_DEFAULT_MAXCHAR #define UNICASE_PAGE0 my_unicase_default_page00 @@ -1942,6 +1943,7 @@ static MY_CHARSET_HANDLER my_charset_utf16le_handler= my_well_formed_char_length_utf16, my_copy_fix_mb2_or_mb4, my_uni_utf16le, + my_wc_to_printable_generic }; @@ -1949,7 +1951,7 @@ struct charset_info_st my_charset_utf16le_general_ci= { 56,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16le", /* cs name */ + charset_name_utf16le, /* cs name */ "utf16le_general_ci",/* name */ "UTF-16LE Unicode", /* comment */ NULL, /* tailoring */ @@ -1982,7 +1984,7 @@ struct charset_info_st my_charset_utf16le_bin= { 62,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf16le", /* cs name */ + charset_name_utf16le, /* cs name */ "utf16le_bin", /* name */ "UTF-16LE Unicode", /* comment */ NULL, /* tailoring */ @@ -2015,7 +2017,7 @@ struct charset_info_st my_charset_utf16le_general_nopad_ci= { MY_NOPAD_ID(56),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD, - "utf16le", /* cs name */ + charset_name_utf16le, /* cs name */ "utf16le_general_nopad_ci",/* name */ "UTF-16LE Unicode", /* comment */ NULL, /* tailoring */ @@ -2049,7 +2051,7 @@ struct charset_info_st my_charset_utf16le_nopad_bin= MY_NOPAD_ID(62),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII| MY_CS_NOPAD, - "utf16le", /* cs name */ + charset_name_utf16le, /* cs name */ "utf16le_nopad_bin", /* name */ "UTF-16LE Unicode", /* comment */ NULL, /* tailoring */ @@ -2613,8 +2615,7 @@ void my_fill_utf32(CHARSET_INFO *cs, #ifdef DBUG_ASSERT_EXISTS buflen= #endif - cs->cset->wc_mb(cs, (my_wc_t) fill, (uchar*) buf, - (uchar*) buf + sizeof(buf)); + my_ci_wc_mb(cs, (my_wc_t) fill, (uchar*) buf, (uchar*) buf + sizeof(buf)); DBUG_ASSERT(buflen == 4); while (s < e) { @@ -2772,6 +2773,7 @@ MY_CHARSET_HANDLER my_charset_utf32_handler= my_well_formed_char_length_utf32, my_copy_fix_mb2_or_mb4, my_uni_utf32, + my_wc_to_printable_generic }; @@ -2779,7 +2781,7 @@ struct charset_info_st my_charset_utf32_general_ci= { 60,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf32", /* cs name */ + charset_name_utf32, /* cs name */ "utf32_general_ci", /* name */ "UTF-32 Unicode", /* comment */ NULL, /* tailoring */ @@ -2812,7 +2814,7 @@ struct charset_info_st my_charset_utf32_bin= { 61,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "utf32", /* cs name */ + charset_name_utf32, /* cs name */ "utf32_bin", /* name */ "UTF-32 Unicode", /* comment */ NULL, /* tailoring */ @@ -2845,7 +2847,7 @@ struct charset_info_st my_charset_utf32_general_nopad_ci= { MY_NOPAD_ID(60),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD, - "utf32", /* cs name */ + charset_name_utf32, /* cs name */ "utf32_general_nopad_ci", /* name */ "UTF-32 Unicode", /* comment */ NULL, /* tailoring */ @@ -2879,7 +2881,7 @@ struct charset_info_st my_charset_utf32_nopad_bin= MY_NOPAD_ID(61),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII| MY_CS_NOPAD, - "utf32", /* cs name */ + charset_name_utf32, /* cs name */ "utf32_nopad_bin", /* name */ "UTF-32 Unicode", /* comment */ NULL, /* tailoring */ @@ -3366,6 +3368,7 @@ MY_CHARSET_HANDLER my_charset_ucs2_handler= my_well_formed_char_length_ucs2, my_copy_fix_mb2_or_mb4, my_uni_ucs2, + my_wc_to_printable_generic }; @@ -3373,7 +3376,7 @@ struct charset_info_st my_charset_ucs2_general_ci= { 35,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_general_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -3406,7 +3409,7 @@ struct charset_info_st my_charset_ucs2_general_mysql500_ci= { 159, 0, 0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, /* state */ - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_general_mysql500_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -3439,7 +3442,7 @@ struct charset_info_st my_charset_ucs2_bin= { 90,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII, - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -3472,7 +3475,7 @@ struct charset_info_st my_charset_ucs2_general_nopad_ci= { MY_NOPAD_ID(35),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD, - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_general_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -3505,7 +3508,7 @@ struct charset_info_st my_charset_ucs2_nopad_bin= { MY_NOPAD_ID(90),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NONASCII|MY_CS_NOPAD, - "ucs2", /* cs name */ + charset_name_ucs2, /* cs name */ "ucs2_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c index 356c1fc092c..42e2a5cdd15 100644 --- a/strings/ctype-ujis.c +++ b/strings/ctype-ujis.c @@ -32,6 +32,7 @@ #ifdef HAVE_CHARSET_ujis +const char charset_name_ujis[]= "ujis"; static const uchar ctype_ujis[257] = { @@ -67332,6 +67333,7 @@ static MY_CHARSET_HANDLER my_charset_handler= my_well_formed_char_length_ujis, my_copy_fix_mb, my_native_to_mb_ujis, + my_wc_to_printable_generic }; @@ -67340,7 +67342,7 @@ struct charset_info_st my_charset_ujis_japanese_ci= { 12,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY, /* state */ - "ujis", /* cs name */ + charset_name_ujis, /* cs name */ "ujis_japanese_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67373,7 +67375,7 @@ struct charset_info_st my_charset_ujis_bin= { 91,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT, /* state */ - "ujis", /* cs name */ + charset_name_ujis, /* cs name */ "ujis_bin", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67406,7 +67408,7 @@ struct charset_info_st my_charset_ujis_japanese_nopad_ci= { MY_NOPAD_ID(12),0,0,/* number */ MY_CS_COMPILED|MY_CS_NOPAD, /* state */ - "ujis", /* cs name */ + charset_name_ujis, /* cs name */ "ujis_japanese_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ @@ -67439,7 +67441,7 @@ struct charset_info_st my_charset_ujis_nopad_bin= { MY_NOPAD_ID(91),0,0,/* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_NOPAD, /* state */ - "ujis", /* cs name */ + charset_name_ujis, /* cs name */ "ujis_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 69ebb6b523e..b119826b4cc 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2017, MariaDB + Copyright (c) 2009, 2020, MariaDB This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public @@ -49,11 +49,11 @@ -#ifndef HAVE_CHARSET_utf8 -#define HAVE_CHARSET_utf8 +#ifndef HAVE_CHARSET_utf8mb3 +#define HAVE_CHARSET_utf8mb3 #endif -#ifdef HAVE_CHARSET_utf8 +#ifdef HAVE_CHARSET_utf8mb3 #define HAVE_UNIDATA #endif @@ -70,7 +70,7 @@ #endif -#if defined(HAVE_CHARSET_utf8) || defined(HAVE_CHARSET_utf8mb4) +#if defined(HAVE_CHARSET_utf8mb3) || defined(HAVE_CHARSET_utf8mb4) static inline int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e) @@ -106,7 +106,7 @@ int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e) return 3; } -#endif /*HAVE_CHARSET_utf8 || HAVE_CHARSET_utf8mb4*/ +#endif /*HAVE_CHARSET_utf8mb3 || HAVE_CHARSET_utf8mb4*/ #ifdef HAVE_UNIDATA @@ -1737,7 +1737,7 @@ MY_UNICASE_INFO my_unicase_default= /* - Reproduce old utf8_general_ci behaviour before we fixed Bug#27877. + Reproduce old utf8mb3_general_ci behaviour before we fixed Bug#27877. */ MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256]={ plane00_mysql500, @@ -4647,7 +4647,7 @@ my_strnxfrm_unicode_full_bin_internal(CHARSET_INFO *cs, for (; dst < de && *nweights; (*nweights)--) { int res; - if ((res= cs->cset->mb_wc(cs, &wc, src, se)) <= 0) + if ((res= my_ci_mb_wc(cs, &wc, src, se)) <= 0) break; src+= res; *dst++= (uchar) (wc >> 16); @@ -4750,7 +4750,7 @@ my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *cs, size_t len) #endif /* HAVE_UNIDATA */ -#ifdef HAVE_CHARSET_utf8 +#ifdef HAVE_CHARSET_utf8mb3 /* We consider bytes with code more than 127 as a letter. @@ -4758,7 +4758,7 @@ my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *cs, size_t len) expressions. Note, there is no need to mark byte 255 as a letter, it is illegal byte in UTF8. */ -static const uchar ctype_utf8[] = { +static const uchar ctype_utf8mb3[] = { 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, @@ -4780,7 +4780,7 @@ static const uchar ctype_utf8[] = { /* The below are taken from usa7 implementation */ -static const uchar to_lower_utf8[] = { +static const uchar to_lower_utf8mb3[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, @@ -4799,7 +4799,7 @@ static const uchar to_lower_utf8[] = { 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 }; -static const uchar to_upper_utf8[] = { +static const uchar to_upper_utf8mb3[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, @@ -4818,8 +4818,8 @@ static const uchar to_upper_utf8[] = { 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 }; -static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s, const uchar *e) +static int my_utf8mb3_uni(CHARSET_INFO *cs __attribute__((unused)), + my_wc_t * pwc, const uchar *s, const uchar *e) { return my_mb_wc_utf8mb3_quick(pwc, s, e); } @@ -4829,8 +4829,8 @@ static int my_utf8_uni(CHARSET_INFO *cs __attribute__((unused)), The same as above, but without range check for example, for a null-terminated string */ -static int my_utf8_uni_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t * pwc, const uchar *s) +static int my_utf8mb3_uni_no_range(CHARSET_INFO *cs __attribute__((unused)), + my_wc_t * pwc, const uchar *s) { uchar c; @@ -4865,8 +4865,8 @@ static int my_utf8_uni_no_range(CHARSET_INFO *cs __attribute__((unused)), } -static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r, uchar *e) +static int my_uni_utf8mb3(CHARSET_INFO *cs __attribute__((unused)), + my_wc_t wc, uchar *r, uchar *e) { if (wc < 0x80) { @@ -4901,8 +4901,8 @@ static int my_uni_utf8 (CHARSET_INFO *cs __attribute__((unused)), /* The same as above, but without range check. */ -static int my_uni_utf8_no_range(CHARSET_INFO *cs __attribute__((unused)), - my_wc_t wc, uchar *r) +static int my_uni_utf8mb3_no_range(CHARSET_INFO *cs __attribute__((unused)), + my_wc_t wc, uchar *r) { int count; @@ -4945,8 +4945,9 @@ my_toupper_utf8mb3(MY_UNICASE_INFO *uni_plane, my_wc_t *wc) } -static size_t my_caseup_utf8(CHARSET_INFO *cs, const char *src, size_t srclen, - char *dst, size_t dstlen) +static size_t my_caseup_utf8mb3(CHARSET_INFO *cs, + const char *src, size_t srclen, + char *dst, size_t dstlen) { my_wc_t wc; int srcres, dstres; @@ -4956,10 +4957,10 @@ static size_t my_caseup_utf8(CHARSET_INFO *cs, const char *src, size_t srclen, DBUG_ASSERT(src != dst || cs->caseup_multiply == 1); while ((src < srcend) && - (srcres= my_utf8_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0) + (srcres= my_utf8mb3_uni(cs, &wc, (uchar *) src, (uchar*) srcend)) > 0) { my_toupper_utf8mb3(uni_plane, &wc); - if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) + if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; dst+= dstres; @@ -4977,7 +4978,7 @@ static void my_hash_sort_utf8mb3_nopad(CHARSET_INFO *cs, const uchar *s, size_t MY_UNICASE_INFO *uni_plane= cs->caseinfo; register ulong m1= *nr1, m2= *nr2; - while ((s < e) && (res=my_utf8_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 ) + while ((s < e) && (res=my_utf8mb3_uni(cs,&wc, (uchar *)s, (uchar*)e))>0 ) { my_tosort_unicode(uni_plane, &wc, cs->state); MY_HASH_ADD_16(m1, m2, wc); @@ -5000,7 +5001,7 @@ static void my_hash_sort_utf8mb3(CHARSET_INFO *cs, const uchar *s, size_t slen, } -static size_t my_caseup_str_utf8(CHARSET_INFO *cs, char *src) +static size_t my_caseup_str_utf8mb3(CHARSET_INFO *cs, char *src) { my_wc_t wc; int srcres, dstres; @@ -5009,10 +5010,10 @@ static size_t my_caseup_str_utf8(CHARSET_INFO *cs, char *src) DBUG_ASSERT(cs->caseup_multiply == 1); while (*src && - (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0) + (srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0) { my_toupper_utf8mb3(uni_plane, &wc); - if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0) + if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; dst+= dstres; @@ -5022,8 +5023,9 @@ static size_t my_caseup_str_utf8(CHARSET_INFO *cs, char *src) } -static size_t my_casedn_utf8(CHARSET_INFO *cs, const char *src, size_t srclen, - char *dst, size_t dstlen) +static size_t my_casedn_utf8mb3(CHARSET_INFO *cs, + const char *src, size_t srclen, + char *dst, size_t dstlen) { my_wc_t wc; int srcres, dstres; @@ -5033,10 +5035,10 @@ static size_t my_casedn_utf8(CHARSET_INFO *cs, const char *src, size_t srclen, DBUG_ASSERT(src != dst || cs->casedn_multiply == 1); while ((src < srcend) && - (srcres= my_utf8_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0) + (srcres= my_utf8mb3_uni(cs, &wc, (uchar*) src, (uchar*)srcend)) > 0) { my_tolower_utf8mb3(uni_plane, &wc); - if ((dstres= my_uni_utf8(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) + if ((dstres= my_uni_utf8mb3(cs, wc, (uchar*) dst, (uchar*) dstend)) <= 0) break; src+= srcres; dst+= dstres; @@ -5045,7 +5047,7 @@ static size_t my_casedn_utf8(CHARSET_INFO *cs, const char *src, size_t srclen, } -static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) +static size_t my_casedn_str_utf8mb3(CHARSET_INFO *cs, char *src) { my_wc_t wc; int srcres, dstres; @@ -5054,10 +5056,10 @@ static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) DBUG_ASSERT(cs->casedn_multiply == 1); while (*src && - (srcres= my_utf8_uni_no_range(cs, &wc, (uchar *) src)) > 0) + (srcres= my_utf8mb3_uni_no_range(cs, &wc, (uchar *) src)) > 0) { my_tolower_utf8mb3(uni_plane, &wc); - if ((dstres= my_uni_utf8_no_range(cs, wc, (uchar*) dst)) <= 0) + if ((dstres= my_uni_utf8mb3_no_range(cs, wc, (uchar*) dst)) <= 0) break; src+= srcres; dst+= dstres; @@ -5068,12 +5070,12 @@ static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) the original string, for example: "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE" - (which is 0xC4B0 in utf8, i.e. two bytes) + (which is 0xC4B0 in utf8mb3, i.e. two bytes) is converted into "U+0069 LATIN SMALL LETTER I" - (which is 0x69 in utf8, i.e. one byte) + (which is 0x69 in utf8mb3, i.e. one byte) So, we need to put '\0' terminator after converting. */ @@ -5087,7 +5089,7 @@ static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) Compare 0-terminated UTF8 strings. SYNOPSIS - my_strcasecmp_utf8() + my_strcasecmp_utf8mb3() cs character set handler s First 0-terminated string to compare t Second 0-terminated string to compare @@ -5101,7 +5103,7 @@ static size_t my_casedn_str_utf8(CHARSET_INFO *cs, char *src) */ static -int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t) +int my_strcasecmp_utf8mb3(CHARSET_INFO *cs, const char *s, const char *t) { MY_UNICASE_INFO *uni_plane= cs->caseinfo; while (s[0] && t[0]) @@ -5125,19 +5127,19 @@ int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t) /* Scan a multibyte character. - In the future it is worth to write a special version of my_utf8_uni() + In the future it is worth to write a special version of my_utf8mb3_uni() for 0-terminated strings which will not take in account length. Now - we call the regular version of my_utf8_uni() with s+3 in the + we call the regular version of my_utf8mb3_uni() with s+3 in the last argument. s+3 is enough to scan any multibyte sequence. - Calling the regular version of my_utf8_uni is safe for 0-terminated + Calling the regular version of my_utf8mb3_uni is safe for 0-terminated strings: we will never lose the end of the string: If we have 0 character in the middle of a multibyte sequence, - then my_utf8_uni will always return a negative number, so the + then my_utf8mb3_uni will always return a negative number, so the loop with finish. */ - res= my_utf8_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3); + res= my_utf8mb3_uni(cs,&s_wc, (const uchar*)s, (const uchar*) s + 3); /* In the case of wrong multibyte sequence we will @@ -5162,7 +5164,7 @@ int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t) } else { - int res=my_utf8_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3); + int res=my_utf8mb3_uni(cs,&t_wc, (const uchar*)t, (const uchar*) t + 3); if (res <= 0) return strcmp(s, t); t+= res; @@ -5180,10 +5182,10 @@ int my_strcasecmp_utf8(CHARSET_INFO *cs, const char *s, const char *t) static -int my_wildcmp_utf8(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) +int my_wildcmp_utf8mb3(CHARSET_INFO *cs, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many) { MY_UNICASE_INFO *uni_plane= cs->caseinfo; return my_wildcmp_unicode(cs,str,str_end,wildstr,wildend, @@ -5192,8 +5194,8 @@ int my_wildcmp_utf8(CHARSET_INFO *cs, static -int my_charlen_utf8(CHARSET_INFO *cs __attribute__((unused)), - const uchar *s, const uchar *e) +int my_charlen_utf8mb3(CHARSET_INFO *cs __attribute__((unused)), + const uchar *s, const uchar *e) { uchar c; @@ -5208,23 +5210,23 @@ int my_charlen_utf8(CHARSET_INFO *cs __attribute__((unused)), } -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8 -#define CHARLEN(cs,str,end) my_charlen_utf8(cs,str,end) +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3 +#define CHARLEN(cs,str,end) my_charlen_utf8mb3(cs,str,end) #define DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN #include "ctype-mb.inl" #undef MY_FUNCTION_NAME #undef CHARLEN #undef DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN -/* my_well_formed_char_length_utf8 */ +/* my_well_formed_char_length_utf8mb3 */ -static inline int my_weight_mb1_utf8_general_ci(uchar b) +static inline int my_weight_mb1_utf8mb3_general_ci(uchar b) { return (int) my_unicase_default_page00[b & 0xFF].sort; } -static inline int my_weight_mb2_utf8_general_ci(uchar b0, uchar b1) +static inline int my_weight_mb2_utf8mb3_general_ci(uchar b0, uchar b1) { my_wc_t wc= UTF8MB2_CODE(b0, b1); MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; @@ -5232,7 +5234,7 @@ static inline int my_weight_mb2_utf8_general_ci(uchar b0, uchar b1) } -static inline int my_weight_mb3_utf8_general_ci(uchar b0, uchar b1, uchar b2) +static inline int my_weight_mb3_utf8mb3_general_ci(uchar b0, uchar b1, uchar b2) { my_wc_t wc= UTF8MB3_CODE(b0, b1, b2); MY_UNICASE_CHARACTER *page= my_unicase_default_pages[wc >> 8]; @@ -5240,7 +5242,7 @@ static inline int my_weight_mb3_utf8_general_ci(uchar b0, uchar b1, uchar b2) } -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8_general_ci +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3_general_ci #define DEFINE_STRNXFRM_UNICODE #define DEFINE_STRNXFRM_UNICODE_NOPAD #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e) @@ -5249,28 +5251,28 @@ static inline int my_weight_mb3_utf8_general_ci(uchar b0, uchar b1, uchar b2) #define UNICASE_PAGE0 my_unicase_default_page00 #define UNICASE_PAGES my_unicase_default_pages #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(x) my_weight_mb1_utf8_general_ci(x) -#define WEIGHT_MB2(x,y) my_weight_mb2_utf8_general_ci(x,y) -#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8_general_ci(x,y,z) +#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) +#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) +#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z) #include "strcoll.inl" #define DEFINE_STRNNCOLLSP_NOPAD -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8_general_nopad_ci +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3_general_nopad_ci #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(x) my_weight_mb1_utf8_general_ci(x) -#define WEIGHT_MB2(x,y) my_weight_mb2_utf8_general_ci(x,y) -#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8_general_ci(x,y,z) +#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) +#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) +#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z) #include "strcoll.inl" -static inline int my_weight_mb1_utf8_general_mysql500_ci(uchar b) +static inline int my_weight_mb1_utf8mb3_general_mysql500_ci(uchar b) { return (int) plane00_mysql500[b & 0xFF].sort; } -static inline int my_weight_mb2_utf8_general_mysql500_ci(uchar b0, uchar b1) +static inline int my_weight_mb2_utf8mb3_general_mysql500_ci(uchar b0, uchar b1) { my_wc_t wc= UTF8MB2_CODE(b0, b1); MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8]; @@ -5279,7 +5281,7 @@ static inline int my_weight_mb2_utf8_general_mysql500_ci(uchar b0, uchar b1) static inline int -my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2) +my_weight_mb3_utf8mb3_general_mysql500_ci(uchar b0, uchar b1, uchar b2) { my_wc_t wc= UTF8MB3_CODE(b0, b1, b2); MY_UNICASE_CHARACTER *page= my_unicase_pages_mysql500[wc >> 8]; @@ -5287,7 +5289,7 @@ my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2) } -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8_general_mysql500_ci +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3_general_mysql500_ci #define DEFINE_STRNXFRM_UNICODE #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e) #define OPTIMIZE_ASCII 1 @@ -5295,13 +5297,13 @@ my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2) #define UNICASE_PAGE0 plane00_mysql500 #define UNICASE_PAGES my_unicase_pages_mysql500 #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(x) my_weight_mb1_utf8_general_mysql500_ci(x) -#define WEIGHT_MB2(x,y) my_weight_mb2_utf8_general_mysql500_ci(x,y) -#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8_general_mysql500_ci(x,y,z) +#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_mysql500_ci(x) +#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_mysql500_ci(x,y) +#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_mysql500_ci(x,y,z) #include "strcoll.inl" -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8_bin +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3_bin #define DEFINE_STRNXFRM_UNICODE_BIN2 #define MY_MB_WC(cs, pwc, s, e) my_mb_wc_utf8mb3_quick(pwc, s, e) #define OPTIMIZE_ASCII 1 @@ -5313,7 +5315,7 @@ my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2) #define DEFINE_STRNNCOLLSP_NOPAD -#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8_nopad_bin +#define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb3_nopad_bin #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) #define WEIGHT_MB1(x) ((int) (uchar) (x)) #define WEIGHT_MB2(x,y) ((int) UTF8MB2_CODE(x,y)) @@ -5324,11 +5326,11 @@ my_weight_mb3_utf8_general_mysql500_ci(uchar b0, uchar b1, uchar b2) TODO-10.2: join this with pad_max_char() in ctype-mb.c */ static void -my_fill_utf8_mb(CHARSET_INFO *cs, char *str, size_t length, int fill) +my_fill_utf8mb3_mb(CHARSET_INFO *cs, char *str, size_t length, int fill) { char *end= str + length; char buf[10]; - char buflen= cs->cset->native_to_mb(cs, (my_wc_t) fill, (uchar*) buf, + char buflen= my_ci_native_to_mb(cs, (my_wc_t) fill, (uchar*) buf, (uchar*) buf + sizeof(buf)); DBUG_ASSERT(buflen > 0); for ( ; str + buflen <= end ; ) @@ -5343,56 +5345,56 @@ my_fill_utf8_mb(CHARSET_INFO *cs, char *str, size_t length, int fill) static void -my_fill_utf8(CHARSET_INFO *cs, char *str, size_t length, int fill) +my_fill_utf8mb3(CHARSET_INFO *cs, char *str, size_t length, int fill) { if (fill < 0x80) my_fill_8bit(cs, str, length, fill); else - my_fill_utf8_mb(cs, str, length, fill); + my_fill_utf8mb3_mb(cs, str, length, fill); } -static MY_COLLATION_HANDLER my_collation_utf8_general_ci_handler = +static MY_COLLATION_HANDLER my_collation_utf8mb3_general_ci_handler = { NULL, /* init */ - my_strnncoll_utf8_general_ci, - my_strnncollsp_utf8_general_ci, - my_strnncollsp_nchars_utf8_general_ci, - my_strnxfrm_utf8_general_ci, + my_strnncoll_utf8mb3_general_ci, + my_strnncollsp_utf8mb3_general_ci, + my_strnncollsp_nchars_utf8mb3_general_ci, + my_strnxfrm_utf8mb3_general_ci, my_strnxfrmlen_unicode, my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, + my_wildcmp_utf8mb3, + my_strcasecmp_utf8mb3, my_instr_mb, my_hash_sort_utf8mb3, my_propagate_complex }; -static MY_COLLATION_HANDLER my_collation_utf8_general_mysql500_ci_handler = +static MY_COLLATION_HANDLER my_collation_utf8mb3_general_mysql500_ci_handler = { NULL, /* init */ - my_strnncoll_utf8_general_mysql500_ci, - my_strnncollsp_utf8_general_mysql500_ci, - my_strnncollsp_nchars_utf8_general_mysql500_ci, - my_strnxfrm_utf8_general_mysql500_ci, + my_strnncoll_utf8mb3_general_mysql500_ci, + my_strnncollsp_utf8mb3_general_mysql500_ci, + my_strnncollsp_nchars_utf8mb3_general_mysql500_ci, + my_strnxfrm_utf8mb3_general_mysql500_ci, my_strnxfrmlen_unicode, my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, + my_wildcmp_utf8mb3, + my_strcasecmp_utf8mb3, my_instr_mb, my_hash_sort_utf8mb3, my_propagate_complex }; -static MY_COLLATION_HANDLER my_collation_utf8_bin_handler = +static MY_COLLATION_HANDLER my_collation_utf8mb3_bin_handler = { NULL, /* init */ - my_strnncoll_utf8_bin, - my_strnncollsp_utf8_bin, - my_strnncollsp_nchars_utf8_bin, - my_strnxfrm_utf8_bin, + my_strnncoll_utf8mb3_bin, + my_strnncollsp_utf8mb3_bin, + my_strnncollsp_nchars_utf8mb3_bin, + my_strnxfrm_utf8mb3_bin, my_strnxfrmlen_unicode, my_like_range_mb, my_wildcmp_mb_bin, @@ -5403,30 +5405,30 @@ static MY_COLLATION_HANDLER my_collation_utf8_bin_handler = }; -static MY_COLLATION_HANDLER my_collation_utf8_general_nopad_ci_handler = +static MY_COLLATION_HANDLER my_collation_utf8mb3_general_nopad_ci_handler = { NULL, /* init */ - my_strnncoll_utf8_general_ci, - my_strnncollsp_utf8_general_nopad_ci, - my_strnncollsp_nchars_utf8_general_nopad_ci, - my_strnxfrm_nopad_utf8_general_ci, + my_strnncoll_utf8mb3_general_ci, + my_strnncollsp_utf8mb3_general_nopad_ci, + my_strnncollsp_nchars_utf8mb3_general_nopad_ci, + my_strnxfrm_nopad_utf8mb3_general_ci, my_strnxfrmlen_unicode, my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, + my_wildcmp_utf8mb3, + my_strcasecmp_utf8mb3, my_instr_mb, my_hash_sort_utf8mb3_nopad, my_propagate_complex }; -static MY_COLLATION_HANDLER my_collation_utf8_nopad_bin_handler = +static MY_COLLATION_HANDLER my_collation_utf8mb3_nopad_bin_handler = { NULL, /* init */ - my_strnncoll_utf8_bin, - my_strnncollsp_utf8_nopad_bin, - my_strnncollsp_nchars_utf8_nopad_bin, - my_strnxfrm_nopad_utf8_bin, + my_strnncoll_utf8mb3_bin, + my_strnncollsp_utf8mb3_nopad_bin, + my_strnncollsp_nchars_utf8mb3_nopad_bin, + my_strnxfrm_nopad_utf8mb3_bin, my_strnxfrmlen_unicode, my_like_range_mb, my_wildcmp_mb_bin, @@ -5437,24 +5439,24 @@ static MY_COLLATION_HANDLER my_collation_utf8_nopad_bin_handler = }; -MY_CHARSET_HANDLER my_charset_utf8_handler= +MY_CHARSET_HANDLER my_charset_utf8mb3_handler= { NULL, /* init */ my_numchars_mb, my_charpos_mb, my_lengthsp_8bit, my_numcells_mb, - my_utf8_uni, - my_uni_utf8, + my_utf8mb3_uni, + my_uni_utf8mb3, my_mb_ctype_mb, - my_caseup_str_utf8, - my_casedn_str_utf8, - my_caseup_utf8, - my_casedn_utf8, + my_caseup_str_utf8mb3, + my_casedn_str_utf8mb3, + my_caseup_utf8mb3, + my_casedn_utf8mb3, my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, - my_fill_utf8, + my_fill_utf8mb3, my_strntol_8bit, my_strntoul_8bit, my_strntoll_8bit, @@ -5463,26 +5465,27 @@ MY_CHARSET_HANDLER my_charset_utf8_handler= my_strtoll10_8bit, my_strntoull10rnd_8bit, my_scan_8bit, - my_charlen_utf8, - my_well_formed_char_length_utf8, + my_charlen_utf8mb3, + my_well_formed_char_length_utf8mb3, my_copy_fix_mb, - my_uni_utf8, + my_uni_utf8mb3, + my_wc_to_printable_generic }; -struct charset_info_st my_charset_utf8_general_ci= +struct charset_info_st my_charset_utf8mb3_general_ci= { 33,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_general_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_general_ci", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ + to_upper_utf8mb3, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ @@ -5499,23 +5502,23 @@ struct charset_info_st my_charset_utf8_general_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, - &my_collation_utf8_general_ci_handler + &my_charset_utf8mb3_handler, + &my_collation_utf8mb3_general_ci_handler }; -struct charset_info_st my_charset_utf8_general_mysql500_ci= +struct charset_info_st my_charset_utf8mb3_general_mysql500_ci= { 223,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_general_mysql500_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_general_mysql500_ci", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ + to_upper_utf8mb3, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ @@ -5532,22 +5535,22 @@ struct charset_info_st my_charset_utf8_general_mysql500_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, - &my_collation_utf8_general_mysql500_ci_handler + &my_charset_utf8mb3_handler, + &my_collation_utf8mb3_general_mysql500_ci_handler }; -struct charset_info_st my_charset_utf8_bin= +struct charset_info_st my_charset_utf8mb3_bin= { 83,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_bin", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_bin", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ NULL, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ @@ -5565,23 +5568,23 @@ struct charset_info_st my_charset_utf8_bin= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, - &my_collation_utf8_bin_handler + &my_charset_utf8mb3_handler, + &my_collation_utf8mb3_bin_handler }; -struct charset_info_st my_charset_utf8_general_nopad_ci= +struct charset_info_st my_charset_utf8mb3_general_nopad_ci= { MY_NOPAD_ID(33),0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NOPAD, /* state */ - "utf8", /* cs name */ - "utf8_general_nopad_ci", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_general_nopad_ci", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ + to_upper_utf8mb3, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ @@ -5598,22 +5601,22 @@ struct charset_info_st my_charset_utf8_general_nopad_ci= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, - &my_collation_utf8_general_nopad_ci_handler + &my_charset_utf8mb3_handler, + &my_collation_utf8mb3_general_nopad_ci_handler }; -struct charset_info_st my_charset_utf8_nopad_bin= +struct charset_info_st my_charset_utf8mb3_nopad_bin= { MY_NOPAD_ID(83),0,0,/* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_BINSORT|MY_CS_UNICODE|MY_CS_NOPAD, - "utf8", /* cs name */ - "utf8_nopad_bin", /* name */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_nopad_bin", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ NULL, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ @@ -5631,8 +5634,8 @@ struct charset_info_st my_charset_utf8_nopad_bin= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, - &my_collation_utf8_nopad_bin_handler + &my_charset_utf8mb3_handler, + &my_collation_utf8mb3_nopad_bin_handler }; @@ -5645,7 +5648,7 @@ struct charset_info_st my_charset_utf8_nopad_bin= * variable to what they actually do. */ -static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, +static int my_strnncoll_utf8mb3_cs(CHARSET_INFO *cs, const uchar *s, size_t slen, const uchar *t, size_t tlen, my_bool t_is_prefix) @@ -5660,8 +5663,8 @@ static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, while ( s < se && t < te ) { - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); + s_res=my_utf8mb3_uni(cs,&s_wc, s, se); + t_res=my_utf8mb3_uni(cs,&t_wc, t, te); if ( s_res <= 0 || t_res <= 0 ) @@ -5690,7 +5693,7 @@ static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, return t_is_prefix ? t-te : ((diff == 0) ? save_diff : diff); } -static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, +static int my_strnncollsp_utf8mb3_cs(CHARSET_INFO *cs, const uchar *s, size_t slen, const uchar *t, size_t tlen) { @@ -5703,8 +5706,8 @@ static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, while ( s < se && t < te ) { - s_res=my_utf8_uni(cs,&s_wc, s, se); - t_res=my_utf8_uni(cs,&t_wc, t, te); + s_res=my_utf8mb3_uni(cs,&s_wc, s, se); + t_res=my_utf8mb3_uni(cs,&t_wc, t, te); if ( s_res <= 0 || t_res <= 0 ) { @@ -5753,31 +5756,31 @@ static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, static MY_COLLATION_HANDLER my_collation_cs_handler = { NULL, /* init */ - my_strnncoll_utf8_cs, - my_strnncollsp_utf8_cs, + my_strnncoll_utf8mb3_cs, + my_strnncollsp_utf8mb3_cs, my_strnncollsp_nchars_generic, - my_strnxfrm_utf8_general_ci, + my_strnxfrm_utf8mb3_general_ci, my_strnxfrmlen_unicode, my_like_range_simple, my_wildcmp_mb, - my_strcasecmp_utf8, + my_strcasecmp_utf8mb3, my_instr_mb, - my_hash_sort_utf8, + my_hash_sort_utf8mb3, my_propagate_simple }; -struct charset_info_st my_charset_utf8_general_cs= +struct charset_info_st my_charset_utf8mb3_general_cs= { 254,0,0, /* number */ - MY_CS_COMPILED|MY_CS_UNICODE, /* state */ - "utf8", /* cs name */ - "utf8_general_cs", /* name */ + MY_CS_COMPILED|MY_CS_UNICODE, /* state */ + charset_name_utf8, /* cs name */ + MY_UTF8MB3 "_general_cs", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ + to_upper_utf8mb3, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ @@ -5794,7 +5797,7 @@ struct charset_info_st my_charset_utf8_general_cs= ' ', /* pad char */ 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ - &my_charset_utf8_handler, + &my_charset_utf8mb3_handler, &my_collation_cs_handler }; #endif /* Cybozu Hack */ @@ -7028,10 +7031,20 @@ static int my_charlen_filename(CHARSET_INFO *cs, const uchar *str, const uchar *end) { my_wc_t wc; - return cs->cset->mb_wc(cs, &wc, str, end); + return my_ci_mb_wc(cs, &wc, str, end); } +static int +my_wc_to_printable_filename(CHARSET_INFO *cs, my_wc_t wc, + uchar *str, uchar *end) +{ + return my_wc_to_printable_ex(cs, wc, str, end, + '\\', 5, 1); +} + + + #define MY_FUNCTION_NAME(x) my_ ## x ## _filename #define CHARLEN(cs,str,end) my_charlen_filename(cs,str,end) #define DEFINE_WELL_FORMED_CHAR_LENGTH_USING_CHARLEN @@ -7052,9 +7065,9 @@ my_charlen_filename(CHARSET_INFO *cs, const uchar *str, const uchar *end) /* #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(x) my_weight_mb1_utf8_general_ci(x) -#define WEIGHT_MB2(x,y) my_weight_mb2_utf8_general_ci(x,y) -#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8_general_ci(x,y,z) +#define WEIGHT_MB1(x) my_weight_mb1_utf8mb3_general_ci(x) +#define WEIGHT_MB2(x,y) my_weight_mb2_utf8mb3_general_ci(x,y) +#define WEIGHT_MB3(x,y,z) my_weight_mb3_utf8mb3_general_ci(x,y,z) */ #include "strcoll.inl" @@ -7068,8 +7081,8 @@ static MY_COLLATION_HANDLER my_collation_filename_handler = my_strnxfrm_filename, my_strnxfrmlen_unicode, my_like_range_mb, - my_wildcmp_utf8, - my_strcasecmp_utf8, + my_wildcmp_utf8mb3, + my_strcasecmp_utf8mb3, my_instr_mb, my_hash_sort_utf8mb3, my_propagate_complex @@ -7085,10 +7098,10 @@ static MY_CHARSET_HANDLER my_charset_filename_handler= my_mb_wc_filename, my_wc_mb_filename, my_mb_ctype_mb, - my_caseup_str_utf8, - my_casedn_str_utf8, - my_caseup_utf8, - my_casedn_utf8, + my_caseup_str_utf8mb3, + my_casedn_str_utf8mb3, + my_caseup_utf8mb3, + my_casedn_utf8mb3, my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, @@ -7105,6 +7118,7 @@ static MY_CHARSET_HANDLER my_charset_filename_handler= my_well_formed_char_length_filename, my_copy_fix_mb, my_wc_mb_filename, + my_wc_to_printable_filename }; @@ -7117,10 +7131,10 @@ struct charset_info_st my_charset_filename= "filename", /* name */ "", /* comment */ NULL, /* tailoring */ - ctype_utf8, /* ctype */ - to_lower_utf8, /* to_lower */ - to_upper_utf8, /* to_upper */ - to_upper_utf8, /* sort_order */ + ctype_utf8mb3, /* ctype */ + to_lower_utf8mb3, /* to_lower */ + to_upper_utf8mb3, /* to_upper */ + to_upper_utf8mb3, /* sort_order */ NULL, /* uca */ NULL, /* tab_to_uni */ NULL, /* tab_from_uni */ @@ -7509,12 +7523,12 @@ my_casedn_str_utf8mb4(CHARSET_INFO *cs, char *src) the original string, for example: "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE" - (which is 0xC4B0 in utf8, i.e. two bytes) + (which is 0xC4B0 in utf8mb3, i.e. two bytes) is converted into "U+0069 LATIN SMALL LETTER I" - (which is 0x69 in utf8, i.e. one byte) + (which is 0x69 in utf8mb3, i.e. one byte) So, we need to put '\0' terminator after converting. */ @@ -7656,9 +7670,9 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), #define UNICASE_PAGES my_unicase_default_pages #define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(b0) my_weight_mb1_utf8_general_ci(b0) -#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf8_general_ci(b0,b1) -#define WEIGHT_MB3(b0,b1,b2) my_weight_mb3_utf8_general_ci(b0,b1,b2) +#define WEIGHT_MB1(b0) my_weight_mb1_utf8mb3_general_ci(b0) +#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf8mb3_general_ci(b0,b1) +#define WEIGHT_MB3(b0,b1,b2) my_weight_mb3_utf8mb3_general_ci(b0,b1,b2) /* All non-BMP characters have the same weight. */ @@ -7679,9 +7693,9 @@ my_charlen_utf8mb4(CHARSET_INFO *cs __attribute__((unused)), #define MY_FUNCTION_NAME(x) my_ ## x ## _utf8mb4_general_nopad_ci #define IS_MB4_CHAR(b0,b1,b2,b3) IS_UTF8MB4_STEP3(b0,b1,b2,b3) #define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) -#define WEIGHT_MB1(b0) my_weight_mb1_utf8_general_ci(b0) -#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf8_general_ci(b0,b1) -#define WEIGHT_MB3(b0,b1,b2) my_weight_mb3_utf8_general_ci(b0,b1,b2) +#define WEIGHT_MB1(b0) my_weight_mb1_utf8mb3_general_ci(b0) +#define WEIGHT_MB2(b0,b1) my_weight_mb2_utf8mb3_general_ci(b0,b1) +#define WEIGHT_MB3(b0,b1,b2) my_weight_mb3_utf8mb3_general_ci(b0,b1,b2) /* All non-BMP characters have the same weight. */ @@ -7784,7 +7798,7 @@ MY_CHARSET_HANDLER my_charset_utf8mb4_handler= my_snprintf_8bit, my_long10_to_str_8bit, my_longlong10_to_str_8bit, - my_fill_utf8, + my_fill_utf8mb3, my_strntol_8bit, my_strntoul_8bit, my_strntoll_8bit, @@ -7797,6 +7811,7 @@ MY_CHARSET_HANDLER my_charset_utf8mb4_handler= my_well_formed_char_length_utf8mb4, my_copy_fix_mb, my_wc_mb_utf8mb4, + my_wc_to_printable_generic }; @@ -7805,7 +7820,7 @@ struct charset_info_st my_charset_utf8mb4_general_ci= { 45,0,0, /* number */ MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT, /* state */ - MY_UTF8MB4, /* cs name */ + charset_name_utf8mb4, /* cs name */ MY_UTF8MB4_GENERAL_CI,/* name */ "UTF-8 Unicode", /* comment */ NULL, /* tailoring */ @@ -7839,7 +7854,7 @@ struct charset_info_st my_charset_utf8mb4_bin= 46,0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE| MY_CS_UNICODE_SUPPLEMENT, /* state */ - MY_UTF8MB4, /* cs name */ + charset_name_utf8mb4, /* cs name */ MY_UTF8MB4_BIN, /* name */ "UTF-8 Unicode", /* comment */ NULL, /* tailoring */ @@ -7873,7 +7888,7 @@ struct charset_info_st my_charset_utf8mb4_general_nopad_ci= MY_NOPAD_ID(45),0,0,/* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_UNICODE_SUPPLEMENT| MY_CS_NOPAD, /* state */ - MY_UTF8MB4, /* cs name */ + charset_name_utf8mb4, /* cs name */ MY_UTF8MB4_GENERAL_NOPAD_CI,/* name */ "UTF-8 Unicode", /* comment */ NULL, /* tailoring */ @@ -7907,7 +7922,7 @@ struct charset_info_st my_charset_utf8mb4_nopad_bin= MY_NOPAD_ID(46),0,0, /* number */ MY_CS_COMPILED|MY_CS_BINSORT|MY_CS_STRNXFRM|MY_CS_UNICODE| MY_CS_UNICODE_SUPPLEMENT|MY_CS_NOPAD, /* state */ - MY_UTF8MB4, /* cs name */ + charset_name_utf8mb4, /* cs name */ MY_UTF8MB4_NOPAD_BIN, /* name */ "UTF-8 Unicode", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype-win1250ch.c b/strings/ctype-win1250ch.c index 15fa6299e4e..4efdce5eaf7 100644 --- a/strings/ctype-win1250ch.c +++ b/strings/ctype-win1250ch.c @@ -52,6 +52,7 @@ #ifdef HAVE_CHARSET_cp1250 +const char charset_name_cp1250[]= "cp1250"; static const uint16 tab_cp1250_uni[256]={ 0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007, @@ -691,7 +692,7 @@ struct charset_info_st my_charset_cp1250_czech_ci = 34,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT| MY_CS_STRNXFRM_BAD_NWEIGHTS|MY_CS_NON1TO1, /* state */ - "cp1250", /* cs name */ + charset_name_cp1250, /* cs name */ "cp1250_czech_cs", /* name */ "", /* comment */ NULL, /* tailoring */ diff --git a/strings/ctype.c b/strings/ctype.c index 0cf1131ab57..f18d5b61a37 100644 --- a/strings/ctype.c +++ b/strings/ctype.c @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2014, SkySQL Ab. + Copyright (c) 2009, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -36,6 +36,12 @@ */ +const char charset_name_latin2[]= "latin2"; +const char charset_name_utf8[]= "utf8"; +const char charset_name_utf16[]= "utf16"; +const char charset_name_utf32[]= "utf32"; +const char charset_name_ucs2[]= "ucs2"; +const char charset_name_utf8mb4[]= "utf8mb4"; /* Avoid using my_snprintf @@ -413,7 +419,7 @@ tailoring_append2(MY_XML_PARSER *st, static size_t scan_one_character(const char *s, const char *e, my_wc_t *wc) { - CHARSET_INFO *cs= &my_charset_utf8_general_ci; + CHARSET_INFO *cs= &my_charset_utf8mb3_general_ci; if (s >= e) return 0; @@ -434,7 +440,7 @@ scan_one_character(const char *s, const char *e, my_wc_t *wc) } else /* Non-escaped character */ { - int rc= cs->cset->mb_wc(cs, wc, (uchar *) s, (uchar *) e); + int rc= my_ci_mb_wc(cs, wc, (uchar *) s, (uchar *) e); if (rc > 0) return (size_t) rc; } @@ -639,7 +645,7 @@ static int cs_value(MY_XML_PARSER *st,const char *attr, size_t len) break; case _CS_CTYPEMAP: fill_uchar(i->ctype,MY_CS_CTYPE_TABLE_SIZE,attr,len); - i->cs.ctype=i->ctype; + i->cs.m_ctype=i->ctype; break; /* Special purpose commands */ @@ -867,8 +873,7 @@ my_string_metadata_get_mb(MY_STRING_METADATA *metadata, metadata->char_length++) { my_wc_t wc; - int mblen= cs->cset->mb_wc(cs, &wc, (const uchar *) str, - (const uchar *) strend); + int mblen= my_ci_mb_wc(cs, &wc, (const uchar *) str, (const uchar *) strend); if (mblen > 0) /* Assigned character */ { if (wc > 0x7F) @@ -916,7 +921,7 @@ my_string_metadata_get(MY_STRING_METADATA *metadata, /* Check repertoire: detect pure ascii strings */ -uint +my_repertoire_t my_string_repertoire(CHARSET_INFO *cs, const char *str, size_t length) { if (cs->mbminlen == 1 && !(cs->state & MY_CS_NONASCII)) @@ -929,7 +934,7 @@ my_string_repertoire(CHARSET_INFO *cs, const char *str, size_t length) my_wc_t wc; int chlen; for (; - (chlen= cs->cset->mb_wc(cs, &wc, (uchar*) str, (uchar*) strend)) > 0; + (chlen= my_ci_mb_wc(cs, &wc, (uchar*) str, (uchar*) strend)) > 0; str+= chlen) { if (wc > 0x7F) @@ -943,7 +948,7 @@ my_string_repertoire(CHARSET_INFO *cs, const char *str, size_t length) /* Returns repertoire for charset */ -uint my_charset_repertoire(CHARSET_INFO *cs) +my_repertoire_t my_charset_repertoire(CHARSET_INFO *cs) { return cs->state & MY_CS_PUREASCII ? MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; @@ -985,6 +990,142 @@ my_charset_is_ascii_based(CHARSET_INFO *cs) } +/** + Detect if a Unicode code point is printable. +*/ +static inline my_bool +my_is_printable(my_wc_t wc) +{ + /* + Blocks: + U+0000 .. U+001F control + U+0020 .. U+007E printable + U+007F .. U+009F control + U+00A0 .. U+00FF printable + U+0100 .. U+10FFFF As of Unicode-6.1.0, this range does not have any + characters of the "Cc" (Other, control) category. + Should be mostly safe to print. + Except for the surrogate halfs, + which are encoding components, not real characters. + */ + if (wc >= 0x20 && wc <= 0x7E) /* Quickly detect ASCII printable */ + return TRUE; + if (wc <= 0x9F) /* The rest of U+0000..U+009F are control characters */ + { + /* NL, CR, TAB are Ok */ + return (wc == '\r' || wc == '\n' || wc == '\t'); + } + /* + Surrogate halfs (when alone) print badly in terminals: + SELECT _ucs2 0xD800; + Let's escape them as well. + */ + if (wc >= 0xD800 && wc <= 0xDFFF) + return FALSE; + return TRUE; +} + + +static uint to_printable_8bit(uchar *dst, my_wc_t wc, uint bs) +{ + /* + This function is used only in context of error messages for now. + All non-BMP characters are currently replaced to question marks + when a message is put into diagnostics area. + */ + DBUG_ASSERT(wc < 0x10000); + *dst++= (char) bs; + *dst++= _dig_vec_upper[(wc >> 12) & 0x0F]; + *dst++= _dig_vec_upper[(wc >> 8) & 0x0F]; + *dst++= _dig_vec_upper[(wc >> 4) & 0x0F]; + *dst++= _dig_vec_upper[wc & 0x0F]; + return MY_CS_PRINTABLE_CHAR_LENGTH; +} + + +static uint my_printable_length(uint bslen, uint diglen) +{ + return bslen + (MY_CS_PRINTABLE_CHAR_LENGTH - 1) * diglen; +} + + +/** + Encode an Unicode character "wc" into a printable string. + This function is suitable for any character set, including + ASCII-incompatible multi-byte character sets, e.g. ucs2, utf16, utf32. +*/ +int +my_wc_to_printable_ex(CHARSET_INFO *cs, my_wc_t wc, + uchar *str, uchar *end, + uint bs, uint bslen, uint diglen) +{ + uchar *str0; + uint i, length; + uchar tmp[MY_CS_PRINTABLE_CHAR_LENGTH * MY_CS_MBMAXLEN]; + + if (my_is_printable(wc)) + { + int mblen= my_ci_wc_mb(cs, wc, str, end); + if (mblen > 0) + return mblen; + } + + if (str + my_printable_length(bslen, diglen) > end) + return MY_CS_TOOSMALLN(my_printable_length(bslen, diglen)); + + if ((cs->state & MY_CS_NONASCII) == 0) + return to_printable_8bit(str, wc, bs); + + length= to_printable_8bit(tmp, wc, bs); + str0= str; + for (i= 0; i < length; i++) + { + uint expected_length= i == 0 ? bslen : diglen; + if (my_ci_wc_mb(cs, tmp[i], str, end) != (int) expected_length) + { + DBUG_ASSERT(0); + return MY_CS_ILSEQ; + } + str+= expected_length; + } + return (int) (str - str0); +} + + +int +my_wc_to_printable_8bit(CHARSET_INFO *cs, my_wc_t wc, + uchar *str, uchar *end) +{ + /* + Special case: swe7 does not have the backslash character. + Use dot instead of backslash for escaping. + */ + uint bs= cs->tab_to_uni && cs->tab_to_uni['\\'] != '\\' ? '.' : '\\'; + DBUG_ASSERT(cs->mbminlen == 1); + /* + Additionally, if the original swe7 string contains backslashes, + replace them to dots, so this error message: + Invalid swe7 character string: '\xEF\xBC\xB4' + is displayed as: + Invalid swe7 character string: '.xEF.xBC.xB4' + which is more readable than what would happen without '\'-to-dot mapping: + Invalid swe7 character string: '.005CxEF.005CxBC.005CxB4' + */ + if (bs == '.' && wc == '\\') + wc= '.'; + return my_wc_to_printable_ex(cs, wc, str, end, bs, 1, 1); +} + + +int +my_wc_to_printable_generic(CHARSET_INFO *cs, my_wc_t wc, + uchar *str, uchar *end) +{ + return my_wc_to_printable_ex(cs, wc, str, end, '\\', + cs->mbminlen, cs->mbminlen); +} + + /* Convert a string between two character sets. 'to' must be large enough to store (form_length * to_cs->mbmaxlen) bytes. diff --git a/strings/decimal.c b/strings/decimal.c index aa3a78fca24..acb613f1b74 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -2633,7 +2633,8 @@ void test_d2f(const char *s, int ex) void test_d2b2d(const char *str, int p, int s, const char *orig, int ex) { - char s1[100], buf[100], *end; + char s1[100], *end; + uchar buf[100]; int res, i, size=decimal_bin_size(p, s); sprintf(s1, "'%s'", str); @@ -2951,27 +2952,27 @@ int main() test_f2d(1234500009876.5, 0); printf("==== ulonglong2decimal ====\n"); - test_ull2d(ULL(12345), "12345", 0); - test_ull2d(ULL(0), "0", 0); - test_ull2d(ULL(18446744073709551615), "18446744073709551615", 0); + test_ull2d(12345ULL, "12345", 0); + test_ull2d(0ULL, "0", 0); + test_ull2d(18446744073709551615ULL, "18446744073709551615", 0); printf("==== decimal2ulonglong ====\n"); test_d2ull("12345", "12345", 0); test_d2ull("0", "0", 0); test_d2ull("18446744073709551615", "18446744073709551615", 0); - test_d2ull("18446744073709551616", "18446744073", 2); + test_d2ull("18446744073709551616", "18446744073709551615", 2); test_d2ull("-1", "0", 2); test_d2ull("1.23", "1", 1); - test_d2ull("9999999999999999999999999.000", "9999999999999999", 2); + test_d2ull("9999999999999999999999999.000", "18446744073709551615", 2); printf("==== longlong2decimal ====\n"); - test_ll2d(LL(-12345), "-12345", 0); - test_ll2d(LL(-1), "-1", 0); - test_ll2d(LL(-9223372036854775807), "-9223372036854775807", 0); - test_ll2d(ULL(9223372036854775808), "-9223372036854775808", 0); + test_ll2d(-12345LL, "-12345", 0); + test_ll2d(-1LL, "-1", 0); + test_ll2d(-9223372036854775807LL, "-9223372036854775807", 0); + test_ll2d(9223372036854775808ULL, "-9223372036854775808", 0); printf("==== decimal2longlong ====\n"); - test_d2ll("18446744073709551615", "18446744073", 2); + test_d2ll("18446744073709551615", "9223372036854775807", 2); test_d2ll("-1", "-1", 0); test_d2ll("-1.23", "-1", 1); test_d2ll("-9223372036854775807", "-9223372036854775807", 0); @@ -3145,12 +3146,12 @@ int main() printf("==== decimal2string ====\n"); test_pr("123.123", 0, 0, 0, "123.123", 0); - test_pr("123.123", 7, 3, '0', "123.123", 0); - test_pr("123.123", 9, 3, '0', "00123.123", 0); - test_pr("123.123", 9, 4, '0', "0123.1230", 0); - test_pr("123.123", 9, 5, '0', "123.12300", 0); - test_pr("123.123", 9, 2, '0', "000123.12", 1); - test_pr("123.123", 9, 6, '0', "23.123000", 2); + test_pr("123.123", 7, 3, '0', "0123.123", 0); + test_pr("123.123", 9, 3, '0', "000123.123", 0); + test_pr("123.123", 9, 4, '0', "00123.1230", 0); + test_pr("123.123", 9, 5, '0', "0123.12300", 0); + test_pr("123.123", 9, 2, '0', "0000123.12", 1); + test_pr("123.123", 8, 6, '0', "23.123000", 2); printf("==== decimal_shift ====\n"); test_sh("123.123", 1, "1231.23", 0); diff --git a/strings/dtoa.c b/strings/dtoa.c index 13e28821f69..9bdeeacf574 100644 --- a/strings/dtoa.c +++ b/strings/dtoa.c @@ -1,5 +1,5 @@ /* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved. - Copyright (c) 2017, MariaDB Corporation. + Copyright (c) 2017, 2020, MariaDB Corporation. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public diff --git a/strings/json_lib.c b/strings/json_lib.c index 5c7747617e9..bb60df589c3 100644 --- a/strings/json_lib.c +++ b/strings/json_lib.c @@ -1,3 +1,18 @@ +/* Copyright (c) 2016, 2020, MariaDB Corporation. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; version 2 of the License. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ + #include <my_global.h> #include <string.h> #include <m_ctype.h> @@ -1511,8 +1526,7 @@ int json_append_ascii(CHARSET_INFO *json_cs, while (ascii < ascii_end) { int c_len; - if ((c_len= json_cs->cset->wc_mb(json_cs, (my_wc_t) *ascii, - json, json_end)) > 0) + if ((c_len= my_ci_wc_mb(json_cs, (my_wc_t) *ascii, json, json_end)) > 0) { json+= c_len; ascii++; @@ -1538,7 +1552,7 @@ int json_unescape(CHARSET_INFO *json_cs, while (json_read_string_const_chr(&s) == 0) { int c_len; - if ((c_len= res_cs->cset->wc_mb(res_cs, s.c_next, res, res_end)) > 0) + if ((c_len= my_ci_wc_mb(res_cs, s.c_next, res, res_end)) > 0) { res+= c_len; continue; @@ -1549,7 +1563,7 @@ int json_unescape(CHARSET_INFO *json_cs, Result charset doesn't support the json's character. Let's replace it with the '?' symbol. */ - if ((c_len= res_cs->cset->wc_mb(res_cs, '?', res, res_end)) > 0) + if ((c_len= my_ci_wc_mb(res_cs, '?', res, res_end)) > 0) { res+= c_len; continue; @@ -1608,14 +1622,14 @@ int json_escape(CHARSET_INFO *str_cs, { my_wc_t c_chr; int c_len; - if ((c_len= str_cs->cset->mb_wc(str_cs, &c_chr, str, str_end)) > 0) + if ((c_len= my_ci_mb_wc(str_cs, &c_chr, str, str_end)) > 0) { enum json_esc_char_classes c_class; str+= c_len; if (c_chr >= 0x60 || (c_class= json_escape_chr_map[c_chr]) == ESC_) { - if ((c_len= json_cs->cset->wc_mb(json_cs, c_chr, json, json_end)) > 0) + if ((c_len= my_ci_wc_mb(json_cs, c_chr, json, json_end)) > 0) { json+= c_len; continue; @@ -1630,9 +1644,8 @@ int json_escape(CHARSET_INFO *str_cs, c_class= ESC_U; } - if ((c_len= json_cs->cset->wc_mb(json_cs, '\\', json, json_end)) <= 0 || - (c_len= json_cs->cset->wc_mb(json_cs, - (c_class == ESC_BS) ? c_chr : c_class, + if ((c_len= my_ci_wc_mb(json_cs, '\\', json, json_end)) <= 0 || + (c_len= my_ci_wc_mb(json_cs, (c_class == ESC_BS) ? c_chr : c_class, json+= c_len, json_end)) <= 0) { /* JSON buffer is depleted. */ diff --git a/strings/my_strchr.c b/strings/my_strchr.c index 6b1564c7ee1..323cbd0a37f 100644 --- a/strings/my_strchr.c +++ b/strings/my_strchr.c @@ -1,5 +1,5 @@ /* Copyright (c) 2005, 2011, Oracle and/or its affiliates. - Copyright (c) 2009-2011, Monty Program Ab + Copyright (c) 2009, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,7 +38,8 @@ const char *acc_end= (ACC) + (LEN); \ for (ptr_str= (STR) ; ptr_str < (END) ; ptr_str+= mbl) \ { \ - mbl= my_charlen_fix((CS), ptr_str, (END)); \ + mbl= my_ci_charlen_fix((CS), (const uchar *) ptr_str, \ + (const uchar *) (END)); \ if (mbl < 2) \ { \ DBUG_ASSERT(mbl == 1); \ diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c index 56e86f1bbc8..8b4dc5da561 100644 --- a/strings/my_vsnprintf.c +++ b/strings/my_vsnprintf.c @@ -175,7 +175,7 @@ static char *backtick_string(CHARSET_INFO *cs, char *to, const char *end, last[index]= start; index= (index + 1) % 3; } - char_len= my_charlen_fix(cs, par, par_end); + char_len= my_ci_charlen_fix(cs, (const uchar *) par, (const uchar *) par_end); if (char_len == 1 && c == (uchar) quote_char ) { if (start + 1 >= end) @@ -704,10 +704,11 @@ size_t my_vsnprintf_ex(CHARSET_INFO *cs, char *to, size_t n, } else if (*fmt == 'f' || *fmt == 'g') { + double d; #if __has_feature(memory_sanitizer) /* QQ: MSAN has double trouble? */ __msan_check_mem_is_initialized(ap, sizeof(double)); #endif - double d= va_arg(ap, double); + d= va_arg(ap, double); #if __has_feature(memory_sanitizer) /* QQ: MSAN has double trouble? */ __msan_unpoison(&d, sizeof(double)); #endif @@ -836,7 +837,7 @@ int my_vfprintf(FILE *stream, const char* format, va_list args) if (new_len < cur_len) return 0; /* Overflow */ cur_len= new_len; - p= my_malloc(cur_len, MYF(MY_FAE)); + p= my_malloc(PSI_INSTRUMENT_ME, cur_len, MYF(MY_FAE)); if (!p) return 0; } diff --git a/strings/strcoll.inl b/strings/strcoll.inl index 392a5dac589..50849c06e7d 100644 --- a/strings/strcoll.inl +++ b/strings/strcoll.inl @@ -1,5 +1,6 @@ /* Copyright (c) 2015, MariaDB Foundation + Copyright (c) 2015, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -105,7 +106,7 @@ MY_FUNCTION_NAME(scan_weight)(int *weight, const uchar *str, const uchar *end) #ifdef IS_MB1_MBHEAD_UNUSED_GAP /* Quickly filter out unused bytes that are neither MB1 nor MBHEAD. - E.g. [0x80..0xC1] in utf8. This allows using simplified conditions + E.g. [0x80..0xC1] in utf8mb(3|4). This allows using simplified conditions in IS_MB2_CHAR(), IS_MB3_CHAR(), etc. */ if (IS_MB1_MBHEAD_UNUSED_GAP(*str)) @@ -156,9 +157,9 @@ bad: Compare two strings according to the collation, without handling the PAD SPACE property. - Note, cs->coll->strnncoll() is usually used to compare identifiers. + Note, strnncoll() is usually used to compare identifiers. Perhaps we should eventually (in 10.2?) create a new collation - my_charset_utf8_general_ci_no_pad and have only one comparison function + my_charset_utf8mb3_general_ci_no_pad and have only one comparison function in MY_COLLATION_HANDLER. @param cs - the character set and collation @@ -357,11 +358,11 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs, for (; dst < de && src < se && nweights; nweights--) { - if (my_charlen(cs, (const char *) src, (const char *) se) > 1) + if (my_ci_charlen(cs, src, se) > 1) { /* Note, it is safe not to check (src < se) - in the code below, because my_charlen() would + in the code below, because my_ci_charlen() would not return 2 if src was too short */ uint16 e= WEIGHT_MB2_FRM(src[0], src[1]); @@ -389,7 +390,7 @@ MY_FUNCTION_NAME(strnxfrm)(CHARSET_INFO *cs, Store sorting weights using 2 bytes per character. This function is shared between - - utf8mb3_general_ci, utf8_bin, ucs2_general_ci, ucs2_bin + - utf8mb3_general_ci, utf8mb3_bin, ucs2_general_ci, ucs2_bin which support BMP only (U+0000..U+FFFF). - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci, which map all supplementary characters to weight 0xFFFD. @@ -523,7 +524,7 @@ MY_FUNCTION_NAME(strnxfrm_nopad)(CHARSET_INFO *cs, Store sorting weights using 2 bytes per character. These functions are shared between - - utf8mb3_general_ci, utf8_bin, ucs2_general_ci, ucs2_bin + - utf8mb3_general_ci, utf8mb3_bin, ucs2_general_ci, ucs2_bin which support BMP only (U+0000..U+FFFF). - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci, which map all supplementary characters to weight 0xFFFD. diff --git a/strings/strings_def.h b/strings/strings_def.h index 8bf089ec695..ba7601f5886 100644 --- a/strings/strings_def.h +++ b/strings/strings_def.h @@ -127,4 +127,26 @@ uint my_8bit_collation_flags_from_data(CHARSET_INFO *cs); #define MY_HASH_ADD_16(A, B, value) \ do { MY_HASH_ADD(A, B, ((value) & 0xFF)) ; MY_HASH_ADD(A, B, ((value >>8 ))); } while(0) -#endif + +#define my_wc_t ulong + +int my_wc_to_printable_ex(CHARSET_INFO *cs, my_wc_t wc, + uchar *s, uchar *e, + uint bs, uint bslen, uint diglen); + +int my_wc_to_printable_generic(CHARSET_INFO *cs, my_wc_t wc, + uchar *s, uchar *e); + +int my_wc_to_printable_8bit(CHARSET_INFO *cs, my_wc_t wc, + uchar *s, uchar *e); + +/* Some common character set names */ +extern const char charset_name_latin2[]; +extern const char charset_name_utf8[]; +extern const char charset_name_utf16[]; +extern const char charset_name_utf32[]; +extern const char charset_name_ucs2[]; +extern const char charset_name_ucs2[]; +extern const char charset_name_utf8mb4[]; + +#endif /*STRINGS_DEF_INCLUDED */ diff --git a/strings/xml.c b/strings/xml.c index 0178ea2574e..d16df34bf30 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -232,12 +232,12 @@ static int my_xml_attr_ensure_space(MY_XML_PARSER *st, size_t len) if (!st->attr.buffer) { - st->attr.buffer= (char *) my_malloc(st->attr.buffer_size, MYF(0)); + st->attr.buffer= (char *) my_malloc(PSI_INSTRUMENT_ME, st->attr.buffer_size, MYF(0)); if (st->attr.buffer) memcpy(st->attr.buffer, st->attr.static_buffer, ofs + 1 /*term. zero */); } else - st->attr.buffer= (char *) my_realloc(st->attr.buffer, + st->attr.buffer= (char *) my_realloc(PSI_INSTRUMENT_ME, st->attr.buffer, st->attr.buffer_size, MYF(0)); st->attr.start= st->attr.buffer; st->attr.end= st->attr.start + ofs; |