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()
else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
{
cached_result_type = STRING_RESULT;
set_charset((args[1]->binary() || args[2]->binary()) ?
&my_charset_bin : args[1]->charset());
if (set_charset(args[1]->charset(), args[1]->coercibility,
args[2]->charset(), args[2]->coercibility))
{
my_error(ER_WRONG_ARGUMENTS,MYF(0),func_name());
return;
}
}
else
{
......@@ -760,6 +764,7 @@ Item_func_if::val_str(String *str)
{
Item *arg= args[0]->val_int() ? args[1] : args[2];
String *res=arg->val_str(str);
res->set_charset(charset());
null_value=arg->null_value;
return res;
}
......
......@@ -855,9 +855,13 @@ void Item_func_min_max::fix_length_and_dec()
maybe_null=0;
cmp_type=item_cmp_type(cmp_type,args[i]->result_type());
if (i==0)
set_charset(args[i]->charset());
else if (args[i]->charset() == &my_charset_bin)
set_charset(&my_charset_bin);
set_charset(args[i]->charset(), args[i]->coercibility);
else if (set_charset(charset(), coercibility,
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)
}
}
}
res->set_charset(charset());
return res;
}
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