mirror of
https://github.com/MariaDB/server.git
synced 2025-11-03 14:33:32 +03:00
Post-merge fixes.
This commit is contained in:
@@ -125,7 +125,7 @@ static int cmp_row_type(Item* item1, Item* item2)
|
|||||||
0 otherwise
|
0 otherwise
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
|
static int agg_cmp_type(Item_result *type, Item **items, uint nitems)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
type[0]= items[0]->result_type();
|
type[0]= items[0]->result_type();
|
||||||
@@ -146,6 +146,42 @@ static int agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Collects different types for comparison of first item with each other items
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
collect_cmp_types()
|
||||||
|
items Array of items to collect types from
|
||||||
|
nitems Number of items in the array
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
This function collects different result types for comparison of the first
|
||||||
|
item in the list with each of the remaining items in the 'items' array.
|
||||||
|
|
||||||
|
RETURN
|
||||||
|
0 - if row type incompatibility has been detected (see cmp_row_type)
|
||||||
|
Bitmap of collected types - otherwise
|
||||||
|
*/
|
||||||
|
|
||||||
|
static uint collect_cmp_types(Item **items, uint nitems)
|
||||||
|
{
|
||||||
|
uint i;
|
||||||
|
uint found_types;
|
||||||
|
Item_result left_result= items[0]->result_type();
|
||||||
|
DBUG_ASSERT(nitems > 1);
|
||||||
|
found_types= 0;
|
||||||
|
for (i= 1; i < nitems ; i++)
|
||||||
|
{
|
||||||
|
if ((left_result == ROW_RESULT ||
|
||||||
|
items[i]->result_type() == ROW_RESULT) &&
|
||||||
|
cmp_row_type(items[0], items[i]))
|
||||||
|
return 0;
|
||||||
|
found_types|= 1<< (uint)item_cmp_type(left_result,
|
||||||
|
items[i]->result_type());
|
||||||
|
}
|
||||||
|
return found_types;
|
||||||
|
}
|
||||||
|
|
||||||
static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
|
static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
|
||||||
const char *fname)
|
const char *fname)
|
||||||
{
|
{
|
||||||
@@ -2069,24 +2105,8 @@ void Item_func_case::fix_length_and_dec()
|
|||||||
for (nagg= 0; nagg < ncases/2 ; nagg++)
|
for (nagg= 0; nagg < ncases/2 ; nagg++)
|
||||||
agg[nagg+1]= args[nagg*2];
|
agg[nagg+1]= args[nagg*2];
|
||||||
nagg++;
|
nagg++;
|
||||||
found_types= collect_cmp_types(agg, nagg);
|
if (!(found_types= collect_cmp_types(agg, nagg)))
|
||||||
|
return;
|
||||||
for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
|
|
||||||
{
|
|
||||||
if (found_types & (1 << i) && !cmp_items[i])
|
|
||||||
{
|
|
||||||
DBUG_ASSERT((Item_result)i != ROW_RESULT);
|
|
||||||
if ((Item_result)i == STRING_RESULT &&
|
|
||||||
agg_arg_charsets(cmp_collation, agg, nagg, MY_COLL_CMP_CONV, 1))
|
|
||||||
return;
|
|
||||||
if (!(cmp_items[i]=
|
|
||||||
cmp_item::get_comparator((Item_result)i,
|
|
||||||
cmp_collation.collation)))
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
found_types= collect_cmp_types(agg, nagg);
|
|
||||||
|
|
||||||
for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
|
for (i= 0; i <= (uint)DECIMAL_RESULT; i++)
|
||||||
{
|
{
|
||||||
@@ -2790,7 +2810,8 @@ void Item_func_in::fix_length_and_dec()
|
|||||||
uint type_cnt= 0, i;
|
uint type_cnt= 0, i;
|
||||||
Item_result cmp_type= STRING_RESULT;
|
Item_result cmp_type= STRING_RESULT;
|
||||||
left_result_type= args[0]->result_type();
|
left_result_type= args[0]->result_type();
|
||||||
found_types= collect_cmp_types(args, arg_count);
|
if (!(found_types= collect_cmp_types(args, arg_count)))
|
||||||
|
return;
|
||||||
|
|
||||||
for (arg= args + 1, arg_end= args + arg_count; arg != arg_end ; arg++)
|
for (arg= args + 1, arg_end= args + arg_count; arg != arg_end ; arg++)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user