diff options
-rw-r--r-- | mysql-test/r/func_misc.result | 3 | ||||
-rw-r--r-- | mysql-test/r/rpl_name_const.result | 28 | ||||
-rw-r--r-- | mysql-test/t/func_misc.test | 5 | ||||
-rw-r--r-- | mysql-test/t/rpl_name_const.test | 47 | ||||
-rw-r--r-- | sql/item.cc | 5 |
5 files changed, 87 insertions, 1 deletions
diff --git a/mysql-test/r/func_misc.result b/mysql-test/r/func_misc.result index e57d46c006a..9f2fcb06638 100644 --- a/mysql-test/r/func_misc.result +++ b/mysql-test/r/func_misc.result @@ -324,4 +324,7 @@ SELECT * FROM t1 WHERE a = NAME_CONST('reportDate', _binary'2009-01-09' COLLATE 'binary'); a DROP TABLE t1; +select NAME_CONST('_id',1234) as id; +id +1234 End of 5.0 tests diff --git a/mysql-test/r/rpl_name_const.result b/mysql-test/r/rpl_name_const.result new file mode 100644 index 00000000000..acb2684d2c8 --- /dev/null +++ b/mysql-test/r/rpl_name_const.result @@ -0,0 +1,28 @@ +stop slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +reset master; +reset slave; +drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; +start slave; +==== Initialize ==== +[on master] +create table t1 (id int); +==== create a procedure that has a column aliase in a subquery ==== +drop procedure if exists test_procedure; +create procedure test_procedure(_id int) +begin +insert into t1 (id) +select a.id +from +( select _id as id ) a; +end;$$ +==== enable the binary log, then call the procedure ==== +call test_procedure(1234); +[on slave] +select * from t1 order by id; +id +1234 +==== Clean up ==== +[on master] +drop table t1; +drop procedure test_procedure; diff --git a/mysql-test/t/func_misc.test b/mysql-test/t/func_misc.test index c8075c42fc7..01c508c9b58 100644 --- a/mysql-test/t/func_misc.test +++ b/mysql-test/t/func_misc.test @@ -445,5 +445,10 @@ SELECT * FROM t1 WHERE a = NAME_CONST('reportDate', _binary'2009-01-09' COLLATE 'binary'); DROP TABLE t1; +# +# Bug#35515: Aliases of variables in binary log are ignored with NAME_CONST +# +select NAME_CONST('_id',1234) as id; + --echo End of 5.0 tests diff --git a/mysql-test/t/rpl_name_const.test b/mysql-test/t/rpl_name_const.test new file mode 100644 index 00000000000..adb71d452ef --- /dev/null +++ b/mysql-test/t/rpl_name_const.test @@ -0,0 +1,47 @@ +# ==== Purpose ==== +# +# Test that aliases of variables in binary log aren't ignored with NAME_CONST. +# +# ==== Method ==== +# +# Create a procedure with aliases of variables, then replicate it to slave. +# BUG#35515 Aliases of variables in binary log are ignored with NAME_CONST. +# + +source include/master-slave.inc; + +--echo ==== Initialize ==== + +--echo [on master] +--connection master + +create table t1 (id int); + +--echo ==== create a procedure that has a column aliase in a subquery ==== +--disable_warnings +drop procedure if exists test_procedure; +--enable_warnings +delimiter $$; +create procedure test_procedure(_id int) +begin +insert into t1 (id) +select a.id +from +( select _id as id ) a; +end;$$ +delimiter ;$$ + +--echo ==== enable the binary log, then call the procedure ==== +call test_procedure(1234); + + +--echo [on slave] +sync_slave_with_master; +select * from t1 order by id; + +--echo ==== Clean up ==== + +--echo [on master] +connection master; +drop table t1; +drop procedure test_procedure; diff --git a/sql/item.cc b/sql/item.cc index f32828629cf..aa2138a0345 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -1282,7 +1282,10 @@ bool Item_name_const::fix_fields(THD *thd, Item **ref) my_error(ER_RESERVED_SYNTAX, MYF(0), "NAME_CONST"); return TRUE; } - set_name(item_name->ptr(), (uint) item_name->length(), system_charset_info); + if (is_autogenerated_name) + { + 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; decimals= value_item->decimals; |