summaryrefslogtreecommitdiff
path: root/strings
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-09-23 14:19:07 +0400
committerAlexander Barkov <bar@mariadb.org>2016-09-23 14:19:07 +0400
commit0f8a1a314d49adfe8e20c5e4d3e98e37b91b068e (patch)
tree285928478f93a3237cda86e935603a022f515a8e /strings
parent6304c0bfc7242ad54d93168e97e82022765934e3 (diff)
downloadmariadb-git-0f8a1a314d49adfe8e20c5e4d3e98e37b91b068e.tar.gz
MDEV-10877 xxx_unicode_nopad_ci collations
Diffstat (limited to 'strings')
-rw-r--r--strings/ctype-uca.c541
1 files changed, 518 insertions, 23 deletions
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index a85c4f75408..73a813feed9 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -32088,36 +32088,119 @@ end:
}
+static void my_hash_sort_uca_nopad(CHARSET_INFO *cs,
+ my_uca_scanner_handler *scanner_handler,
+ const uchar *s, size_t slen,
+ ulong *nr1, ulong *nr2)
+{
+ int s_res;
+ my_uca_scanner scanner;
+ register ulong m1= *nr1, m2= *nr2;
+
+ scanner_handler->init(&scanner, cs, &cs->uca->level[0], s, slen);
+
+ while ((s_res= scanner_handler->next(&scanner)) >0)
+ {
+ /* See comment above why we can't use MY_HASH_ADD_16() */
+ MY_HASH_ADD(m1, m2, s_res >> 8);
+ MY_HASH_ADD(m1, m2, s_res & 0xFF);
+ }
+ *nr1= m1;
+ *nr2= m2;
+}
+
+
static uchar *
-my_strnxfrm_uca_onelevel(CHARSET_INFO *cs,
- my_uca_scanner_handler *scanner_handler,
- MY_UCA_WEIGHT_LEVEL *level,
- uchar *dst, uchar *de, uint nweights,
- const uchar *src, size_t srclen, uint flags)
+my_strnxfrm_uca_onelevel_internal(CHARSET_INFO *cs,
+ my_uca_scanner_handler *scanner_handler,
+ MY_UCA_WEIGHT_LEVEL *level,
+ uchar *dst, uchar *de, uint *nweights,
+ const uchar *src, size_t srclen)
{
my_uca_scanner scanner;
- uchar *d0= dst;
int s_res;
+ DBUG_ASSERT(src || !srclen);
+
scanner_handler->init(&scanner, cs, level, src, srclen);
- for (; dst < de && nweights &&
- (s_res= scanner_handler->next(&scanner)) > 0 ; nweights--)
+ for (; dst < de && *nweights &&
+ (s_res= scanner_handler->next(&scanner)) > 0 ; (*nweights)--)
{
*dst++= s_res >> 8;
if (dst < de)
*dst++= s_res & 0xFF;
}
+ return dst;
+}
- if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
+
+static uchar *
+my_strnxfrm_uca_padn(uchar *dst, uchar *de, uint nweights, int weight)
+{
+ uint count= MY_MIN((uint) (de - dst) / 2, nweights);
+ for (; count ; count--)
{
- uint space_count= MY_MIN((uint) (de - dst) / 2, nweights);
- s_res= my_space_weight(level);
- for (; space_count ; space_count--)
- {
- *dst++= s_res >> 8;
- *dst++= s_res & 0xFF;
- }
+ *dst++= weight >> 8;
+ *dst++= weight & 0xFF;
+ }
+ return dst;
+}
+
+
+static uchar *
+my_strnxfrm_uca_pad(uchar *dst, uchar *de, int weight)
+{
+ for ( ; dst < de; )
+ {
+ *dst++= weight >> 8;
+ if (dst < de)
+ *dst++= weight & 0xFF;
}
+ return dst;
+}
+
+
+static uchar *
+my_strnxfrm_uca_onelevel(CHARSET_INFO *cs,
+ my_uca_scanner_handler *scanner_handler,
+ MY_UCA_WEIGHT_LEVEL *level,
+ uchar *dst, uchar *de, uint nweights,
+ const uchar *src, size_t srclen, uint flags)
+{
+ uchar *d0= dst;
+
+ dst= my_strnxfrm_uca_onelevel_internal(cs, scanner_handler, level,
+ dst, de, &nweights,
+ src, srclen);
+ DBUG_ASSERT(dst <= de);
+ if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
+ dst= my_strnxfrm_uca_padn(dst, de, nweights, my_space_weight(level));
+ DBUG_ASSERT(dst <= de);
+ my_strxfrm_desc_and_reverse(d0, dst, flags, 0);
+ return dst;
+}
+
+
+static uchar *
+my_strnxfrm_uca_nopad_onelevel(CHARSET_INFO *cs,
+ my_uca_scanner_handler *scanner_handler,
+ MY_UCA_WEIGHT_LEVEL *level,
+ uchar *dst, uchar *de, uint nweights,
+ const uchar *src, size_t srclen, uint flags)
+{
+ uchar *d0= dst;
+
+ dst= my_strnxfrm_uca_onelevel_internal(cs, scanner_handler, level,
+ dst, de, &nweights,
+ src, srclen);
+ DBUG_ASSERT(dst <= de);
+ /*
+ Pad with the minimum possible primary weight 0x0200.
+ */
+ DBUG_ASSERT(level->levelno == 0); /* No multi-level NOPAD collations yet */
+ if (dst < de && nweights && (flags & MY_STRXFRM_PAD_WITH_SPACE))
+ dst= my_strnxfrm_uca_padn(dst, de, nweights, 0x0200);
+ DBUG_ASSERT(dst <= de);
my_strxfrm_desc_and_reverse(d0, dst, flags, 0);
return dst;
}
@@ -32171,14 +32254,26 @@ my_strnxfrm_uca(CHARSET_INFO *cs,
like my_strnxfrm_uca_multilevel() does.
*/
if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
+ dst= my_strnxfrm_uca_pad(dst, de, my_space_weight(&cs->uca->level[0]));
+ return dst - d0;
+}
+
+
+static size_t
+my_strnxfrm_uca_nopad(CHARSET_INFO *cs,
+ my_uca_scanner_handler *scanner_handler,
+ uchar *dst, size_t dstlen, uint nweights,
+ const uchar *src, size_t srclen, uint flags)
+{
+ uchar *d0= dst;
+ uchar *de= dst + dstlen;
+
+ dst= my_strnxfrm_uca_nopad_onelevel(cs, scanner_handler, &cs->uca->level[0],
+ dst, de, nweights, src, srclen, flags);
+ if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
{
- int s_res= my_space_weight(&cs->uca->level[0]);
- for ( ; dst < de; )
- {
- *dst++= s_res >> 8;
- if (dst < de)
- *dst++= s_res & 0xFF;
- }
+ memset(dst, 0, de - dst);
+ dst= de;
}
return dst - d0;
}
@@ -34286,6 +34381,16 @@ static int my_strnncollsp_any_uca(CHARSET_INFO *cs,
return my_strnncollsp_uca(cs, &my_any_uca_scanner_handler, s, slen, t, tlen);
}
+
+static int my_strnncollsp_generic_uca_nopad(CHARSET_INFO *cs,
+ const uchar *s, size_t slen,
+ const uchar *t, size_t tlen)
+{
+ return my_strnncoll_uca(cs, &my_any_uca_scanner_handler,
+ s, slen, t, tlen, FALSE);
+}
+
+
static int my_strnncollsp_any_uca_multilevel(CHARSET_INFO *cs,
const uchar *s, size_t slen,
const uchar *t, size_t tlen)
@@ -34301,6 +34406,13 @@ static void my_hash_sort_any_uca(CHARSET_INFO *cs,
my_hash_sort_uca(cs, &my_any_uca_scanner_handler, s, slen, n1, n2);
}
+static void my_hash_sort_generic_uca_nopad(CHARSET_INFO *cs,
+ const uchar *s, size_t slen,
+ ulong *n1, ulong *n2)
+{
+ my_hash_sort_uca_nopad(cs, &my_any_uca_scanner_handler, s, slen, n1, n2);
+}
+
static size_t my_strnxfrm_any_uca(CHARSET_INFO *cs,
uchar *dst, size_t dstlen, uint nweights,
const uchar *src, size_t srclen, uint flags)
@@ -34309,6 +34421,16 @@ static size_t my_strnxfrm_any_uca(CHARSET_INFO *cs,
dst, dstlen, nweights, src, srclen, flags);
}
+static size_t my_strnxfrm_generic_uca_nopad(CHARSET_INFO *cs,
+ uchar *dst, size_t dstlen,
+ uint nweights,
+ const uchar *src, size_t srclen,
+ uint flags)
+{
+ return my_strnxfrm_uca_nopad(cs, &my_any_uca_scanner_handler,
+ dst, dstlen, nweights, src, srclen, flags);
+}
+
static size_t my_strnxfrm_any_uca_multilevel(CHARSET_INFO *cs,
uchar *dst, size_t dstlen,
uint nweights, const uchar *src,
@@ -34331,6 +34453,40 @@ static size_t my_strnxfrmlen_any_uca_multilevel(CHARSET_INFO *cs, size_t len)
}
+/* NO PAD handler for character sets with mbminlen==1 */
+MY_COLLATION_HANDLER my_collation_mb_uca_nopad_handler =
+{
+ my_coll_init_uca,
+ my_strnncoll_any_uca,
+ my_strnncollsp_generic_uca_nopad,
+ my_strnxfrm_generic_uca_nopad,
+ my_strnxfrmlen_any_uca,
+ my_like_range_mb,
+ my_wildcmp_uca,
+ NULL,
+ my_instr_mb,
+ my_hash_sort_generic_uca_nopad,
+ my_propagate_complex
+};
+
+
+/* NO PAD handler for character sets with mbminlen>=1 */
+MY_COLLATION_HANDLER my_collation_generic_uca_nopad_handler =
+{
+ my_coll_init_uca,
+ my_strnncoll_any_uca,
+ my_strnncollsp_generic_uca_nopad,
+ my_strnxfrm_generic_uca_nopad,
+ my_strnxfrmlen_any_uca,
+ my_like_range_generic,
+ my_wildcmp_uca,
+ NULL,
+ my_instr_mb,
+ my_hash_sort_generic_uca_nopad,
+ my_propagate_complex
+};
+
+
MY_COLLATION_HANDLER my_collation_any_uca_handler_multilevel=
{
my_coll_init_uca_multilevel,
@@ -34397,7 +34553,9 @@ MY_COLLATION_HANDLER my_collation_ucs2_uca_handler =
my_propagate_complex
};
+
#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)
struct charset_info_st my_charset_ucs2_unicode_ci=
{
@@ -35275,6 +35433,72 @@ struct charset_info_st my_charset_ucs2_vietnamese_ci=
};
+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 */
+ "ucs2_unicode_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 2, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_ucs2_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
+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 */
+ "ucs2_unicode_520_nopad_ci",/* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ &my_uca_v520, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_unicode520, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 2, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_ucs2_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
#endif
@@ -35294,6 +35518,7 @@ MY_COLLATION_HANDLER my_collation_any_uca_handler =
my_propagate_complex
};
+
/*
We consider bytes with code more than 127 as a letter.
This garantees that word boundaries work fine with regular
@@ -35323,6 +35548,7 @@ static uchar ctype_utf8[] = {
extern MY_CHARSET_HANDLER my_charset_utf8_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=
{
@@ -36195,6 +36421,71 @@ struct charset_info_st my_charset_utf8_vietnamese_ci=
};
+struct charset_info_st my_charset_utf8_unicode_nopad_ci=
+{
+ MY_NOPAD_ID(192),0,0, /* number */
+ MY_CS_UTF8MB3_UCA_NOPAD_FLAGS, /* flags */
+ MY_UTF8MB3, /* cs name */
+ MY_UTF8MB3 "_unicode_nopad_ci",/* name */
+ "", /* comment */
+ "", /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 3, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf8_handler,
+ &my_collation_mb_uca_nopad_handler
+};
+
+
+struct charset_info_st my_charset_utf8_unicode_520_nopad_ci=
+{
+ MY_NOPAD_ID(214),0,0, /* number */
+ MY_CS_UTF8MB3_UCA_NOPAD_FLAGS, /* flags */
+ MY_UTF8MB3, /* csname */
+ MY_UTF8MB3 "_unicode_520_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ &my_uca_v520, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_unicode520, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 3, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf8_handler,
+ &my_collation_mb_uca_nopad_handler
+};
+
#endif /* HAVE_CHARSET_utf8 */
@@ -36203,6 +36494,7 @@ struct charset_info_st my_charset_utf8_vietnamese_ci=
extern MY_CHARSET_HANDLER my_charset_utf8mb4_handler;
#define MY_CS_UTF8MB4_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_UNICODE_SUPPLEMENT)
+#define MY_CS_UTF8MB4_UCA_NOPAD_FLAGS (MY_CS_UTF8MB4_UCA_FLAGS|MY_CS_NOPAD)
struct charset_info_st my_charset_utf8mb4_unicode_ci=
{
@@ -37074,6 +37366,72 @@ struct charset_info_st my_charset_utf8mb4_vietnamese_ci=
};
+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 */
+ MY_UTF8MB4 "_unicode_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf8mb4_handler,
+ &my_collation_mb_uca_nopad_handler
+};
+
+
+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 */
+ MY_UTF8MB4 "_unicode_520_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ ctype_utf8, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ &my_uca_v520, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_unicode520, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 1, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0x10FFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf8mb4_handler,
+ &my_collation_mb_uca_nopad_handler
+};
+
+
#endif /* HAVE_CHARSET_utf8mb4 */
@@ -37094,9 +37452,11 @@ MY_COLLATION_HANDLER my_collation_utf32_uca_handler =
my_propagate_complex
};
+
extern MY_CHARSET_HANDLER my_charset_utf32_handler;
#define MY_CS_UTF32_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_NONASCII)
+#define MY_CS_UTF32_UCA_NOPAD_FLAGS (MY_CS_UTF32_UCA_FLAGS|MY_CS_NOPAD)
struct charset_info_st my_charset_utf32_unicode_ci=
{
@@ -37969,6 +38329,73 @@ struct charset_info_st my_charset_utf32_vietnamese_ci=
};
+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 */
+ "utf32_unicode_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 4, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf32_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
+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 */
+ "utf32_unicode_520_nopad_ci",/* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ &my_uca_v520, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_unicode520, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 4, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0x10FFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf32_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
+
#endif /* HAVE_CHARSET_utf32 */
@@ -37990,9 +38417,11 @@ MY_COLLATION_HANDLER my_collation_utf16_uca_handler =
my_propagate_complex
};
+
extern MY_CHARSET_HANDLER my_charset_utf16_handler;
#define MY_CS_UTF16_UCA_FLAGS (MY_CS_COMMON_UCA_FLAGS|MY_CS_NONASCII)
+#define MY_CS_UTF16_UCA_NOPAD_FLAGS (MY_CS_UTF16_UCA_FLAGS|MY_CS_NOPAD)
struct charset_info_st my_charset_utf16_unicode_ci=
{
@@ -38867,6 +39296,72 @@ struct charset_info_st my_charset_utf16_vietnamese_ci=
};
+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 */
+ "utf16_unicode_nopad_ci", /* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ NULL, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_default, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0xFFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf16_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
+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 */
+ "utf16_unicode_520_nopad_ci",/* name */
+ "", /* comment */
+ "", /* tailoring */
+ NULL, /* ctype */
+ NULL, /* to_lower */
+ NULL, /* to_upper */
+ NULL, /* sort_order */
+ &my_uca_v520, /* uca */
+ NULL, /* tab_to_uni */
+ NULL, /* tab_from_uni */
+ &my_unicase_unicode520, /* caseinfo */
+ NULL, /* state_map */
+ NULL, /* ident_map */
+ 8, /* strxfrm_multiply */
+ 1, /* caseup_multiply */
+ 1, /* casedn_multiply */
+ 2, /* mbminlen */
+ 4, /* mbmaxlen */
+ 9, /* min_sort_char */
+ 0x10FFFF, /* max_sort_char */
+ ' ', /* pad char */
+ 0, /* escape_with_backslash_is_dangerous */
+ 1, /* levels_for_order */
+ &my_charset_utf16_handler,
+ &my_collation_generic_uca_nopad_handler
+};
+
+
#endif /* HAVE_CHARSET_utf16 */