diff options
author | Alexander Barkov <bar@mariadb.org> | 2015-07-03 10:33:17 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2015-07-03 10:33:17 +0400 |
commit | 95d07ee408abd98769093759a076f4665a176d77 (patch) | |
tree | 24b4b0c016574b97b0fae5067f009119aa744f3c /strings/ctype-eucjpms.c | |
parent | 302bf7c4664b904482ecc133476e822d497b114d (diff) | |
download | mariadb-git-95d07ee408abd98769093759a076f4665a176d77.tar.gz |
MDEV-8215 Asian MB3 charsets: compare broken bytes as "greater than any non-broken character"
Diffstat (limited to 'strings/ctype-eucjpms.c')
-rw-r--r-- | strings/ctype-eucjpms.c | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c index 827feda927b..d331f643079 100644 --- a/strings/ctype-eucjpms.c +++ b/strings/ctype-eucjpms.c @@ -194,6 +194,7 @@ static const uchar sort_order_eucjpms[]= #define MY_FUNCTION_NAME(x) my_ ## x ## _eucjpms +#define IS_MB1_CHAR(x) ((uchar) (x) < 0x80) #define IS_MB2_JIS(x,y) (iseucjpms(x) && iseucjpms(y)) #define IS_MB2_KATA(x,y) (iseucjpms_ss2(x) && iskata(y)) #define IS_MB2_CHAR(x,y) (IS_MB2_KATA(x,y) || IS_MB2_JIS(x,y)) @@ -201,6 +202,23 @@ static const uchar sort_order_eucjpms[]= #define DEFINE_ASIAN_ROUTINES #include "ctype-mb.ic" +#define MY_FUNCTION_NAME(x) my_ ## x ## _eucjpms_japanese_ci +#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) +#define WEIGHT_MB1(x) ((int) sort_order_eucjpms[(uchar) (x)]) +#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ + (((uint) (uchar) (y)) << 8)) +#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) +#include "strcoll.ic" + + +#define MY_FUNCTION_NAME(x) my_ ## x ## _eucjpms_bin +#define WEIGHT_ILSEQ(x) (0xFF0000 + (uchar) (x)) +#define WEIGHT_MB1(x) ((int) (uchar) (x)) +#define WEIGHT_MB2(x,y) ((((uint) (uchar)(x)) << 16) | \ + (((uint) (uchar) (y)) << 8)) +#define WEIGHT_MB3(x,y,z) (WEIGHT_MB2(x,y) | ((uint) (uchar) z)) +#include "strcoll.ic" + static uint ismbchar_eucjpms(CHARSET_INFO *cs __attribute__((unused)), const char* p, const char *e) @@ -67467,11 +67485,11 @@ size_t my_numcells_eucjpms(CHARSET_INFO *cs __attribute__((unused)), } -static MY_COLLATION_HANDLER my_collation_ci_handler = +static MY_COLLATION_HANDLER my_collation_eucjpms_japanese_ci_handler = { NULL, /* init */ - my_strnncoll_simple,/* strnncoll */ - my_strnncollsp_simple, + my_strnncoll_eucjpms_japanese_ci, + my_strnncollsp_eucjpms_japanese_ci, my_strnxfrm_mb, /* strnxfrm */ my_strnxfrmlen_simple, my_like_range_mb, /* like_range */ @@ -67482,6 +67500,23 @@ static MY_COLLATION_HANDLER my_collation_ci_handler = my_propagate_simple }; + +static MY_COLLATION_HANDLER my_collation_eucjpms_bin_handler = +{ + NULL, /* init */ + my_strnncoll_eucjpms_bin, + my_strnncollsp_eucjpms_bin, + my_strnxfrm_mb, + my_strnxfrmlen_simple, + my_like_range_mb, + my_wildcmp_mb_bin, + my_strcasecmp_mb_bin, + my_instr_mb, + my_hash_sort_mb_bin, + my_propagate_simple +}; + + static MY_CHARSET_HANDLER my_charset_handler= { NULL, /* init */ @@ -67547,7 +67582,7 @@ struct charset_info_st my_charset_eucjpms_japanese_ci= 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ &my_charset_handler, - &my_collation_ci_handler + &my_collation_eucjpms_japanese_ci_handler }; @@ -67580,7 +67615,7 @@ struct charset_info_st my_charset_eucjpms_bin= 0, /* escape_with_backslash_is_dangerous */ 1, /* levels_for_order */ &my_charset_handler, - &my_collation_mb_bin_handler + &my_collation_eucjpms_bin_handler }; |