Commit 750bc269 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/extern/mysql/bk/mysql-5.0-runtime

into  mysql.com:/extern/mysql/5.0/bug18787/mysql-5.0-runtime


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/item_func.cc:
  Auto merged
parents 70695997 d9142f99
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -4848,4 +4848,14 @@ c 2
b	3
a	1
delete from t1|
drop procedure if exists bug18787|
create procedure bug18787()
begin
declare continue handler for sqlexception begin end;
select no_such_function();
end|
call bug18787()|
no_such_function()
NULL
drop procedure bug18787|
drop table t1,t2;
+18 −0
Original line number Diff line number Diff line
@@ -5698,6 +5698,24 @@ select * from t1 order by @x|
delete from t1|


#
# BUG#18787: Server crashed when calling a stored procedure containing
#            a misnamed function
#
--disable_warnings
drop procedure if exists bug18787|
--enable_warnings
create procedure bug18787()
begin
  declare continue handler for sqlexception begin end;

  select no_such_function();
end|

call bug18787()|
drop procedure bug18787|


#
# BUG#NNNN: New bug synopsis
#
+14 −8
Original line number Diff line number Diff line
@@ -4747,7 +4747,9 @@ Item_func_sp::sp_result_field(void) const
    share->table_cache_key = empty_name;
    share->table_name = empty_name;
  }
  field= m_sp->create_result_field(max_length, name, dummy_table);
  if (!(field= m_sp->create_result_field(max_length, name, dummy_table)))
    my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));

  DBUG_RETURN(field);
}

@@ -4775,8 +4777,9 @@ Item_func_sp::execute(Field **flp)
  {
    if (!(*flp= f= sp_result_field()))
    {
      my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));
      return 0;
      /* Error set by sp_result_field() */
      null_value= 1;
      return TRUE;
    }

    f->move_field((f->pack_length() > sizeof(result_buf)) ?
@@ -4931,16 +4934,19 @@ longlong Item_func_found_rows::val_int()
Field *
Item_func_sp::tmp_table_field(TABLE *t_arg)
{
  Field *res= 0;
  Field *field= 0;
  DBUG_ENTER("Item_func_sp::tmp_table_field");

  if (m_sp)
    res= m_sp->create_result_field(max_length, (const char*) name, t_arg);
    field= m_sp->create_result_field(max_length, (const char*) name, t_arg);
  
  if (!res) 
    res= Item_func::tmp_table_field(t_arg);
  if (!field) 
    field= Item_func::tmp_table_field(t_arg);

  DBUG_RETURN(res);
  if (!field)
    my_message(ER_OUT_OF_RESOURCES, ER(ER_OUT_OF_RESOURCES), MYF(0));

  DBUG_RETURN(field);
}