Commit 5ed7e973 authored by unknown's avatar unknown
Browse files

Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/psergey/mysql-5.0-bug12943


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/item_func.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
parents 65ba93fd eb769e54
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -156,3 +156,60 @@ slave: 6
drop procedure p1;
drop function f1;
drop table t1,t2;
create table t1 (a int);
create procedure p1()
begin
insert into t1 values(@x);
set @x=@x+1;
insert into t1 values(@x);
if (f2()) then
insert into t1 values(1243);
end if;
end//
create function f2() returns int
begin
insert into t1 values(@z);
set @z=@z+1;
insert into t1 values(@z);
return 0;
end//
create function f1() returns int
begin
insert into t1 values(@y);
call p1();
return 0;
end//
set @x=10;
set @y=20;
set @z=100;
select f1();
f1()
0
set @x=30;
call p1();
select 'master', a from t1;
master	a
master	20
master	10
master	11
master	100
master	101
master	30
master	31
master	101
master	102
select 'slave', a from t1;
slave	a
slave	20
slave	10
slave	11
slave	100
slave	101
slave	30
slave	31
slave	101
slave	102
drop table t1;
drop function f1;
drop function f2;
drop procedure p1;
+13 −0
Original line number Diff line number Diff line
@@ -3085,6 +3085,19 @@ column_name bug10055(t.column_name)
id	id
data	data
drop function bug10055|
drop procedure if exists bug12297|
create procedure bug12297(lim int)
begin
set @x = 0;
repeat
insert into t1(id,data)
values('aa', @x);
set @x = @x + 1;
until @x >= lim
end repeat;
end|
call bug12297(10)|
drop procedure bug12297|
drop function if exists f_bug11247|
drop procedure if exists p_bug11247|
create function f_bug11247(param int)
+48 −0
Original line number Diff line number Diff line
@@ -152,4 +152,52 @@ drop procedure p1;
drop function f1;
drop table t1,t2;

# BUG#12637: User variables + SPs replication
create table t1 (a int);
delimiter //;
create procedure p1()
begin
  insert into t1 values(@x);
  set @x=@x+1;
  insert into t1 values(@x);
  if (f2()) then
    insert into t1 values(1243);
  end if;
end//

create function f2() returns int
begin
  insert into t1 values(@z);
  set @z=@z+1;
  insert into t1 values(@z);
  return 0;
end//

create function f1() returns int
begin
  insert into t1 values(@y);
  call p1();
  return 0;
end//

delimiter ;//

set @x=10;
set @y=20;
set @z=100;
select f1();

set @x=30;
call p1();

select 'master', a from t1;
sync_slave_with_master;
connection slave;
select 'slave', a from t1;

connection master;
drop table t1;
drop function f1;
drop function f2;
drop procedure p1;
sync_slave_with_master;
+13 −19
Original line number Diff line number Diff line
@@ -3877,29 +3877,23 @@ drop function bug10055|
# consumption by passing large input parameter.
#

#
#  Note: the test is currenly disabled because of the
#  Bug #12637: SP crashes the server if it has update query with user var
#  & binlog is enabled.
#

--disable_warnings
#drop procedure if exists bug12297|
drop procedure if exists bug12297|
--enable_warnings

#create procedure bug12297(lim int)
#begin
#  set @x = 0;
#  repeat
#   insert into t1(id,data)
#   values('aa', @x);
#   set @x = @x + 1;
#  until @x >= lim
#  end repeat;
#end|
create procedure bug12297(lim int)
begin
  set @x = 0;
  repeat
    insert into t1(id,data)
    values('aa', @x);
    set @x = @x + 1;
  until @x >= lim
  end repeat;
end|

#call bug12297(10)|
#drop procedure bug12297|
call bug12297(10)|
drop procedure bug12297|

#
# Bug #11247 "Stored procedures: Function calls in long loops leak memory"
+11 −4
Original line number Diff line number Diff line
@@ -3884,7 +3884,8 @@ int get_var_with_binlog(THD *thd, enum_sql_command sql_command,
    if (!(var_entry= get_variable(&thd->user_vars, name, 0)))
      goto err;
  }
  else if (var_entry->used_query_id == thd->query_id)
  else if (var_entry->used_query_id == thd->query_id ||
           mysql_bin_log.is_query_in_union(thd, var_entry->used_query_id))
  {
    /* 
       If this variable was already stored in user_var_events by this query
@@ -3901,10 +3902,16 @@ int get_var_with_binlog(THD *thd, enum_sql_command sql_command,
    appears:
    > set @a:=1;
    > insert into t1 values (@a), (@a:=@a+1), (@a:=@a+1);
    We have to write to binlog value @a= 1;
    We have to write to binlog value @a= 1.
    
    We allocate the user_var_event on user_var_events_alloc pool, not on
    the this-statement-execution pool because in SPs user_var_event objects 
    may need to be valid after current [SP] statement execution pool is
    destroyed.
  */
  size= ALIGN_SIZE(sizeof(BINLOG_USER_VAR_EVENT)) + var_entry->length;
  if (!(user_var_event= (BINLOG_USER_VAR_EVENT *) thd->alloc(size)))
  if (!(user_var_event= (BINLOG_USER_VAR_EVENT *)
        alloc_root(thd->user_var_events_alloc, size)))
    goto err;
  
  user_var_event->value= (char*) user_var_event +
Loading