set default_storage_engine=innodb; # # MDEV-22761 KILL QUERY during rowid_filter, crashes # create table t1(a int); insert into t1 select seq from seq_1_to_1000; create table t2(a int); insert into t2 select seq from seq_1_to_100; CREATE TABLE t3 ( key1 int , key2 int, filler varchar(255), KEY (key1), KEY (key2) ); insert into t3 select seq,seq, 'filler-data-filler-data' from seq_1_to_2000; select engine from information_schema.tables where table_schema=database() and table_name='t3'; engine InnoDB analyze table t2,t3; Table Op Msg_type Msg_text test.t2 analyze status Engine-independent statistics collected test.t2 analyze status OK test.t3 analyze status Engine-independent statistics collected test.t3 analyze status OK explain select * from t2, t3 where t3.key1=t2.a and t3.key2 in (2,3,4,5,6,7,8,9,10); id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ALL NULL NULL NULL NULL 100 Using where 1 SIMPLE t3 ref|filter key1,key2 key1|key2 5|5 test.t2.a 1 (0%) Using where; Using rowid filter set debug_sync='handler_rowid_filter_check SIGNAL at_rowid_filter_check WAIT_FOR go'; select * from t2, t3 where t3.key1=t2.a and t3.key2 in (2,3,4,5,6,7,8,9,10); connect con1, localhost, root,,; set debug_sync='now WAIT_FOR at_rowid_filter_check'; kill query $target_id; set debug_sync='now SIGNAL go'; connection default; disconnect con1; ERROR 70100: Query execution was interrupted set debug_sync='RESET'; drop table t1,t2,t3; set default_storage_engine=default; set @save_optimizer_switch= @@optimizer_switch; set @save_use_stat_tables= @@use_stat_tables; set @save_optimizer_use_condition_selectivity= @@optimizer_use_condition_selectivity; set @@use_stat_tables=preferably; set optimizer_use_condition_selectivity=2; set optimizer_switch='rowid_filter=on'; # # MDEV-22761 KILL QUERY during rowid_filter, crashes # (The smaller testcase) # CREATE TABLE t1 (a INT, b INT, INDEX(a), INDEX(b)) ENGINE=InnoDB; INSERT INTO t1 VALUES (0,0),(1,0),(-1,1), (-2,1), (-2,3), (-3,4), (-2,4); create table t2 (a int); insert into t1 select 0,seq from seq_1_to_20; insert into t2 select seq from seq_1_to_100; set debug_sync='handler_rowid_filter_check SIGNAL killme WAIT_FOR go'; SELECT straight_join * FROM t2,t1 WHERE t1.a=t2.a AND b=0; connect con1, localhost, root,,; set debug_sync='now WAIT_FOR killme'; kill query @id; set debug_sync='now SIGNAL go'; connection default; ERROR 70100: Query execution was interrupted set debug_sync='RESET'; disconnect con1; drop table t1,t2; set @@optimizer_use_condition_selectivity=@save_optimizer_use_condition_selectivity; set @@optimizer_switch=@save_optimizer_switch; set @@use_stat_tables=@save_use_stat_tables;