mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge msdesk.(none):/home/msvensson/mysql-4.1
into msdesk.(none):/home/msvensson/mysql-5.0
This commit is contained in:
@ -401,16 +401,12 @@ static my_bool my_like_range_big5(CHARSET_INFO *cs __attribute__((unused)),
|
||||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
|
||||
{
|
||||
if (ptr+1 != end && isbig5code(ptr[0],ptr[1]))
|
||||
{
|
||||
@ -421,7 +417,10 @@ static my_bool my_like_range_big5(CHARSET_INFO *cs __attribute__((unused)),
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (isbig5code(ptr[0], ptr[1]))
|
||||
*min_str++= *max_str++ = *ptr++;
|
||||
if (min_str < min_end)
|
||||
*min_str++= *max_str++= *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
|
@ -2714,16 +2714,12 @@ static my_bool my_like_range_gbk(CHARSET_INFO *cs __attribute__((unused)),
|
||||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0; ptr++, charlen--)
|
||||
{
|
||||
if (ptr+1 != end && isgbkcode(ptr[0],ptr[1]))
|
||||
{
|
||||
@ -2734,7 +2730,10 @@ static my_bool my_like_range_gbk(CHARSET_INFO *cs __attribute__((unused)),
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (isgbkcode(ptr[0], ptr[1]))
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
if (min_str < min_end)
|
||||
*min_str++= *max_str++= *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
|
@ -523,17 +523,13 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
||||
char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
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= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
@ -567,6 +563,7 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
|
||||
representation of the max_sort_char character,
|
||||
and copy it into max_str in a loop.
|
||||
*/
|
||||
*max_length= res_length;
|
||||
pad_max_char(cs, max_str, max_end);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1034,17 +1034,12 @@ my_bool my_like_range_simple(CHARSET_INFO *cs,
|
||||
char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
#ifdef USE_MB
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
#endif
|
||||
end= ptr + ptr_length;
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
for (; ptr != end && min_str != min_end && charlen > 0 ; ptr++, charlen--)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
|
@ -330,16 +330,13 @@ static my_bool my_like_range_sjis(CHARSET_INFO *cs __attribute__((unused)),
|
||||
uint res_length, char *min_str,char *max_str,
|
||||
uint *min_length,uint *max_length)
|
||||
{
|
||||
const char *end;
|
||||
const char *end= ptr + ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= my_charpos(cs, ptr, ptr+ptr_length, res_length/cs->mbmaxlen);
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
if (charlen < ptr_length)
|
||||
ptr_length= charlen;
|
||||
end= ptr + ptr_length;
|
||||
|
||||
while (ptr < end && min_str < min_end) {
|
||||
for ( ; ptr < end && min_str < min_end && charlen > 0 ; charlen--)
|
||||
{
|
||||
if (ismbchar_sjis(cs, ptr, end)) {
|
||||
*min_str++ = *max_str++ = *ptr++;
|
||||
if (min_str < min_end)
|
||||
|
@ -648,77 +648,6 @@ int my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Convert SQL LIKE string to C string
|
||||
|
||||
Arg: String, its length, escape character, resource length,
|
||||
minimal string and maximum string
|
||||
Ret: Always 0
|
||||
|
||||
IMPLEMENTATION
|
||||
We just copy this function from opt_range.cc. No need to convert to
|
||||
thai2sortable string. min_str and max_str will be use for comparison and
|
||||
converted there.
|
||||
|
||||
RETURN VALUES
|
||||
0
|
||||
*/
|
||||
|
||||
#define max_sort_chr ((char) 255)
|
||||
|
||||
static
|
||||
my_bool my_like_range_tis620(CHARSET_INFO *cs __attribute__((unused)),
|
||||
const char *ptr, uint ptr_length,
|
||||
pbool escape, pbool w_one, pbool w_many,
|
||||
uint res_length, char *min_str, char *max_str,
|
||||
uint *min_length, uint *max_length)
|
||||
{
|
||||
const char *end=ptr+ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
|
||||
for (; ptr != end && min_str != min_end ; ptr++)
|
||||
{
|
||||
if (*ptr == escape && ptr+1 != end)
|
||||
{
|
||||
ptr++; /* Skip escape */
|
||||
*min_str++ = *max_str++ = *ptr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_one) /* '_' in SQL */
|
||||
{
|
||||
*min_str++='\0'; /* This should be min char */
|
||||
*max_str++=max_sort_chr;
|
||||
continue;
|
||||
}
|
||||
if (*ptr == w_many) /* '%' in SQL */
|
||||
{
|
||||
/*
|
||||
Calculate length of keys:
|
||||
'a\0\0... is the smallest possible string when we have space expand
|
||||
a\ff\ff... is the biggest possible string
|
||||
*/
|
||||
*min_length= ((cs->state & MY_CS_BINSORT) ? (uint) (min_str - min_org) :
|
||||
res_length);
|
||||
*max_length= res_length;
|
||||
do
|
||||
{
|
||||
*min_str++ = 0;
|
||||
*max_str++ = max_sort_chr;
|
||||
} while (min_str != min_end);
|
||||
return 0;
|
||||
}
|
||||
*min_str++= *max_str++ = *ptr;
|
||||
}
|
||||
|
||||
*min_length= *max_length = (uint) (min_str - min_org);
|
||||
while (min_str != min_end)
|
||||
*min_str++= *max_str++ = ' '; /* Because of key compression */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static unsigned short cs_to_uni[256]={
|
||||
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
|
||||
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
|
||||
@ -928,7 +857,7 @@ static MY_COLLATION_HANDLER my_collation_ci_handler =
|
||||
my_strnncollsp_tis620,
|
||||
my_strnxfrm_tis620,
|
||||
my_strnxfrmlen_simple,
|
||||
my_like_range_tis620,
|
||||
my_like_range_simple,
|
||||
my_wildcmp_8bit, /* wildcmp */
|
||||
my_strcasecmp_8bit,
|
||||
my_instr_simple, /* QQ: To be fixed */
|
||||
@ -992,7 +921,7 @@ CHARSET_INFO my_charset_tis620_thai_ci=
|
||||
1, /* mbminlen */
|
||||
1, /* mbmaxlen */
|
||||
0, /* min_sort_char */
|
||||
0, /* max_sort_char */
|
||||
255, /* max_sort_char */
|
||||
0, /* escape_with_backslash_is_dangerous */
|
||||
&my_charset_handler,
|
||||
&my_collation_ci_handler
|
||||
@ -1023,7 +952,7 @@ CHARSET_INFO my_charset_tis620_bin=
|
||||
1, /* mbminlen */
|
||||
1, /* mbmaxlen */
|
||||
0, /* min_sort_char */
|
||||
0, /* max_sort_char */
|
||||
255, /* max_sort_char */
|
||||
0, /* escape_with_backslash_is_dangerous */
|
||||
&my_charset_handler,
|
||||
&my_collation_8bit_bin_handler
|
||||
|
@ -1450,10 +1450,12 @@ my_bool my_like_range_ucs2(CHARSET_INFO *cs,
|
||||
const char *end=ptr+ptr_length;
|
||||
char *min_org=min_str;
|
||||
char *min_end=min_str+res_length;
|
||||
uint charlen= res_length / cs->mbmaxlen;
|
||||
|
||||
for (; ptr + 1 < end && min_str + 1 < min_end ; ptr+=2)
|
||||
for ( ; ptr + 1 < end && min_str + 1 < min_end && charlen > 0
|
||||
; ptr+=2, charlen--)
|
||||
{
|
||||
if (ptr[0] == '\0' && ptr[1] == escape && ptr+2 < end)
|
||||
if (ptr[0] == '\0' && ptr[1] == escape && ptr + 1 < end)
|
||||
{
|
||||
ptr+=2; /* Skip escape */
|
||||
*min_str++= *max_str++ = ptr[0];
|
||||
|
Reference in New Issue
Block a user