summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-03-17 21:56:34 +0400
committerunknown <bar@bar.mysql.r18.ru>2003-03-17 21:56:34 +0400
commit84f0e1172981750a85bae8090548784f0aefa1e2 (patch)
tree1220cb8b5a2d5a6f85c1ee028fa98cf95cf2f38c /sql/item_strfunc.cc
parent3ca97c63ba7dc4533b9b8b520263a6f6ee74efc8 (diff)
downloadmariadb-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.cc55
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()