diff options
author | unknown <bar@bar.mysql.r18.ru> | 2003-03-17 21:56:34 +0400 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2003-03-17 21:56:34 +0400 |
commit | 84f0e1172981750a85bae8090548784f0aefa1e2 (patch) | |
tree | 1220cb8b5a2d5a6f85c1ee028fa98cf95cf2f38c /sql/item_strfunc.cc | |
parent | 3ca97c63ba7dc4533b9b8b520263a6f6ee74efc8 (diff) | |
download | mariadb-git-84f0e1172981750a85bae8090548784f0aefa1e2.tar.gz |
mysql-test/t/ctype_many.test:
Automatic client-server charset recoding has been added
mysys/charset.c:
Automatic client-server charset recoding has been added
sql/item.cc:
Automatic client-server charset recoding has been added
sql/item.h:
Automatic client-server charset recoding has been added
sql/item_cmpfunc.cc:
Automatic client-server charset recoding has been added
sql/item_func.cc:
Automatic client-server charset recoding has been added
sql/item_strfunc.cc:
Automatic client-server charset recoding has been added
sql/mysqld.cc:
Automatic client-server charset recoding has been added
sql/protocol.cc:
Automatic client-server charset recoding has been added
sql/sql_string.cc:
Automatic client-server charset recoding has been added
sql/sql_yacc.yy:
Automatic client-server charset recoding has been added
strings/ctype-utf8.c:
Automatic client-server charset recoding has been added
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 55 |
1 files changed, 2 insertions, 53 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index 80d85e565e7..f68a0dc9e73 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -2015,65 +2015,14 @@ String *Item_func_conv::val_str(String *str) String *Item_func_conv_charset::val_str(String *str) { - my_wc_t wc; - int cnvres; - const uchar *s, *se; - uchar *d, *d0, *de; - uint32 dmaxlen; String *arg= args[0]->val_str(str); - CHARSET_INFO *from,*to; - if (!arg) { null_value=1; return 0; } - null_value=0; - - from=arg->charset(); - to=conv_charset; - - s=(const uchar*)arg->ptr(); - se=s+arg->length(); - - dmaxlen=arg->length()*to->mbmaxlen+1; - str->alloc(dmaxlen); - d0=d=(unsigned char*)str->ptr(); - de=d+dmaxlen; - - while (1) - { - cnvres=from->mb_wc(from,&wc,s,se); - if (cnvres>0) - { - s+=cnvres; - } - else if (cnvres==MY_CS_ILSEQ) - { - s++; - wc='?'; - } - else - break; - -outp: - cnvres=to->wc_mb(to,wc,d,de); - if (cnvres>0) - { - d+=cnvres; - } - else if (cnvres==MY_CS_ILUNI && wc!='?') - { - wc='?'; - goto outp; - } - else - break; - }; - - str->length((uint32) (d-d0)); - str->set_charset(to); - return str; + null_value= str->copy(arg->ptr(),arg->length(),arg->charset(),conv_charset); + return null_value ? 0 : str; } void Item_func_conv_charset::fix_length_and_dec() |