1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

revision of fix_fields() calls (BUG2838)

mysql-test/r/subselect.result:
  test suite for BUG#2838
mysql-test/t/subselect.test:
  test suite for BUG#2838
sql/item.cc:
  revision of fix_fields() calls
  removed unnecessary variabl, and used correct last parameter of fix_fields()
sql/item_cmpfunc.cc:
  revision of fix_fields() calls (BUG#2838)
sql/item_func.cc:
  revision of fix_fields() calls
sql/item_row.cc:
  changed for efficience (and to be similar for Item_func::fix_fields)
sql/item_subselect.cc:
  fixed last arguments for fix_fields call
sql/item_sum.cc:
  layout fixed
  revision of fix_fields() calls
sql/log_event.cc:
  revision of fix_fields() calls
sql/set_var.cc:
  revision of fix_fields() calls
sql/sql_base.cc:
  revision of fix_fields() calls
sql/sql_class.cc:
  revision of fix_fields() calls
sql/sql_handler.cc:
  revision of fix_fields() calls
This commit is contained in:
unknown
2004-02-18 01:08:52 +02:00
parent 62cc89aad5
commit ae7eec928c
13 changed files with 75 additions and 36 deletions

View File

@ -62,19 +62,21 @@ bool Item_row::fix_fields(THD *thd, TABLE_LIST *tabl, Item **ref)
{
if ((*arg)->fix_fields(thd, tabl, arg))
return 1;
used_tables_cache |= (*arg)->used_tables();
if (const_item_cache&= (*arg)->const_item() && !with_null)
// we can't assign 'item' before, because fix_fields() can change arg
Item *item= *arg;
used_tables_cache |= item->used_tables();
if (const_item_cache&= item->const_item() && !with_null)
{
if ((*arg)->cols() > 1)
with_null|= (*arg)->null_inside();
if (item->cols() > 1)
with_null|= item->null_inside();
else
{
(*arg)->val_int();
with_null|= (*arg)->null_value;
item->val_int();
with_null|= item->null_value;
}
}
maybe_null|= (*arg)->maybe_null;
with_sum_func= with_sum_func || (*arg)->with_sum_func;
maybe_null|= item->maybe_null;
with_sum_func= with_sum_func || item->with_sum_func;
}
return 0;
}