summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2005-06-02 16:17:44 +0500
committerunknown <bar@mysql.com>2005-06-02 16:17:44 +0500
commit17678a7b885beb59fa808b7ace5cee4a0e21667d (patch)
treeba349e96ee75c58e59e1948f4216483c5713080c
parentd7d3be6b16ebb63d84b39cf109153becf8f08786 (diff)
downloadmariadb-git-17678a7b885beb59fa808b7ace5cee4a0e21667d.tar.gz
item_func.cc:
set_var.cc: variables.result variables.test Bug #10904 Illegal mix of collations between a system variable and a constant Changing coercibility of system variables to SYSCONST, to be the same with USER(), DATABASE(), etc. sql/item_func.cc: Bug #10904 Illegal mix of collations between a system variable and a constant Changing coercibility of system variables to SYSCONST To be the same with USER(), DATABASE(), etc.
-rw-r--r--mysql-test/r/variables.result6
-rw-r--r--mysql-test/t/variables.test7
-rw-r--r--sql/item_func.cc2
-rw-r--r--sql/set_var.cc3
4 files changed, 16 insertions, 2 deletions
diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result
index 6d4f9055e4e..602750d5033 100644
--- a/mysql-test/r/variables.result
+++ b/mysql-test/r/variables.result
@@ -210,6 +210,12 @@ query_prealloc_size 8192
range_alloc_block_size 2048
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
+SELECT @@version LIKE 'non-existent';
+@@version LIKE 'non-existent'
+0
+SELECT @@version_compile_os LIKE 'non-existent';
+@@version_compile_os LIKE 'non-existent'
+0
set big_tables=OFFF;
ERROR 42000: Variable 'big_tables' can't be set to the value of 'OFFF'
set big_tables="OFFF";
diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test
index 50bcc1c038c..e45218a9ed7 100644
--- a/mysql-test/t/variables.test
+++ b/mysql-test/t/variables.test
@@ -115,6 +115,13 @@ set @@query_alloc_block_size=default, @@query_prealloc_size=default;
set transaction_alloc_block_size=default, @@transaction_prealloc_size=default;
show variables like '%alloc%';
+#
+# Bug #10904 Illegal mix of collations between
+# a system variable and a constant
+#
+SELECT @@version LIKE 'non-existent';
+SELECT @@version_compile_os LIKE 'non-existent';
+
# The following should give errors
--error 1231
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 598439c60c1..ad8479c7b0b 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -3369,7 +3369,7 @@ Item *get_system_var(THD *thd, enum_var_type var_type, LEX_STRING name,
!my_strcasecmp(system_charset_info, name.str, "VERSION"))
return new Item_string("@@VERSION", server_version,
(uint) strlen(server_version),
- system_charset_info);
+ system_charset_info, DERIVATION_SYSCONST);
Item *item;
sys_var *var;
diff --git a/sql/set_var.cc b/sql/set_var.cc
index b006dde2b4b..5564ba096ac 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -1606,7 +1606,8 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
Item_string *tmp;
pthread_mutex_lock(&LOCK_global_system_variables);
char *str= (char*) value_ptr(thd, var_type, base);
- tmp= new Item_string(str, strlen(str), system_charset_info);
+ tmp= new Item_string(str, strlen(str),
+ system_charset_info, DERIVATION_SYSCONST);
pthread_mutex_unlock(&LOCK_global_system_variables);
return tmp;
}