summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2015-05-21 16:31:24 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2015-05-29 11:43:02 +0200
commit1b00edc49a2f1e0a1995fc0562639d90d4c19ca2 (patch)
treec8259eed296263c5c2fd33ea5f5aa929e8be7f8e
parent34e01f80e4b68aa4fc9791637c516cdafdf03d5b (diff)
downloadmariadb-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.result30
-rw-r--r--mysql-test/t/max_statement_time.test33
-rw-r--r--sql/sql_class.h2
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