Commit 4a77f335 authored by bar@bar.mysql.r18.ru's avatar bar@bar.mysql.r18.ru

field.cc:

  strnxfrm for binary and simple charsets
parent 4b9d29c8
...@@ -4591,38 +4591,19 @@ void Field_blob::sort_string(char *to,uint length) ...@@ -4591,38 +4591,19 @@ void Field_blob::sort_string(char *to,uint length)
{ {
char *blob; char *blob;
uint blob_length=get_length(); uint blob_length=get_length();
#ifdef USE_STRCOLL
uint blob_org_length=blob_length;
#endif
if (!blob_length) if (!blob_length)
bzero(to,length); bzero(to,length);
else else
{ {
if (blob_length > length)
blob_length=length;
memcpy_fixed(&blob,ptr+packlength,sizeof(char*)); memcpy_fixed(&blob,ptr+packlength,sizeof(char*));
if (binary())
{ blob_length=my_strnxfrm(field_charset,
memcpy(to,blob,blob_length); (unsigned char *)to, length,
to+=blob_length; (unsigned char *)blob, blob_length);
} if (blob_length >= length)
else return;
{ to+=blob_length;
#ifdef USE_STRCOLL
if (use_strnxfrm(field_charset))
{
blob_length=my_strnxfrm(field_charset,
(unsigned char *)to, length,
(unsigned char *)blob, blob_org_length);
if (blob_length >= length)
return;
to+=blob_length;
}
else
#endif
for (char *end=blob+blob_length ; blob != end ;)
*to++=(char) field_charset->sort_order[(uint) (uchar) *blob++];
}
bzero(to,length-blob_length); bzero(to,length-blob_length);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment