Crash in Ordered_key::get_field_idx with partial_match_rowid_merge=on
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MariaDB |
Fix Released
|
High
|
Timour Katchaounov |
Bug Description
The following query:
SELECT table2 .`col_date_key`
FROM CC table1 JOIN (
SELECT *
FROM B ) table2 ON table1 .`col_varchar_key`
WHERE ( table1 .`pk` , table1 .`col_int_key` ) NOT IN (
SELECT `col_int_nokey` , MAX( `col_int_nokey` )
FROM CC ) ;
crashes as follows:
#3 0x0827e86a in handle_segfault (sig=11) at mysqld.cc:2703
#4 <signal handler called>
#5 0x0823ad8f in Ordered_
#6 0x08239803 in subselect_
#7 0x08237e66 in subselect_
#8 0x0822fb79 in Item_subselect:
#9 0x0822fd72 in Item_in_
#10 0x082315dc in Item_in_
#11 0x081cf276 in Item::val_
#12 0x081fab3f in Item_in_
#13 0x081cf218 in Item::val_
#14 0x081cb0da in Item_cache_
#15 0x081d2e6a in Item_cache_
#16 0x081c8cb5 in Item_cache_
#17 0x081f6e5d in Item_func_
#18 0x081b8d6e in Item::val_bool (this=0xb5f59918) at item.cc:187
#19 0x082027f9 in Item_cond_
#20 0x0831d5b8 in evaluate_
#21 0x0831d229 in sub_select (join=0xb5f80330, join_tab=
#22 0x0831c62f in do_select (join=0xb5f80330, fields=0xab2df0c, table=0x0, procedure=0x0) at sql_select.cc:12633
#23 0x083029f3 in JOIN::exec (this=0xb5f80330) at sql_select.cc:2355
#24 0x08303129 in mysql_select (thd=0xab2c4f8, rref_pointer_
order=0x0, group=0x0, having=0x0, proc_param=0x0, select_
at sql_select.cc:2556
#25 0x082fb71b in handle_select (thd=0xab2c4f8, lex=0xab2db78, result=0xb5f80300, setup_tables_
#26 0x0829a164 in execute_
#27 0x08290b3c in mysql_execute_
#28 0x0829c325 in mysql_parse (thd=0xab2c4f8,
inBuf=
#29 0x0828e5f2 in dispatch_command (command=COM_QUERY, thd=0xab2c4f8, packet=0xab2e519 "", packet_length=233) at sql_parse.cc:1184
#30 0x0828dae0 in do_command (thd=0xab2c4f8) at sql_parse.cc:890
#31 0x0828ac78 in handle_
#32 0x00a08919 in start_thread () from /lib/libpthread
#33 0x00951e5e in clone () from /lib/libc.so.6
explain:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1 100.00
1 PRIMARY table1 ALL NULL NULL NULL NULL 20 100.00 Using where
3 SUBQUERY CC ALL NULL NULL NULL NULL 20 100.00
2 DERIVED B system NULL NULL NULL NULL 1 100.00
Warnings:
Note 1003 select '1900-01-01' AS `col_date_key` from `test`.`CC` `table1` join (select '1' AS `pk`,'1' AS `col_int_nokey`,'7' AS `col_int_
Note that the EXPLAIN does not reveal that partial match has been used. Instead, materialization is mentioned in the extended EXPLAIN.
Changed in maria: | |
status: | Confirmed → In Progress |
Changed in maria: | |
status: | In Progress → Fix Committed |
importance: | Undecided → High |
Changed in maria: | |
status: | Fix Committed → Fix Released |
Test case :
SET SESSION optimizer_ switch= 'partial_ match_rowid_ merge=on, partial_ match_table_ scan=off, semijoin= off';
CREATE TABLE `CC` ( key`,`col_ int_key` ) '2006-06- 14','r' ); '2002-09- 12','a' ); '2005-02- 15','m' ); NULL,'y' ); 2,'2008- 11-04', 'j'); '2004-09- 04','d' ); 0,'2006- 06-05', 'z'); '1900-01- 01','e' ); '1900-01- 01','h' ); '1900-01- 01','b' ); '2005-01- 13','s' ); 5,'2006- 05-21', 'e'); '2003-09- 08','j' ); '2006-12- 23','e' ); 51,'2006- 10-15', 'f'); '2005-04- 06','v' ); '2008-04- 07','x' ); '2006-10- 10','m' ); 4,'1900- 01-01', 'c'); key`,`col_ int_key` ) '1900-01- 01','f' );
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_date_key` (`col_date_key`),
KEY `col_varchar_key` (`col_varchar_
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
INSERT INTO `CC` VALUES (10,7,8,NULL,'v');
INSERT INTO `CC` VALUES (11,1,9,
INSERT INTO `CC` VALUES (12,5,9,
INSERT INTO `CC` VALUES (13,3,186,
INSERT INTO `CC` VALUES (14,6,NULL,
INSERT INTO `CC` VALUES (15,92,
INSERT INTO `CC` VALUES (16,7,3,
INSERT INTO `CC` VALUES (17,NULL,
INSERT INTO `CC` VALUES (18,3,133,
INSERT INTO `CC` VALUES (19,5,1,
INSERT INTO `CC` VALUES (20,1,8,
INSERT INTO `CC` VALUES (21,2,5,
INSERT INTO `CC` VALUES (22,NULL,
INSERT INTO `CC` VALUES (23,1,8,
INSERT INTO `CC` VALUES (24,0,6,
INSERT INTO `CC` VALUES (25,210,
INSERT INTO `CC` VALUES (26,8,4,
INSERT INTO `CC` VALUES (27,7,7,
INSERT INTO `CC` VALUES (28,5,6,
INSERT INTO `CC` VALUES (29,NULL,
CREATE TABLE `B` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_date_key` date DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_date_key` (`col_date_key`),
KEY `col_varchar_key` (`col_varchar_
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
INSERT INTO `B` VALUES (1,1,7,
SELECT table2 .`col_date_key`
FROM CC table1 JOIN (
SELECT *
FROM B ) table2 ON table1 .`col_varchar_key`
WHERE ( table1 .`pk` , table1 .`col_int_key` ) NOT IN (
SELECT `col_int_nokey` , MAX( `col_int_nokey` )
FROM CC ) ;