mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
96e092dc73
WL#2474 "Multi Range Read: Change the default MRR implementation to implement new MRR interface" WL#2475 "Batched range read functions for MyISAM/InnoDb" "Index condition pushdown for MyISAM/InnoDB" Igor's fix from sp1r-igor@olga.mysql.com-20080330055902-07614: There could be observed the following problems: 1. EXPLAIN did not mention pushdown conditions from on expressions in the 'extra' column. As a result if a query had no where conditions pushed down to a table, but had on conditions pushed to this table the 'extra' column in the EXPLAIN for the table missed 'using where'. 2. Conditions for ref access were not eliminated from on expressions though such conditions were eliminated from the where condition.
183 lines
7.2 KiB
Text
183 lines
7.2 KiB
Text
# BUG#45219 "Azalea crash on query containing a JOIN in subquery"
|
|
|
|
# Both SELECT DISTINCT cause similar crashes.
|
|
# With ./mtr --mysqld=--optimizer_switch="semijoin=off" optimizer_unfixed_bugs.bug45219
|
|
# there is no crash, the result file has been created with this
|
|
# command, but it has *not* been checked for correctness of returned
|
|
# data (at least 5.1 gives the same result).
|
|
|
|
|
|
# Begin test case for query 0
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS CC, C, BB;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE `CC` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `CC` VALUES
|
|
(10,0,'2006-07-07 07:26:28','q'),(11,5,'2002-09-23 00:00:00','m'),
|
|
(12,7,'0000-00-00 00:00:00','j'),(13,1,'2006-06-07 00:00:00','z'),
|
|
(14,8,'2000-09-16 12:15:34','a'),(15,2,'2007-08-05 15:47:52',''),
|
|
(16,1,'0000-00-00 00:00:00','e'),(17,8,'2005-12-02 19:34:26','t'),
|
|
(18,5,'0000-00-00 00:00:00','q'),(19,4,'0000-00-00 00:00:00','b'),
|
|
(20,5,'2007-12-28 00:00:00','w'),(21,3,'2004-08-02 11:48:43','m'),
|
|
(22,0,'0000-00-00 00:00:00','x'),(23,8,'2004-04-19 12:18:43',''),
|
|
(24,0,'2009-04-27 00:00:00','w'),(25,4,'2006-10-20 14:52:15','x'),
|
|
(26,0,'0000-00-00 00:00:00','e'),(27,0,'2002-03-22 11:48:37','e'),
|
|
(28,2,'0000-00-00 00:00:00','p'),(29,0,'2001-01-04 03:55:07','x');
|
|
CREATE TABLE `C` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `C` VALUES
|
|
(1,9,'0000-00-00 00:00:00','p'),(2,0,'2002-02-09 07:38:13','v'),
|
|
(3,8,'2001-05-03 12:08:14','t'),(4,3,'0000-00-00 00:00:00','u'),
|
|
(5,7,'2009-07-28 03:43:30','n'),(6,0,'2009-08-04 00:00:00','l'),
|
|
(7,1,'0000-00-00 00:00:00','h'),(8,9,'0000-00-00 00:00:00','u'),
|
|
(9,0,'2005-08-02 17:16:54','n'),(10,9,'2002-12-21 00:00:00','j'),
|
|
(11,0,'2005-08-15 12:37:35','k'),(12,5,'0000-00-00 00:00:00','e'),
|
|
(13,0,'2006-03-10 00:00:00','i'),(14,8,'2005-05-16 11:02:36','u'),
|
|
(15,8,'2008-11-02 00:00:00','n'),(16,5,'2006-03-15 00:00:00','b'),
|
|
(17,1,'0000-00-00 00:00:00','x'),(18,7,'0000-00-00 00:00:00',''),
|
|
(19,0,'2008-12-17 20:15:40','q'),(20,9,'0000-00-00 00:00:00','u');
|
|
CREATE TABLE `BB` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `BB` VALUES
|
|
(10,8,'2007-08-19 08:08:38','i'),(11,0,'2000-05-21 03:51:51','');
|
|
|
|
SELECT DISTINCT `datetime_key`
|
|
FROM C
|
|
WHERE ( `int_nokey` , `pk` ) IN (
|
|
SELECT INNR .`pk` , INNR .`pk`
|
|
FROM CC LEFT JOIN BB INNR ON INNR .`varchar_key` ) AND `pk` = 9 ;
|
|
|
|
DROP TABLE CC, C, BB;
|
|
|
|
# End of test case for query 0
|
|
|
|
# Begin test case for query 1
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS CC, C, BB;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE `CC` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`int_key` int(11) NOT NULL,
|
|
`date_key` date NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
`varchar_nokey` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `int_key` (`int_key`),
|
|
KEY `date_key` (`date_key`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=30 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `CC` VALUES
|
|
(10,0,8,'2007-02-14','2006-07-07 07:26:28','q','q'),
|
|
(11,5,8,'2002-10-03','2002-09-23 00:00:00','m','m'),
|
|
(12,7,3,'2006-12-02','0000-00-00 00:00:00','j','j'),
|
|
(13,1,2,'2007-05-02','2006-06-07 00:00:00','z','z'),
|
|
(14,8,2,'2001-11-18','2000-09-16 12:15:34','a','a'),
|
|
(15,2,6,'2006-09-09','2007-08-05 15:47:52','',''),
|
|
(16,1,8,'0000-00-00','0000-00-00 00:00:00','e','e'),
|
|
(17,8,9,'2003-07-22','2005-12-02 19:34:26','t','t'),
|
|
(18,5,2,'2001-12-22','0000-00-00 00:00:00','q','q'),
|
|
(19,4,6,'0000-00-00','0000-00-00 00:00:00','b','b'),
|
|
(20,5,5,'2006-09-02','2007-12-28 00:00:00','w','w'),
|
|
(21,3,2,'0000-00-00','2004-08-02 11:48:43','m','m'),
|
|
(22,0,4,'0000-00-00','0000-00-00 00:00:00','x','x'),
|
|
(23,8,9,'2001-02-28','2004-04-19 12:18:43','',''),
|
|
(24,0,6,'0000-00-00','2009-04-27 00:00:00','w','w'),
|
|
(25,4,5,'2007-05-19','2006-10-20 14:52:15','x','x'),
|
|
(26,0,0,'2005-02-15','0000-00-00 00:00:00','e','e'),
|
|
(27,0,0,'2000-10-19','2002-03-22 11:48:37','e','e'),
|
|
(28,2,8,'2005-07-07','0000-00-00 00:00:00','p','p'),
|
|
(29,0,0,'2008-10-18','2001-01-04 03:55:07','x','x');
|
|
CREATE TABLE `C` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`int_key` int(11) NOT NULL,
|
|
`date_key` date NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
`varchar_nokey` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `int_key` (`int_key`),
|
|
KEY `date_key` (`date_key`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `C` VALUES
|
|
(1,9,9,'2007-12-01','0000-00-00 00:00:00','p','p'),
|
|
(2,0,0,'0000-00-00','2002-02-09 07:38:13','v','v'),
|
|
(3,8,6,'0000-00-00','2001-05-03 12:08:14','t','t'),
|
|
(4,3,6,'2002-05-07','0000-00-00 00:00:00','u','u'),
|
|
(5,7,6,'0000-00-00','2009-07-28 03:43:30','n','n'),
|
|
(6,0,4,'0000-00-00','2009-08-04 00:00:00','l','l'),
|
|
(7,1,7,'0000-00-00','0000-00-00 00:00:00','h','h'),
|
|
(8,9,4,'0000-00-00','0000-00-00 00:00:00','u','u'),
|
|
(9,0,8,'0000-00-00','2005-08-02 17:16:54','n','n'),
|
|
(10,9,4,'2000-12-18','2002-12-21 00:00:00','j','j'),
|
|
(11,0,7,'2005-11-13','2005-08-15 12:37:35','k','k'),
|
|
(12,5,5,'0000-00-00','0000-00-00 00:00:00','e','e'),
|
|
(13,0,0,'2003-11-12','2006-03-10 00:00:00','i','i'),
|
|
(14,8,5,'2006-02-20','2005-05-16 11:02:36','u','u'),
|
|
(15,8,7,'2005-02-12','2008-11-02 00:00:00','n','n'),
|
|
(16,5,2,'2009-07-20','2006-03-15 00:00:00','b','b'),
|
|
(17,1,8,'2005-02-24','0000-00-00 00:00:00','x','x'),
|
|
(18,7,0,'0000-00-00','0000-00-00 00:00:00','',''),
|
|
(19,0,9,'0000-00-00','2008-12-17 20:15:40','q','q'),
|
|
(20,9,5,'0000-00-00','0000-00-00 00:00:00','u','u');
|
|
CREATE TABLE `BB` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`int_nokey` int(11) NOT NULL,
|
|
`int_key` int(11) NOT NULL,
|
|
`date_key` date NOT NULL,
|
|
`datetime_key` datetime NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
`varchar_nokey` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `int_key` (`int_key`),
|
|
KEY `date_key` (`date_key`),
|
|
KEY `datetime_key` (`datetime_key`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `BB` VALUES (10,8,5,'0000-00-00','2007-08-19
|
|
08:08:38','i','i'),(11,0,8,'2005-08-18','2000-05-21 03:51:51','','');
|
|
|
|
SELECT DISTINCT BIT_AND( OUTR . `datetime_key` ) AS X
|
|
FROM C AS OUTR
|
|
WHERE ( OUTR . `int_nokey` , OUTR . `pk` ) IN (
|
|
SELECT DISTINCT INNR . `pk` AS X , INNR . `pk` AS Y
|
|
FROM CC AS INNR2 LEFT JOIN BB AS INNR ON
|
|
( INNR2 . `varchar_nokey` = INNR . `varchar_key` )
|
|
WHERE INNR . `date_key` BETWEEN '2009-04-26' AND '2004-08-21' )
|
|
AND OUTR . `pk` = 9
|
|
ORDER BY OUTR . `int_key` , OUTR . `pk`;
|
|
|
|
DROP TABLE CC, C, BB;
|
|
|
|
# End of test case for query 1
|