diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 37839fdb65016683f29a4216fc14ab1891ddaa6f..db989481aa3677afe59db7fb39af5a617a6180b7 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -893,6 +893,21 @@ avg 0 4.4 delete from t1| delete from t2| drop procedure bug1874| +create procedure bug2260() +begin +declare v1 int; +declare continue handler for not found set @x2 = 1; +declare c1 cursor for select data from t1; +open c1; +fetch c1 into v1; +set @x2 = 2; +close c1; +end| +call bug2260()| +select @x2| +@x2 +2 +drop procedure bug2260| drop table if exists fac| create table fac (n int unsigned not null primary key, f bigint unsigned)| create procedure ifac(n int unsigned) diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 11a00c51996a5494c668519713eaf97eb84facca..be9bc53b9fc6a0d08c6f35203fc8022a4db0b7ed 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -1036,6 +1036,25 @@ delete from t1| delete from t2| drop procedure bug1874| +# +# BUG#2260 +# +create procedure bug2260() +begin + declare v1 int; + declare continue handler for not found set @x2 = 1; + declare c1 cursor for select data from t1; + + open c1; + fetch c1 into v1; + set @x2 = 2; + close c1; +end| + +call bug2260()| +select @x2| +drop procedure bug2260| + # # Some "real" examples diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc index 225adc74a6bcc6b7d103dd429e50665344c4b31c..f328cdb728579e544489bd99cca47288bc9686a7 100644 --- a/sql/sp_rcontext.cc +++ b/sql/sp_rcontext.cc @@ -72,15 +72,15 @@ sp_rcontext::find_handler(uint sql_errno) found= 1; break; case sp_cond_type_t::warning: - if (sqlstate[0] == '0' && sqlstate[0] == '1') + if (sqlstate[0] == '0' && sqlstate[1] == '1') found= 1; break; case sp_cond_type_t::notfound: - if (sqlstate[0] == '0' && sqlstate[0] == '2') + if (sqlstate[0] == '0' && sqlstate[1] == '2') found= 1; break; case sp_cond_type_t::exception: - if (sqlstate[0] != '0' || sqlstate[0] > '2') + if (sqlstate[0] != '0' || sqlstate[1] > '2') found= 1; break; }