1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

Merge rurik.mysql.com:/home/igor/mysql-4.1-opt

into  rurik.mysql.com:/home/igor/mysql-5.0-opt


mysql-test/t/ctype_utf8.test:
  Auto merged
strings/ctype-mb.c:
  Auto merged
mysql-test/r/ctype_utf8.result:
  SCCS merged
This commit is contained in:
unknown
2006-06-21 20:06:33 -07:00
3 changed files with 138 additions and 9 deletions

View File

@ -523,21 +523,19 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
char *min_str,char *max_str,
uint *min_length,uint *max_length)
{
uint mblen;
const char *end= ptr + ptr_length;
char *min_org= min_str;
char *min_end= min_str + res_length;
char *max_end= max_str + res_length;
uint charlen= res_length / cs->mbmaxlen;
uint maxcharlen= res_length / cs->mbmaxlen;
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
for (; ptr != end && min_str != min_end && maxcharlen ; maxcharlen--)
{
/* We assume here that escape, w_any, w_namy are one-byte characters */
if (*ptr == escape && ptr+1 != end)
{
ptr++; /* Skip escape */
*min_str++= *max_str++ = *ptr;
continue;
}
if (*ptr == w_one || *ptr == w_many) /* '_' and '%' in SQL */
ptr++; /* Skip escape */
else if (*ptr == w_one || *ptr == w_many) /* '_' and '%' in SQL */
{
charlen= my_charpos(cs, min_org, min_str, res_length/cs->mbmaxlen);
@ -567,7 +565,16 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
pad_max_char(cs, max_str, max_end);
return 0;
}
*min_str++= *max_str++ = *ptr;
if ((mblen= my_ismbchar(cs, ptr, end)) > 1)
{
if (ptr+mblen > end || min_str+mblen > min_end)
break;
while (mblen--)
*min_str++= *max_str++= *ptr++;
}
else
*min_str++= *max_str++= *ptr++;
}
*min_length= *max_length = (uint) (min_str - min_org);