diff options
author | unknown <bar@bar.mysql.r18.ru> | 2002-10-01 17:23:28 +0500 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2002-10-01 17:23:28 +0500 |
commit | 0d2b6552b14292648afafe7dcd73df4b7975ba65 (patch) | |
tree | 9549ce1d413bf0ccd7c4a41c80cbd0663a64097d /sql/item_func.cc | |
parent | 9564cd43d2d20de54fcdd0ff88f2a23724ffde26 (diff) | |
download | mariadb-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.cc | 14 |
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; |