Loading mysql-test/r/sp.result +66 −0 Original line number Diff line number Diff line Loading @@ -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; mysql-test/t/sp.test +66 −0 Original line number Diff line number Diff line Loading @@ -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 Loading sql/sp_head.cc +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading sql/sp_head.h +0 −2 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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 Loading Loading
mysql-test/r/sp.result +66 −0 Original line number Diff line number Diff line Loading @@ -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;
mysql-test/t/sp.test +66 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
sql/sp_head.cc +2 −2 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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 Loading
sql/sp_head.h +0 −2 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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 Loading