mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge from Tim's 5.0.76-release tree to make 5.0.77 .
This commit is contained in:
@ -1610,8 +1610,11 @@ JOIN::exec()
|
||||
(zero_result_cause?zero_result_cause:"No tables used"));
|
||||
else
|
||||
{
|
||||
result->send_fields(*columns_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF);
|
||||
if (result->send_fields(*columns_list,
|
||||
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
|
||||
{
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
/*
|
||||
We have to test for 'conds' here as the WHERE may not be constant
|
||||
even if we don't have any tables for prepared statements or if
|
||||
@ -2498,7 +2501,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
|
||||
if (s->dependent & table->map)
|
||||
s->dependent |= table->reginfo.join_tab->dependent;
|
||||
}
|
||||
if (s->dependent)
|
||||
if (outer_join & s->table->map)
|
||||
s->table->maybe_null= 1;
|
||||
}
|
||||
/* Catch illegal cross references for outer joins */
|
||||
@ -9456,11 +9459,11 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
}
|
||||
if (type == Item::SUM_FUNC_ITEM && !group && !save_sum_fields)
|
||||
{ /* Can't calc group yet */
|
||||
((Item_sum*) item)->result_field=0;
|
||||
for (i=0 ; i < ((Item_sum*) item)->arg_count ; i++)
|
||||
Item_sum *sum_item= (Item_sum *) item;
|
||||
sum_item->result_field=0;
|
||||
for (i=0 ; i < sum_item->get_arg_count() ; i++)
|
||||
{
|
||||
Item **argp= ((Item_sum*) item)->args + i;
|
||||
Item *arg= *argp;
|
||||
Item *arg= sum_item->get_arg(i);
|
||||
if (!arg->const_item())
|
||||
{
|
||||
uint field_index= (uint) (reg_field - table->field);
|
||||
@ -9490,7 +9493,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
string_total_length+= new_field->pack_length();
|
||||
}
|
||||
thd->mem_root= mem_root_save;
|
||||
thd->change_item_tree(argp, new Item_field(new_field));
|
||||
arg= sum_item->set_arg(i, thd, new Item_field(new_field));
|
||||
thd->mem_root= &table->mem_root;
|
||||
if (!(new_field->flags & NOT_NULL_FLAG))
|
||||
{
|
||||
@ -9499,7 +9502,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||
new_field->maybe_null() is still false, it will be
|
||||
changed below. But we have to setup Item_field correctly
|
||||
*/
|
||||
(*argp)->maybe_null=1;
|
||||
arg->maybe_null=1;
|
||||
}
|
||||
new_field->query_id= thd->query_id;
|
||||
}
|
||||
@ -13245,6 +13248,7 @@ join_init_cache(THD *thd,JOIN_TAB *tables,uint table_count)
|
||||
length=0;
|
||||
for (i=0 ; i < table_count ; i++)
|
||||
{
|
||||
bool have_bit_fields= FALSE;
|
||||
uint null_fields=0,used_fields;
|
||||
|
||||
Field **f_ptr,*field;
|
||||
@ -13259,13 +13263,16 @@ join_init_cache(THD *thd,JOIN_TAB *tables,uint table_count)
|
||||
length+=field->fill_cache_field(copy);
|
||||
if (copy->blob_field)
|
||||
(*blob_ptr++)=copy;
|
||||
if (field->maybe_null())
|
||||
if (field->real_maybe_null())
|
||||
null_fields++;
|
||||
if (field->type() == MYSQL_TYPE_BIT &&
|
||||
((Field_bit*)field)->bit_len)
|
||||
have_bit_fields= TRUE;
|
||||
copy++;
|
||||
}
|
||||
}
|
||||
/* Copy null bits from table */
|
||||
if (null_fields && tables[i].table->s->null_fields)
|
||||
if (null_fields || have_bit_fields)
|
||||
{ /* must copy null bits */
|
||||
copy->str=(char*) tables[i].table->null_flags;
|
||||
copy->length= tables[i].table->s->null_bytes;
|
||||
@ -13930,9 +13937,9 @@ count_field_types(SELECT_LEX *select_lex, TMP_TABLE_PARAM *param,
|
||||
param->quick_group=0; // UDF SUM function
|
||||
param->sum_func_count++;
|
||||
|
||||
for (uint i=0 ; i < sum_item->arg_count ; i++)
|
||||
for (uint i=0 ; i < sum_item->get_arg_count() ; i++)
|
||||
{
|
||||
if (sum_item->args[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||
if (sum_item->get_arg(i)->real_item()->type() == Item::FIELD_ITEM)
|
||||
param->field_count++;
|
||||
else
|
||||
param->func_count++;
|
||||
|
Reference in New Issue
Block a user