summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2002-10-01 17:23:28 +0500
committerunknown <bar@bar.mysql.r18.ru>2002-10-01 17:23:28 +0500
commit0d2b6552b14292648afafe7dcd73df4b7975ba65 (patch)
tree9549ce1d413bf0ccd7c4a41c80cbd0663a64097d /sql/item_func.cc
parent9564cd43d2d20de54fcdd0ff88f2a23724ffde26 (diff)
downloadmariadb-git-0d2b6552b14292648afafe7dcd73df4b7975ba65.tar.gz
User variables didn't store charset, so this didn't work
as expected and returned default charset instead: SET @x = _koi8_ru'test'; SELECT CHARSET(@x);
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 8728187718c..ded5e045af4 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1801,7 +1801,8 @@ Item_func_set_user_var::fix_length_and_dec()
}
void Item_func_set_user_var::update_hash(void *ptr, uint length,
- Item_result type)
+ Item_result type,
+ CHARSET_INFO *cs)
{
if ((null_value=args[0]->null_value))
{
@@ -1810,6 +1811,7 @@ void Item_func_set_user_var::update_hash(void *ptr, uint length,
my_free(entry->value,MYF(0));
entry->value=0;
entry->length=0;
+ entry->var_charset=cs;
}
else
{
@@ -1840,6 +1842,7 @@ void Item_func_set_user_var::update_hash(void *ptr, uint length,
memcpy(entry->value,ptr,length);
entry->length= length;
entry->type=type;
+ entry->var_charset=cs;
}
return;
@@ -1874,7 +1877,7 @@ double
Item_func_set_user_var::val()
{
double value=args[0]->val();
- update_hash((void*) &value,sizeof(value), REAL_RESULT);
+ update_hash((void*) &value,sizeof(value), REAL_RESULT, default_charset_info);
return value;
}
@@ -1882,7 +1885,7 @@ longlong
Item_func_set_user_var::val_int()
{
longlong value=args[0]->val_int();
- update_hash((void*) &value,sizeof(longlong),INT_RESULT);
+ update_hash((void*) &value,sizeof(longlong),INT_RESULT, default_charset_info);
return value;
}
@@ -1891,9 +1894,9 @@ Item_func_set_user_var::val_str(String *str)
{
String *res=args[0]->val_str(str);
if (!res) // Null value
- update_hash((void*) 0,0,STRING_RESULT);
+ update_hash((void*) 0,0,STRING_RESULT, default_charset_info);
else
- update_hash(res->c_ptr(),res->length()+1,STRING_RESULT);
+ update_hash(res->c_ptr(),res->length()+1,STRING_RESULT,res->charset());
return res;
}
@@ -1939,6 +1942,7 @@ Item_func_get_user_var::val_str(String *str)
null_value=1;
return NULL;
}
+ str->set_charset(entry->var_charset);
break;
}
return str;