summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <peter@mysql.com>2002-11-24 17:26:26 +0300
committerunknown <peter@mysql.com>2002-11-24 17:26:26 +0300
commit5b1ced458013509629c7e8e052b88910cfbb6afd (patch)
treebce40fe371fa0025ed0a77a664f62de77cdd04bf /sql/item_strfunc.cc
parent8c8b97fdf4756a699346ae1688136624d76713bc (diff)
parent1049175831a4aa145f64e912388cc6079d7f5789 (diff)
downloadmariadb-git-5b1ced458013509629c7e8e052b88910cfbb6afd.tar.gz
Merge....
BitKeeper/etc/logging_ok: auto-union client/mysqladmin.c: Auto merged include/mysql.h: Auto merged libmysql/libmysql.c: Auto merged sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/lex.h: Auto merged sql/mini_client.cc: Auto merged sql/mysql_priv.h: Auto merged libmysql/password.c: Auto merged sql/sql_acl.cc: Auto merged sql/sql_acl.h: Auto merged sql/sql_class.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/mysqld.cc: Manual merge
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc28
1 files changed, 18 insertions, 10 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index e7d16387a00..133a2f4baeb 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1380,17 +1380,25 @@ String *Item_func_database::val_str(String *str)
if (!current_thd->db)
str->length(0);
else
- str->set((const char*) current_thd->db,(uint) strlen(current_thd->db), default_charset_info);
+ str->copy((const char*) current_thd->db,(uint) strlen(current_thd->db), system_charset_info, thd_charset());
return str;
}
String *Item_func_user::val_str(String *str)
{
- THD *thd=current_thd;
- if (str->copy((const char*) thd->user,(uint) strlen(thd->user), system_charset_info) ||
- str->append('@') ||
- str->append(thd->host ? thd->host : thd->ip ? thd->ip : ""))
- return &empty_string;
+ THD *thd=current_thd;
+ CHARSET_INFO *cs=thd_charset();
+ const char *host=thd->host ? thd->host : thd->ip ? thd->ip : "";
+ uint32 res_length=(strlen(thd->user)+strlen(host)+10) * cs->mbmaxlen;
+
+ if (str->alloc(res_length))
+ {
+ null_value=1;
+ return 0;
+ }
+ res_length=cs->snprintf(cs, (char*)str->ptr(), res_length, "%s@%s",thd->user,host);
+ str->length(res_length);
+ str->set_charset(cs);
return str;
}
@@ -1942,7 +1950,7 @@ String *Item_func_conv_charset::val_str(String *str)
s=(const uchar*)arg->ptr();
se=s+arg->length();
- dmaxlen=arg->length()*(to->mbmaxlen?to->mbmaxlen:1)+1;
+ dmaxlen=arg->length()*to->mbmaxlen+1;
str->alloc(dmaxlen);
d0=d=(unsigned char*)str->ptr();
de=d+dmaxlen;
@@ -1984,7 +1992,7 @@ outp:
void Item_func_conv_charset::fix_length_and_dec()
{
- max_length = args[0]->max_length*(conv_charset->mbmaxlen?conv_charset->mbmaxlen:1);
+ max_length = args[0]->max_length*conv_charset->mbmaxlen;
set_charset(conv_charset);
}
@@ -2016,7 +2024,7 @@ String *Item_func_conv_charset3::val_str(String *str)
s=(const uchar*)arg->ptr();
se=s+arg->length();
- dmaxlen=arg->length()*(to_charset->mbmaxlen?to_charset->mbmaxlen:1)+1;
+ dmaxlen=arg->length()*to_charset->mbmaxlen+1;
str->alloc(dmaxlen);
d0=d=(unsigned char*)str->ptr();
de=d+dmaxlen;
@@ -2134,7 +2142,7 @@ String *Item_func_charset::val_str(String *str)
if ((null_value=(args[0]->null_value || !res->charset())))
return 0;
- str->copy(res->charset()->name,strlen(res->charset()->name),default_charset_info);
+ str->copy(res->charset()->name,strlen(res->charset()->name),my_charset_latin1,thd_charset());
return str;
}