Commit 313b46a0 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/opt/local/work/tmp_merge

into  mysql.com:/opt/local/work/mysql-5.1-runtime


mysql-test/r/sp-prelocking.result:
  Auto merged
mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
storage/ndb/src/ndbapi/ndberror.c:
  Auto merged
strings/ctype-mb.c:
  Auto merged
mysql-test/t/sp-prelocking.test:
  Manual merge.
parents fee803af 0f0e518e
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -237,3 +237,21 @@ deallocate prepare stmt;
drop table t1;
drop view v1, v2, v3;
drop function bug15683;
drop table if exists t1, t2, t3;
drop function if exists bug19634;
create table t1 (id int, data int);
create table t2 (id int);
create table t3 (data int);
create function bug19634() returns int return (select count(*) from t3);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()";
execute stmt;
execute stmt;
deallocate prepare stmt;
create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id";
execute stmt;
execute stmt;
deallocate prepare stmt;
drop function bug19634;
drop table t1, t2, t3;
End of 5.0 tests
+21 −0
Original line number Diff line number Diff line
@@ -5000,4 +5000,25 @@ CALL bug18037_p2()|
DROP FUNCTION bug18037_f1|
DROP PROCEDURE bug18037_p1|
DROP PROCEDURE bug18037_p2|
drop table if exists t3|
drop procedure if exists bug15217|
create table t3 as select 1|
create procedure bug15217()
begin
declare var1 char(255);
declare cur1 cursor for select * from t3;
open cur1;
fetch cur1 into var1;
select concat('data was: /', var1, '/');
close cur1;
end |
call bug15217()|
concat('data was: /', var1, '/')
data was: /1/
flush tables |
call bug15217()|
concat('data was: /', var1, '/')
data was: /1/
drop table t3|
drop procedure bug15217|
drop table t1,t2;
+30 −1
Original line number Diff line number Diff line
@@ -271,6 +271,35 @@ deallocate prepare stmt;
drop table t1;
drop view v1, v2, v3;
drop function bug15683;


#
# End of 5.0 tests
# Bug#19634 "Re-execution of multi-delete which involve trigger/stored 
#            function crashes server"
#
--disable_warnings
drop table if exists t1, t2, t3;
drop function if exists bug19634;
--enable_warnings
create table t1 (id int, data int);
create table t2 (id int);
create table t3 (data int);
create function bug19634() returns int return (select count(*) from t3);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()";
# This should not crash server
execute stmt;
execute stmt;
deallocate prepare stmt;

create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data);
prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id";

execute stmt;
execute stmt;
deallocate prepare stmt;

drop function bug19634;
drop table t1, t2, t3;


--echo End of 5.0 tests
+27 −0
Original line number Diff line number Diff line
@@ -5893,6 +5893,33 @@ DROP FUNCTION bug18037_f1|
DROP PROCEDURE bug18037_p1|
DROP PROCEDURE bug18037_p2|

#
# Bug#15217 "Using a SP cursor on a table created with PREPARE fails with
#           weird error". Check that the code that is supposed to work at
#           the first execution of a stored procedure actually works for
#           sp_instr_copen.

--disable_warnings
drop table if exists t3|
drop procedure if exists bug15217|
--enable_warnings
create table t3 as select 1|
create procedure bug15217()
begin
  declare var1 char(255);
  declare cur1 cursor for select * from t3;
  open cur1;
  fetch cur1 into var1;
  select concat('data was: /', var1, '/');
  close cur1;
end |
# Returns expected result
call bug15217()|
flush tables |
# Returns error with garbage as column name
call bug15217()|
drop table t3|
drop procedure bug15217|

#
# BUG#NNNN: New bug synopsis
+3 −1
Original line number Diff line number Diff line
@@ -1091,7 +1091,6 @@ sp_head::execute(THD *thd)
    thd->net.no_send_error= 0;
    if (i->free_list)
      cleanup_items(i->free_list);
    i->state= Query_arena::EXECUTED;
    
    /* 
      If we've set thd->user_var_events_alloc to mem_root of this SP
@@ -2252,6 +2251,9 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp,
    m_lex->mark_as_requiring_prelocking(NULL);
  }
  thd->rollback_item_tree_changes();
  /* Update the state of the active arena. */
  thd->stmt_arena->state= Query_arena::EXECUTED;


  /*
    Unlike for PS we should not call Item's destructors for newly created
Loading