Commit b3e89e3b authored by bar@bar.mysql.r18.ru's avatar bar@bar.mysql.r18.ru

IF() and LEAST() now honors coercibility

parent c87303d4
...@@ -723,8 +723,12 @@ Item_func_if::fix_length_and_dec() ...@@ -723,8 +723,12 @@ Item_func_if::fix_length_and_dec()
else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT) else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
{ {
cached_result_type = STRING_RESULT; cached_result_type = STRING_RESULT;
set_charset((args[1]->binary() || args[2]->binary()) ? if (set_charset(args[1]->charset(), args[1]->coercibility,
&my_charset_bin : args[1]->charset()); args[2]->charset(), args[2]->coercibility))
{
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
return;
}
} }
else else
{ {
...@@ -760,6 +764,7 @@ Item_func_if::val_str(String *str) ...@@ -760,6 +764,7 @@ Item_func_if::val_str(String *str)
{ {
Item *arg= args[0]->val_int() ? args[1] : args[2]; Item *arg= args[0]->val_int() ? args[1] : args[2];
String *res=arg->val_str(str); String *res=arg->val_str(str);
res->set_charset(charset());
null_value=arg->null_value; null_value=arg->null_value;
return res; return res;
} }
......
...@@ -855,9 +855,13 @@ void Item_func_min_max::fix_length_and_dec() ...@@ -855,9 +855,13 @@ void Item_func_min_max::fix_length_and_dec()
maybe_null=0; maybe_null=0;
cmp_type=item_cmp_type(cmp_type,args[i]->result_type()); cmp_type=item_cmp_type(cmp_type,args[i]->result_type());
if (i==0) if (i==0)
set_charset(args[i]->charset()); set_charset(args[i]->charset(), args[i]->coercibility);
else if (args[i]->charset() == &my_charset_bin) else if (set_charset(charset(), coercibility,
set_charset(&my_charset_bin); args[i]->charset(), args[i]->coercibility))
{
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
break;
}
} }
} }
...@@ -909,6 +913,7 @@ String *Item_func_min_max::val_str(String *str) ...@@ -909,6 +913,7 @@ String *Item_func_min_max::val_str(String *str)
} }
} }
} }
res->set_charset(charset());
return res; return res;
} }
case ROW_RESULT: case ROW_RESULT:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment