diff --git a/mysql-test/r/max_statement_time.result b/mysql-test/r/max_statement_time.result index 5a2562af9b5..c0cffb27a37 100644 --- a/mysql-test/r/max_statement_time.result +++ b/mysql-test/r/max_statement_time.result @@ -147,3 +147,33 @@ SELECT RELEASE_LOCK('lock'); RELEASE_LOCK('lock') 1 DROP TABLE t1; +# +# MDEV-7011:MAX_STATEMENT_TIME has no effect in a procedure after +# a previous successful statement +# +create table t1 (i int); +insert into t1 values (1),(2),(3),(4); +insert into t1 select a.* from t1 a, t1 b, t1 c, t1 d, t1 e, t1 f, t1 g; +create procedure pr() +begin +select 1; +select sql_no_cache * from t1 where i > 5; +select sql_no_cache * from t1 where i > 5; +end | +set max_statement_time = 0.001; +call pr(); +1 +1 +ERROR 70100: Query execution was interrupted (max_statement_time exceeded) +drop procedure pr; +create procedure pr() +begin +select sql_no_cache * from t1 where i > 5; +select sql_no_cache * from t1 where i > 5; +end | +set max_statement_time = 0.001; +call pr(); +ERROR 70100: Query execution was interrupted (max_statement_time exceeded) +set max_statement_time = 0; +drop procedure pr; +drop table t1; diff --git a/mysql-test/t/max_statement_time.test b/mysql-test/t/max_statement_time.test index 0356d3caa49..d994f04be83 100644 --- a/mysql-test/t/max_statement_time.test +++ b/mysql-test/t/max_statement_time.test @@ -187,3 +187,36 @@ disconnect con1; connection default; SELECT RELEASE_LOCK('lock'); DROP TABLE t1; + +--echo # +--echo # MDEV-7011:MAX_STATEMENT_TIME has no effect in a procedure after +--echo # a previous successful statement +--echo # +create table t1 (i int); +insert into t1 values (1),(2),(3),(4); +insert into t1 select a.* from t1 a, t1 b, t1 c, t1 d, t1 e, t1 f, t1 g; +delimiter |; +create procedure pr() + begin + select 1; + select sql_no_cache * from t1 where i > 5; + select sql_no_cache * from t1 where i > 5; + end | +delimiter ;| +set max_statement_time = 0.001; +--error ER_STATEMENT_TIMEOUT +call pr(); +drop procedure pr; +delimiter |; +create procedure pr() + begin + select sql_no_cache * from t1 where i > 5; + select sql_no_cache * from t1 where i > 5; + end | +delimiter ;| +set max_statement_time = 0.001; +--error ER_STATEMENT_TIMEOUT +call pr(); +set max_statement_time = 0; +drop procedure pr; +drop table t1; diff --git a/sql/sql_class.h b/sql/sql_class.h index ca532ae50b7..b84942d75e6 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3966,6 +3966,8 @@ public: void reset_query_timer() { #ifndef EMBEDDED_LIBRARY + if (spcont || in_sub_stmt || slave_thread) + return; if (!query_timer.expired) thr_timer_end(&query_timer); #endif