BUG#35515 Aliases of variables in binary log are ignored with NAME_CONST.
When add an aliase name after NAME_CONST, the aliase name will be overwrite. NAME_CONST will re-set the field's name only if there isn't an aliase in the function fix-fields(). If there is an aliase, NAME_CONST doesn't re-set the field's name and keeps the old name. mysql-test/r/func_misc.result: Test result. mysql-test/r/rpl_name_const.result: Test case. mysql-test/t/func_misc.test: Add NAME_CONST test. mysql-test/t/rpl_name_const.test: Test result. sql/item.cc: Re-set field's name if the name is autogenerated, that mean without aliase.
This commit is contained in:
parent
55c779cdbf
commit
944915cabe
@ -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
|
||||
|
28
mysql-test/r/rpl_name_const.result
Normal file
28
mysql-test/r/rpl_name_const.result
Normal file
@ -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;
|
@ -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
|
||||
|
||||
|
47
mysql-test/t/rpl_name_const.test
Normal file
47
mysql-test/t/rpl_name_const.test
Normal file
@ -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;
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user