diff options
author | unknown <bar@bar.mysql.r18.ru> | 2003-01-16 15:52:37 +0400 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2003-01-16 15:52:37 +0400 |
commit | df1a1075dd8cb63834f450ad91649eadfbc3e58f (patch) | |
tree | 5392d8644c98b10f50b4d104e6cbf891ff258f2b /sql/field.cc | |
parent | 80d251741239fd9c7477b44fcdc94520586a175c (diff) | |
download | mariadb-git-df1a1075dd8cb63834f450ad91649eadfbc3e58f.tar.gz |
field.cc:
strnxfrm for binary and simple charsets
sql/field.cc:
strnxfrm for binary and simple charsets
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/sql/field.cc b/sql/field.cc index 31ec6bf4a46..0ba2bbc5aa1 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4591,38 +4591,19 @@ void Field_blob::sort_string(char *to,uint length) { char *blob; uint blob_length=get_length(); -#ifdef USE_STRCOLL - uint blob_org_length=blob_length; -#endif + if (!blob_length) bzero(to,length); else { - if (blob_length > length) - blob_length=length; memcpy_fixed(&blob,ptr+packlength,sizeof(char*)); - if (binary()) - { - memcpy(to,blob,blob_length); - to+=blob_length; - } - else - { -#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++]; - } + + blob_length=my_strnxfrm(field_charset, + (unsigned char *)to, length, + (unsigned char *)blob, blob_length); + if (blob_length >= length) + return; + to+=blob_length; bzero(to,length-blob_length); } } |