Crash in create_ref_for_key() with maria-5.3-mwl89
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
MariaDB |
Fix Released
|
High
|
Timour Katchaounov |
Bug Description
When executed with semijoin=off, the following query crashes in maria-5.3-mwl89:
SELECT `col_int_key` FROM B
WHERE ( 2 , 6 ) IN ( SELECT SUBQUERY1_t1 .`col_int_nokey` , SUBQUERY1_t1 .`col_int_nokey` FROM C SUBQUERY1_t1 STRAIGHT_JOIN CC SUBQUERY1_t2 ON SUBQUERY1_t2 .`pk` = SUBQUERY1_t1 .`pk` ) ;
backtrace:
#4 <signal handler called>
#5 0x0830e269 in create_ref_for_key (join=0xaeca51d0, j=0xaecab710, org_keyuse=
#6 0x0830d87b in get_best_
#7 0x083068e4 in make_join_
#8 0x082fe797 in JOIN::optimize (this=0xaeca51d0) at sql_select.cc:962
#9 0x081a7131 in st_select_
#10 0x083be01d in JOIN::optimize_
#11 0x082ffb9c in JOIN::optimize (this=0xaeca0358) at sql_select.cc:1312
#12 0x08304283 in mysql_select (thd=0xa28a548, rref_pointer_
order=0x0, group=0x0, having=0x0, proc_param=0x0, select_
at sql_select.cc:2583
#13 0x082fc7e3 in handle_select (thd=0xa28a548, lex=0xa28bbc4, result=0xaec5f6a0, setup_tables_
#14 0x0829af04 in execute_
#15 0x082918e4 in mysql_execute_
#16 0x0829d0e5 in mysql_parse (thd=0xa28a548,
inBuf=
#17 0x0828f316 in dispatch_command (command=COM_QUERY, thd=0xa28a548,
packet=
#18 0x0828e7bc in do_command (thd=0xa28a548) at sql_parse.cc:890
#19 0x0828b91c in handle_
#20 0x00bea919 in start_thread () from /lib/libpthread
#21 0x00b2ccbe in clone () from /lib/libc.so.6
bzr version-info:
revision-id: <email address hidden>
date: 2010-09-30 18:32:44 +0300
build-date: 2010-10-01 09:27:26 +0300
revno: 2811
branch-nick: maria-5.3-mwl89
Related branches
Changed in maria: | |
status: | New → Confirmed |
importance: | Undecided → High |
Changed in maria: | |
status: | Confirmed → In Progress |
Changed in maria: | |
status: | In Progress → Fix Released |
Test case :
SET SESSION optimizer_ switch= 'semijoin= off';
--disable_warnings
DROP TABLE /*! IF EXISTS */ CC;
DROP TABLE /*! IF EXISTS */ C;
DROP TABLE /*! IF EXISTS */ B;
--enable_warnings
CREATE TABLE `CC` ( key`,`col_ int_key` ) key`,`col_ int_key` ) key`,`col_ int_key` )
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_varchar_key` (`col_varchar_
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
INSERT INTO `CC` VALUES (10,7,8,'v');
INSERT INTO `CC` VALUES (11,1,9,'r');
INSERT INTO `CC` VALUES (12,5,9,'a');
INSERT INTO `CC` VALUES (13,3,186,'m');
INSERT INTO `CC` VALUES (14,6,NULL,'y');
INSERT INTO `CC` VALUES (15,92,2,'j');
INSERT INTO `CC` VALUES (16,7,3,'d');
INSERT INTO `CC` VALUES (17,NULL,0,'z');
INSERT INTO `CC` VALUES (18,3,133,'e');
INSERT INTO `CC` VALUES (19,5,1,'h');
INSERT INTO `CC` VALUES (20,1,8,'b');
INSERT INTO `CC` VALUES (21,2,5,'s');
INSERT INTO `CC` VALUES (22,NULL,5,'e');
INSERT INTO `CC` VALUES (23,1,8,'j');
INSERT INTO `CC` VALUES (24,0,6,'e');
INSERT INTO `CC` VALUES (25,210,51,'f');
INSERT INTO `CC` VALUES (26,8,4,'v');
INSERT INTO `CC` VALUES (27,7,7,'x');
INSERT INTO `CC` VALUES (28,5,6,'m');
INSERT INTO `CC` VALUES (29,NULL,4,'c');
CREATE TABLE `C` (
`pk` int(11) NOT NULL AUTO_INCREMENT,
`col_int_nokey` int(11) DEFAULT NULL,
`col_int_key` int(11) DEFAULT NULL,
`col_varchar_key` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_varchar_key` (`col_varchar_
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
INSERT INTO `C` VALUES (1,NULL,2,'w');
INSERT INTO `C` VALUES (2,7,9,'m');
INSERT INTO `C` VALUES (3,9,3,'m');
INSERT INTO `C` VALUES (4,7,9,'k');
INSERT INTO `C` VALUES (5,4,NULL,'r');
INSERT INTO `C` VALUES (6,2,9,'t');
INSERT INTO `C` VALUES (7,6,3,'j');
INSERT INTO `C` VALUES (8,8,8,'u');
INSERT INTO `C` VALUES (9,NULL,8,'h');
INSERT INTO `C` VALUES (10,5,53,'o');
INSERT INTO `C` VALUES (11,NULL,0,NULL);
INSERT INTO `C` VALUES (12,6,5,'k');
INSERT INTO `C` VALUES (13,188,166,'e');
INSERT INTO `C` VALUES (14,2,3,'n');
INSERT INTO `C` VALUES (15,1,0,'t');
INSERT INTO `C` VALUES (16,1,1,'c');
INSERT INTO `C` VALUES (17,0,9,'m');
INSERT INTO `C` VALUES (18,9,5,'y');
INSERT INTO `C` VALUES (19,NULL,6,'f');
INSERT INTO `C` VALUES (20,4,2,'d');
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_varchar_key` varchar(1) DEFAULT NULL,
PRIMARY KEY (`pk`),
KEY `col_int_key` (`col_int_key`),
KEY `col_varchar_key` (`col_varchar_
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
INSERT INTO `B` VALUES (1,1,7,'f');
SELECT `col_int_key`
FROM B
WHERE ( 2 , 6 ) IN (
SELECT SUBQUERY1_t1 .`col_int_nokey` , SUBQUERY1_t1 .`col_int_nokey`
FROM C SUBQUERY1_t1 STRAIGHT_JOIN CC SUBQUERY1_t2 ON SUBQUERY1_t2 .`pk` = SUBQUERY1_t1 .`pk` ) ;