summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorNeeraj Bisht <neeraj.x.bisht@oracle.com>2014-02-12 14:33:56 +0530
committerNeeraj Bisht <neeraj.x.bisht@oracle.com>2014-02-12 14:33:56 +0530
commita3123b847515b9607e34ecd2a408c0f4efc0d5bc (patch)
treecf3a270bb74235b92be8fd5825703b15cc3c0152 /mysql-test
parentb0b08e76f35bab8c1f1a89fe1ccd27670aa8a8f7 (diff)
downloadmariadb-git-a3123b847515b9607e34ecd2a408c0f4efc0d5bc.tar.gz
Bug#17075846 - UNQUOTED FILE NAMES FOR VARIABLE VALUES ARE
ACCEPTED BUT PARSED INCORRECTLY When we are setting the value in a system variable, We can set it like set sys_var="Iden1.Iden2"; //1 set sys_var='Iden1.Iden2'; //2 set sys_var=Iden1.Iden2; //3 set sys_var=.ident1.ident2; //4 set sys_var=`Iden1.Iden2`; //5 While parsing, for case 1(when ANSI_QUOTES is enable) and 2, we will take as string literal(we will make item of type Item_string). for case 3 & 4, taken as Item_field, where Iden1 is a table name and iden2 is a field name. for case 5, again Item_field type, where iden1.iden2 is taken as field name. Now in case 1, when we are assigning some value to system variable (which can take string or enumerate type data), we are setting only field part. This means only iden2 value will be set for system variable. This result in wrong result. Solution: (for string type) We need to Document that we are not allowed to set system variable which takes string as identifier, otherwise result in unexpected behaviour. (for enumerate type) if we pass iden1.iden2, we will give an error ER_WRONG_TYPE_FOR_VAR (Incorrect argument type to variable).
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/parser.result25
-rw-r--r--mysql-test/suite/sys_vars/r/general_log_file_basic.result1
-rw-r--r--mysql-test/suite/sys_vars/r/slow_query_log_file_basic.result1
-rw-r--r--mysql-test/suite/sys_vars/t/general_log_file_basic.test2
-rw-r--r--mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test2
-rw-r--r--mysql-test/t/parser.test25
6 files changed, 54 insertions, 2 deletions
diff --git a/mysql-test/r/parser.result b/mysql-test/r/parser.result
index 1ea9e91df8a..a96773b8d81 100644
--- a/mysql-test/r/parser.result
+++ b/mysql-test/r/parser.result
@@ -622,3 +622,28 @@ DROP TABLE t1, t2, t3;
#
# End of 5.1 tests
#
+#
+# Bug#17075846 : unquoted file names for variable values are
+# accepted but parsed incorrectly
+#
+SET default_storage_engine=a.myisam;
+ERROR 42000: Incorrect argument type to variable 'default_storage_engine'
+SET default_storage_engine = .a.MyISAM;
+ERROR 42000: Incorrect argument type to variable 'default_storage_engine'
+SET default_storage_engine = a.b.MyISAM;
+ERROR 42000: Incorrect argument type to variable 'default_storage_engine'
+SET default_storage_engine = `a`.MyISAM;
+ERROR 42000: Incorrect argument type to variable 'default_storage_engine'
+SET default_storage_engine = `a`.`MyISAM`;
+ERROR 42000: Incorrect argument type to variable 'default_storage_engine'
+set default_storage_engine = "a.MYISAM";
+ERROR 42000: Unknown storage engine 'a.MYISAM'
+set default_storage_engine = 'a.MYISAM';
+ERROR 42000: Unknown storage engine 'a.MYISAM'
+set default_storage_engine = `a.MYISAM`;
+ERROR 42000: Unknown storage engine 'a.MYISAM'
+CREATE TABLE t1 (s VARCHAR(100));
+CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
+SET default_storage_engine = NEW.INNODB;
+ERROR 42S22: Unknown column 'INNODB' in 'NEW'
+DROP TABLE t1;
diff --git a/mysql-test/suite/sys_vars/r/general_log_file_basic.result b/mysql-test/suite/sys_vars/r/general_log_file_basic.result
index 611e0f80d86..30bb0f35900 100644
--- a/mysql-test/suite/sys_vars/r/general_log_file_basic.result
+++ b/mysql-test/suite/sys_vars/r/general_log_file_basic.result
@@ -10,6 +10,7 @@ RIGHT(@@global.general_log_file, length(@a)) = @a
1
'#--------------------FN_DYNVARS_004_02------------------------#'
SET @@global.general_log_file = mytest.log;
+ERROR 42000: Incorrect argument type to variable 'general_log_file'
SET @@global.general_log_file = 12;
ERROR 42000: Incorrect argument type to variable 'general_log_file'
'#----------------------FN_DYNVARS_004_03------------------------#'
diff --git a/mysql-test/suite/sys_vars/r/slow_query_log_file_basic.result b/mysql-test/suite/sys_vars/r/slow_query_log_file_basic.result
index e3c48725998..c032a36ce6a 100644
--- a/mysql-test/suite/sys_vars/r/slow_query_log_file_basic.result
+++ b/mysql-test/suite/sys_vars/r/slow_query_log_file_basic.result
@@ -7,6 +7,7 @@ RIGHT(@@global.slow_query_log_file, length(@a)) = @a
1
'#--------------------FN_DYNVARS_004_02------------------------#'
SET @@global.slow_query_log_file = mytest.log;
+ERROR 42000: Incorrect argument type to variable 'slow_query_log_file'
SET @@global.slow_query_log_file = 12;
ERROR 42000: Incorrect argument type to variable 'slow_query_log_file'
'#----------------------FN_DYNVARS_004_03------------------------#'
diff --git a/mysql-test/suite/sys_vars/t/general_log_file_basic.test b/mysql-test/suite/sys_vars/t/general_log_file_basic.test
index 43d7414a0c2..c1be3f53d4f 100644
--- a/mysql-test/suite/sys_vars/t/general_log_file_basic.test
+++ b/mysql-test/suite/sys_vars/t/general_log_file_basic.test
@@ -54,7 +54,7 @@ SELECT RIGHT(@@global.general_log_file, length(@a)) = @a;
# Change the value of general_log_file to a invalid value #
#######################################################################
-# Assumed text if no quotes or numbers.
+--error ER_WRONG_TYPE_FOR_VAR
SET @@global.general_log_file = mytest.log;
--error ER_WRONG_TYPE_FOR_VAR
SET @@global.general_log_file = 12;
diff --git a/mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test b/mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test
index bac0d0c8198..8e68ed41baa 100644
--- a/mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test
+++ b/mysql-test/suite/sys_vars/t/slow_query_log_file_basic.test
@@ -52,7 +52,7 @@ SELECT RIGHT(@@global.slow_query_log_file, length(@a)) = @a;
# Change the value of slow_query_log_file to a invalid value #
#######################################################################
-# Assumed text if no quotes or numbers.
+--error ER_WRONG_TYPE_FOR_VAR
SET @@global.slow_query_log_file = mytest.log;
--error ER_WRONG_TYPE_FOR_VAR
SET @@global.slow_query_log_file = 12;
diff --git a/mysql-test/t/parser.test b/mysql-test/t/parser.test
index d477843b22b..6899e2876a6 100644
--- a/mysql-test/t/parser.test
+++ b/mysql-test/t/parser.test
@@ -733,3 +733,28 @@ DROP TABLE t1, t2, t3;
--echo # End of 5.1 tests
--echo #
+--echo #
+--echo # Bug#17075846 : unquoted file names for variable values are
+--echo # accepted but parsed incorrectly
+--echo #
+--error ER_WRONG_TYPE_FOR_VAR
+SET default_storage_engine=a.myisam;
+--error ER_WRONG_TYPE_FOR_VAR
+SET default_storage_engine = .a.MyISAM;
+--error ER_WRONG_TYPE_FOR_VAR
+SET default_storage_engine = a.b.MyISAM;
+--error ER_WRONG_TYPE_FOR_VAR
+SET default_storage_engine = `a`.MyISAM;
+--error ER_WRONG_TYPE_FOR_VAR
+SET default_storage_engine = `a`.`MyISAM`;
+--error ER_UNKNOWN_STORAGE_ENGINE
+set default_storage_engine = "a.MYISAM";
+--error ER_UNKNOWN_STORAGE_ENGINE
+set default_storage_engine = 'a.MYISAM';
+--error ER_UNKNOWN_STORAGE_ENGINE
+set default_storage_engine = `a.MYISAM`;
+CREATE TABLE t1 (s VARCHAR(100));
+--ERROR ER_BAD_FIELD_ERROR
+CREATE TRIGGER trigger1 BEFORE INSERT ON t1 FOR EACH ROW
+SET default_storage_engine = NEW.INNODB;
+DROP TABLE t1;