diff options
author | unknown <bar@bar.myoffice.izhnet.ru> | 2007-07-05 15:00:36 +0500 |
---|---|---|
committer | unknown <bar@bar.myoffice.izhnet.ru> | 2007-07-05 15:00:36 +0500 |
commit | db8deb537f86252265335906316f5d9f9dc0db11 (patch) | |
tree | ba03c2c9a5e1f5846982cae5b21326af29434775 /strings | |
parent | 31d750bf8815896bdbcaa7cd24c039e4b5433bb4 (diff) | |
parent | b15bd3086e6385f7d057d5db4766844734dcf30f (diff) | |
download | mariadb-git-db8deb537f86252265335906316f5d9f9dc0db11.tar.gz |
Merge mysql.com:/home/bar/mysql-work/mysql-5.0-rpl
into mysql.com:/home/bar/mysql-work/mysql-5.1-new-rpl
strings/ctype-cp932.c:
Auto merged
strings/ctype-utf8.c:
Auto merged
mysql-test/extra/binlog_tests/ctype_cp932.test:
Auto merged
mysql-test/r/binlog_stm_ctype_cp932.result:
Auto merged
Diffstat (limited to 'strings')
-rw-r--r-- | strings/ctype-cp932.c | 14 | ||||
-rw-r--r-- | strings/ctype-utf8.c | 29 |
2 files changed, 29 insertions, 14 deletions
diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c index 72b00679e1c..a0ff0314246 100644 --- a/strings/ctype-cp932.c +++ b/strings/ctype-cp932.c @@ -250,9 +250,16 @@ static int my_strnncollsp_cp932(CHARSET_INFO *cs __attribute__((unused)), const uchar *a_end= a + a_length; const uchar *b_end= b + b_length; int res= my_strnncoll_cp932_internal(cs, &a, a_length, &b, b_length); + +#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE + diff_if_only_endspace_difference= 0; +#endif + if (!res && (a != a_end || b != b_end)) { - int swap= 0; + int swap= 1; + if (diff_if_only_endspace_difference) + res= 1; /* Assume 'a' is bigger */ /* Check the next not space character of the longer key. If it's < ' ', then it's smaller than the other key. @@ -263,11 +270,12 @@ static int my_strnncollsp_cp932(CHARSET_INFO *cs __attribute__((unused)), a_end= b_end; a= b; swap= -1; /* swap sign of result */ + res= -res; } for (; a < a_end ; a++) { - if (*a != ' ') - return ((int) *a - (int) ' ') ^ swap; + if (*a != (uchar) ' ') + return (*a < (uchar) ' ') ? -swap : swap; } } return res; diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c index 851cef54b5b..2b248f1eed5 100644 --- a/strings/ctype-utf8.c +++ b/strings/ctype-utf8.c @@ -2812,16 +2812,19 @@ static int my_strnncoll_utf8_cs(CHARSET_INFO *cs, static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, const uchar *s, size_t slen, const uchar *t, size_t tlen, - my_bool diff_if_only_endspace_difference - __attribute__((unused))) + my_bool diff_if_only_endspace_difference) { - int s_res,t_res; - my_wc_t s_wc,t_wc; - const uchar *se= s+slen; - const uchar *te= t+tlen; - int save_diff = 0; + int s_res, t_res, res; + my_wc_t s_wc, t_wc; + const uchar *se= s + slen; + const uchar *te= t + tlen; + int save_diff= 0; MY_UNICASE_INFO **uni_plane= cs->caseinfo; - + +#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE + diff_if_only_endspace_difference= 0; +#endif + while ( s < se && t < te ) { int plane; @@ -2853,16 +2856,20 @@ static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, slen= se-s; tlen= te-t; + res= 0; if (slen != tlen) { - int swap= 0; + int swap= 1; + if (diff_if_only_endspace_difference) + res= 1; /* Assume 'a' is bigger */ if (slen < tlen) { slen= tlen; s= t; se= te; swap= -1; + res= -res; } /* This following loop uses the fact that in UTF-8 @@ -2876,8 +2883,8 @@ static int my_strnncollsp_utf8_cs(CHARSET_INFO *cs, */ for ( ; s < se; s++) { - if (*s != ' ') - return ((int)*s - (int) ' ') ^ swap; + if (*s != (uchar) ' ') + return (*s < (uchar) ' ') ? -swap : swap; } } return save_diff; |