Commit e39656fb authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/timka/mysql/src/5.0-virgin

into  mysql.com:/home/timka/mysql/src/5.0-2486

parents f887aec2 276bd123
Loading
Loading
Loading
Loading
+66 −0
Original line number Diff line number Diff line
@@ -3100,4 +3100,70 @@ end|
call p_bug11247(10)|
drop function f_bug11247|
drop procedure p_bug11247|
drop procedure if exists bug12168|
drop table if exists t1, t2|
create table t1 (a int)|
insert into t1 values (1),(2),(3),(4)|
create table t2 (a int)|
create procedure bug12168(arg1 char(1))
begin
declare b, c integer;
if arg1 = 'a' then
begin
declare c1 cursor for select a from t1 where a % 2;
declare continue handler for not found set b = 1;
set b = 0;
open c1;
c1_repeat: repeat
fetch c1 into c;
if (b = 1) then
leave c1_repeat;
end if;
insert into t2 values (c);
until b = 1
end repeat;
end;
end if;
if arg1 = 'b' then
begin
declare c2 cursor for select a from t1 where not a % 2;
declare continue handler for not found set b = 1;
set b = 0;
open c2;
c2_repeat: repeat
fetch c2 into c;
if (b = 1) then
leave c2_repeat;
end if;
insert into t2 values (c);
until b = 1
end repeat;
end;
end if;
end|
call bug12168('a')|
select * from t2|
a
1
3
truncate t2|
call bug12168('b')|
select * from t2|
a
2
4
truncate t2|
call bug12168('a')|
select * from t2|
a
1
3
truncate t2|
call bug12168('b')|
select * from t2|
a
2
4
truncate t2|
drop procedure if exists bug12168|
drop table t1,t2;
+66 −0
Original line number Diff line number Diff line
@@ -3928,6 +3928,72 @@ end|
call p_bug11247(10)|
drop function f_bug11247|
drop procedure p_bug11247|
#
# BUG#12168: "'DECLARE CONTINUE HANDLER FOR NOT FOUND ...' in conditional
# handled incorrectly"
#
--disable_warnings
drop procedure if exists bug12168|
drop table if exists t1, t2|
--enable_warnings

create table t1 (a int)|
insert into t1 values (1),(2),(3),(4)|

create table t2 (a int)|

create procedure bug12168(arg1 char(1))
begin
  declare b, c integer;
  if arg1 = 'a' then
    begin
      declare c1 cursor for select a from t1 where a % 2;
      declare continue handler for not found set b = 1;
      set b = 0;
      open c1;
      c1_repeat: repeat
        fetch c1 into c;
        if (b = 1) then
          leave c1_repeat;
        end if;

        insert into t2 values (c);
        until b = 1
      end repeat;
    end;
  end if;
  if arg1 = 'b' then
    begin
      declare c2 cursor for select a from t1 where not a % 2;
      declare continue handler for not found set b = 1;
      set b = 0;
      open c2;
      c2_repeat: repeat
        fetch c2 into c;
        if (b = 1) then
          leave c2_repeat;
        end if;

        insert into t2 values (c);
        until b = 1
      end repeat;
    end;
  end if;
end|

call bug12168('a')|
select * from t2|
truncate t2|
call bug12168('b')|
select * from t2|
truncate t2|
call bug12168('a')|
select * from t2|
truncate t2|
call bug12168('b')|
select * from t2|
truncate t2|
drop procedure if exists bug12168|

#
# BUG#NNNN: New bug synopsis
+2 −2
Original line number Diff line number Diff line
@@ -1986,7 +1986,7 @@ sp_instr_hpush_jump::execute(THD *thd, uint *nextp)
  sp_cond_type_t *p;

  while ((p= li++))
    thd->spcont->push_handler(p, m_handler, m_type, m_frame);
    thd->spcont->push_handler(p, m_ip+1, m_type, m_frame);

  *nextp= m_dest;
  DBUG_RETURN(0);
@@ -2003,7 +2003,7 @@ sp_instr_hpush_jump::print(String *str)
  str->append(" f=");
  str->qs_append(m_frame);
  str->append(" h=");
  str->qs_append(m_handler);
  str->qs_append(m_ip+1);
}

uint
+0 −2
Original line number Diff line number Diff line
@@ -714,7 +714,6 @@ class sp_instr_hpush_jump : public sp_instr_jump
  sp_instr_hpush_jump(uint ip, sp_pcontext *ctx, int htype, uint fp)
    : sp_instr_jump(ip, ctx), m_type(htype), m_frame(fp)
  {
    m_handler= ip+1;
    m_cond.empty();
  }

@@ -743,7 +742,6 @@ class sp_instr_hpush_jump : public sp_instr_jump

  int m_type;			// Handler type
  uint m_frame;
  uint m_handler;		// Location of handler
  List<struct sp_cond_type> m_cond;

}; // class sp_instr_hpush_jump : public sp_instr_jump