summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2014-10-26 16:20:39 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2014-10-26 16:20:39 +0100
commit52a93f7c2cea157753f0c1dfddc468cca35127cb (patch)
tree348611a19659d76d42d823fa5e03d81c18dc3309
parent5c5fd70fe6a0b4a3301fef386cdfa01e6d0e122b (diff)
downloadmariadb-git-52a93f7c2cea157753f0c1dfddc468cca35127cb.tar.gz
MDEV-6940: SET STATEMENT executed after SET GLOBAL does not work
SET STATEMENT is actually session variables SET so option_type should be set.
-rw-r--r--mysql-test/r/set_statement.result12
-rw-r--r--mysql-test/t/set_statement.test12
-rw-r--r--sql/sql_yacc.yy1
3 files changed, 25 insertions, 0 deletions
diff --git a/mysql-test/r/set_statement.result b/mysql-test/r/set_statement.result
index 8bdcdde58fb..ae474882687 100644
--- a/mysql-test/r/set_statement.result
+++ b/mysql-test/r/set_statement.result
@@ -1040,3 +1040,15 @@ SELECT @@MAX_STATEMENT_TIME;
0.000000
SET STATEMENT keycache1.key_buffer_size=1024 FOR SELECT 1;
ERROR HY000: Variable 'key_buffer_size' is a GLOBAL variable and should be set with SET GLOBAL
+set @save_general_log=@@general_log;
+# SET STATEMENT works (OK)
+set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
+@@lock_wait_timeout
+1
+# Setting a totally unrelated global variable
+set global general_log=0;
+# SET STATEMENT should work
+set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
+@@lock_wait_timeout
+1
+set global general_log=@save_general_log;
diff --git a/mysql-test/t/set_statement.test b/mysql-test/t/set_statement.test
index c1615321d33..6382a35d63d 100644
--- a/mysql-test/t/set_statement.test
+++ b/mysql-test/t/set_statement.test
@@ -982,3 +982,15 @@ SELECT @@MAX_STATEMENT_TIME;
--error ER_GLOBAL_VARIABLE
SET STATEMENT keycache1.key_buffer_size=1024 FOR SELECT 1;
+
+#
+# MDEV-6940: SET STATEMENT executed after SET GLOBAL does not work
+#
+set @save_general_log=@@general_log;
+--echo # SET STATEMENT works (OK)
+set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
+--echo # Setting a totally unrelated global variable
+set global general_log=0;
+--echo # SET STATEMENT should work
+set statement lock_wait_timeout=1 for select @@lock_wait_timeout;
+set global general_log=@save_general_log;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 08223819e7d..256c78058f4 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -14398,6 +14398,7 @@ set:
{
LEX *lex= Lex;
mysql_init_select(lex);
+ lex->option_type= OPT_SESSION;
lex->sql_command= SQLCOM_SET_OPTION;
lex->autocommit= 0;
}