diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2015-05-21 16:31:24 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2015-05-29 11:43:02 +0200 |
commit | 1b00edc49a2f1e0a1995fc0562639d90d4c19ca2 (patch) | |
tree | c8259eed296263c5c2fd33ea5f5aa929e8be7f8e | |
parent | 34e01f80e4b68aa4fc9791637c516cdafdf03d5b (diff) | |
download | mariadb-git-1b00edc49a2f1e0a1995fc0562639d90d4c19ca2.tar.gz |
MDEV-7011: MAX_STATEMENT_TIME has no effect in a procedure after a previous successful statement
Do not reset timer inside stored procedures and functions.
-rw-r--r-- | mysql-test/r/max_statement_time.result | 30 | ||||
-rw-r--r-- | mysql-test/t/max_statement_time.test | 33 | ||||
-rw-r--r-- | sql/sql_class.h | 2 |
3 files changed, 65 insertions, 0 deletions
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 |