mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
escaped field names When in mixed or statement mode, the master logs LOAD DATA queries by resorting to an Execute_load_query_log_event. This event does not contain the original query, but a rewritten version of it, which includes the table field names. However, the rewrite does not escape the field names. If these names match a reserved keyword, then the slave will stop with a syntax error when executing the event. We fix this by escaping the fields names as it happens already for the table name.
33 lines
1.3 KiB
Text
33 lines
1.3 KiB
Text
drop table if exists t1,t2;
|
|
create table t1 (a int) engine=MyISAM;
|
|
insert into t1 set a=1;
|
|
reset master;
|
|
update t1 set a=2 /* will be "killed" after work has been done */;
|
|
select
|
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
|
is not null;
|
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
|
is not null
|
|
1
|
|
select 1 /* must return 1 as query completed before got killed*/;
|
|
1
|
|
1
|
|
create table t2 (a int, b int) ENGINE=MyISAM;
|
|
reset master;
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
|
ERROR 70100: Query execution was interrupted
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
|
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/rpl_loaddata.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`, `b`) ;file_id=#
|
|
select
|
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
|
is not null;
|
|
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
|
is not null
|
|
1
|
|
select 0 /* must return 0 to mean the killed query is in */;
|
|
0
|
|
0
|
|
drop table t1,t2;
|
|
end of the tests
|