Commit f802cd51 authored by unknown's avatar unknown

BUG#34289 - Incorrect NAME_CONST substitution in stored procedures

            breaks replication

NAME_CONST() didn't replicate constant character set and collation
correctly.

With this fix NAME_CONST() inherits collation from the value argument.


mysql-test/r/func_misc.result:
  A test case for BUG#34289.
mysql-test/t/func_misc.test:
  A test case for BUG#34289.
sql/item.cc:
  Inherit collation from value argument.
parent 40f7e296
...@@ -225,4 +225,7 @@ select min(a) from t1 group by inet_ntoa(a); ...@@ -225,4 +225,7 @@ select min(a) from t1 group by inet_ntoa(a);
min(a) min(a)
-2 -2
drop table t1; drop table t1;
SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs;
NAME_CONST('var', 'value') COLLATE latin1_general_cs
value
End of 5.0 tests End of 5.0 tests
...@@ -237,5 +237,11 @@ insert into t1 values (-1), (-2); ...@@ -237,5 +237,11 @@ insert into t1 values (-1), (-2);
select min(a) from t1 group by inet_ntoa(a); select min(a) from t1 group by inet_ntoa(a);
drop table t1; drop table t1;
#
# BUG#34289 - Incorrect NAME_CONST substitution in stored procedures breaks
# replication
#
SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -1240,6 +1240,7 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref) ...@@ -1240,6 +1240,7 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref)
return TRUE; return TRUE;
} }
set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info); set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info);
collation.set(value_item->collation.collation, DERIVATION_IMPLICIT);
max_length= value_item->max_length; max_length= value_item->max_length;
decimals= value_item->decimals; decimals= value_item->decimals;
fixed= 1; fixed= 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment