mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 23:34:34 +01:00
197182d749
"load data" statements were written to the binlog as a mix of the original statement and bits recreated from parse-info. This relied on implementation details and broke with IGNORE_SPACES and versioned comments. We now completely resynthesize the query for LOAD DATA for binlog (which among other things normalizes them somewhat with regard to case, spaces, etc.). We have already parsed the query properly, so we make use of that rather than mix-and-match string literals and parsed items. This should make us safe with regard to versioned comments, even those spanning multiple tokens. Also no longer affected by IGNORE_SPACES.
33 lines
1.2 KiB
Text
33 lines
1.2 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
|