mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
1417 lines
42 KiB
Text
1417 lines
42 KiB
Text
# General purpose bug fix tests go here : subselect.test too large
|
|
|
|
--disable_warnings
|
|
drop table if exists t1,t2,t3,t4,t5,t6;
|
|
--enable_warnings
|
|
|
|
--echo #
|
|
--echo # Bug #46791: Assertion failed:(table->key_read==0),function unknown
|
|
--echo # function,file sql_base.cc
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (a INT, b INT, KEY(a));
|
|
INSERT INTO t1 VALUES (1,1),(2,2);
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUES (1,1),(2,2);
|
|
CREATE TABLE t3 LIKE t1;
|
|
|
|
--echo # should have 1 impossible where and 2 dependent subqueries
|
|
EXPLAIN
|
|
SELECT 1 FROM t1
|
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
|
ORDER BY count(*);
|
|
|
|
--echo # should not crash the next statement
|
|
SELECT 1 FROM t1
|
|
WHERE NOT EXISTS (SELECT 1 FROM t2 WHERE 1 = (SELECT MIN(t2.b) FROM t3))
|
|
ORDER BY count(*);
|
|
|
|
--echo # should not crash: the crash is caused by the previous statement
|
|
SELECT 1;
|
|
|
|
DROP TABLE t1,t2,t3;
|
|
|
|
--echo #
|
|
--echo # Bug #47106: Crash / segfault on adding EXPLAIN to a non-crashing
|
|
--echo # query
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (
|
|
a INT,
|
|
b INT,
|
|
PRIMARY KEY (a),
|
|
KEY b (b)
|
|
);
|
|
INSERT INTO t1 VALUES (1, 1), (2, 1);
|
|
|
|
CREATE TABLE t2 LIKE t1;
|
|
INSERT INTO t2 SELECT * FROM t1;
|
|
|
|
CREATE TABLE t3 LIKE t1;
|
|
INSERT INTO t3 SELECT * FROM t1;
|
|
|
|
--echo # Should not crash.
|
|
--echo # Should have 1 impossible where and 2 dependent subqs.
|
|
EXPLAIN
|
|
SELECT
|
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
|
FROM t3 WHERE 1 = 0 GROUP BY 1;
|
|
|
|
--echo # should return 0 rows
|
|
SELECT
|
|
(SELECT 1 FROM t1,t2 WHERE t2.b > t3.b)
|
|
FROM t3 WHERE 1 = 0 GROUP BY 1;
|
|
|
|
DROP TABLE t1,t2,t3;
|
|
|
|
--echo End of 5.0 tests.
|
|
|
|
#
|
|
# Fix for LP#612894
|
|
# Some aggregate functions (such as MIN MAX) work incorrectly in subqueries
|
|
# after getting NULL value
|
|
#
|
|
|
|
CREATE TABLE t1 (col_int_nokey int(11) NOT NULL, col_varchar_nokey varchar(1) NOT NULL) engine=myisam;
|
|
INSERT INTO t1 VALUES (2,'s'),(0,'v'),(2,'s');
|
|
CREATE TABLE t2 (
|
|
pk int(11) NOT NULL AUTO_INCREMENT,
|
|
`col_int_key` int(11) NOT NULL,
|
|
col_varchar_key varchar(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY `col_int_key` (`col_int_key`),
|
|
KEY `col_varchar_key` (`col_varchar_key`)
|
|
) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES (4,10,'g'), (5,20,'v');
|
|
|
|
SELECT t1.col_int_nokey,(SELECT MIN( t2_a.col_int_key ) FROM t2 t2_a, t2 t2_b, t1 t1_a WHERE t1_a.col_varchar_nokey = t2_b.col_varchar_key and t1.col_int_nokey ) as sub FROM t1;
|
|
|
|
SELECT t1.col_int_nokey,(SELECT MIN( t2_a.col_int_key ) +1 FROM t2 t2_a, t2 t2_b, t1 t1_a WHERE t1_a.col_varchar_nokey = t2_b.col_varchar_key and t1.col_int_nokey ) as sub FROM t1;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # Bug#54568: create view cause Assertion failed: 0,
|
|
--echo # file .\item_subselect.cc, line 836
|
|
--echo #
|
|
EXPLAIN SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
|
DESCRIBE SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
|
--echo # None of the below should crash
|
|
CREATE VIEW v1 AS SELECT 1 LIKE ( 1 IN ( SELECT 1 ) );
|
|
CREATE VIEW v2 AS SELECT 1 LIKE '%' ESCAPE ( 1 IN ( SELECT 1 ) );
|
|
DROP VIEW v1, v2;
|
|
|
|
--echo #
|
|
--echo # Bug#51070: Query with a NOT IN subquery predicate returns a wrong
|
|
--echo # result set
|
|
--echo #
|
|
CREATE TABLE t1 ( a INT, b INT );
|
|
INSERT INTO t1 VALUES ( 1, NULL ), ( 2, NULL );
|
|
|
|
CREATE TABLE t2 ( c INT, d INT );
|
|
INSERT INTO t2 VALUES ( NULL, 3 ), ( NULL, 4 );
|
|
|
|
CREATE TABLE t3 ( e INT, f INT );
|
|
INSERT INTO t3 VALUES ( NULL, NULL ), ( NULL, NULL );
|
|
|
|
CREATE TABLE t4 ( a INT );
|
|
INSERT INTO t4 VALUES (1), (2), (3);
|
|
|
|
CREATE TABLE t5 ( a INT );
|
|
INSERT INTO t5 VALUES (NULL), (2);
|
|
|
|
--replace_column 1 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 );
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 );
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 ) IS NULL;
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 ) IS NULL;
|
|
SELECT * FROM t1 WHERE ( a, b ) IN ( SELECT c, d FROM t2 ) IS NULL;
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT c, d FROM t2 ) IS UNKNOWN;
|
|
SELECT * FROM t1 WHERE (( a, b ) NOT IN ( SELECT c, d FROM t2 )) IS UNKNOWN;
|
|
|
|
SELECT * FROM t1 WHERE 1 = 1 AND ( a, b ) NOT IN ( SELECT c, d FROM t2 );
|
|
|
|
--replace_column 1 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT e, f FROM t3 );
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN ( SELECT e, f FROM t3 );
|
|
|
|
--replace_column 1 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE ( c, d ) NOT IN ( SELECT a, b FROM t1 );
|
|
SELECT * FROM t2 WHERE ( c, d ) NOT IN ( SELECT a, b FROM t1 );
|
|
|
|
--replace_column 1 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x
|
|
EXPLAIN
|
|
SELECT * FROM t3 WHERE ( e, f ) NOT IN ( SELECT c, d FROM t2 );
|
|
SELECT * FROM t3 WHERE ( e, f ) NOT IN ( SELECT c, d FROM t2 );
|
|
|
|
--replace_column 1 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x 10 x
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE ( c, d ) NOT IN ( SELECT e, f FROM t3 );
|
|
SELECT * FROM t2 WHERE ( c, d ) NOT IN ( SELECT e, f FROM t3 );
|
|
|
|
SELECT * FROM t1 WHERE ( a, b ) NOT IN
|
|
( SELECT c, d FROM t2 WHERE c = 1 AND c <> 1 );
|
|
|
|
SELECT * FROM t1 WHERE b NOT IN ( SELECT c FROM t2 WHERE c = 1 );
|
|
|
|
SELECT * FROM t1 WHERE NULL NOT IN ( SELECT c FROM t2 WHERE c = 1 AND c <> 1 );
|
|
|
|
DROP TABLE t1, t2, t3, t4, t5;
|
|
|
|
--echo #
|
|
--echo # Bug#58207: invalid memory reads when using default column value and
|
|
--echo # tmptable needed
|
|
--echo #
|
|
CREATE TABLE t(a VARCHAR(245) DEFAULT
|
|
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
|
INSERT INTO t VALUES (''),(''),(''),(''),(''),(''),(''),(''),(''),(''),('');
|
|
SELECT * FROM (SELECT default(a) FROM t GROUP BY a) d;
|
|
DROP TABLE t;
|
|
|
|
--echo #
|
|
--echo # End of 5.1 tests.
|
|
--echo #
|
|
|
|
--echo #
|
|
--echo # BUG#46743 "Azalea processing correlated, aggregate SELECT
|
|
--echo # subqueries incorrectly"
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (c int);
|
|
INSERT INTO t1 VALUES (NULL);
|
|
CREATE TABLE t2 (d int , KEY (d)); # index is needed for bug
|
|
INSERT INTO t2 VALUES (NULL),(NULL); # two rows needed for bug
|
|
# we see that subquery returns 0 rows
|
|
--echo 0 rows in subquery
|
|
SELECT 1 AS RESULT FROM t2,t1 WHERE d = c;
|
|
# so here it ends up as NULL
|
|
--echo base query
|
|
SELECT (SELECT 1 FROM t2 WHERE d = c) AS RESULT FROM t1 ;
|
|
EXPLAIN EXTENDED SELECT (SELECT 1 FROM t2 WHERE d = c) AS RESULT FROM t1 ;
|
|
--echo first equivalent variant
|
|
SELECT (SELECT 1 FROM t2 WHERE d = IFNULL(c,NULL)) AS RESULT FROM t1 GROUP BY c ;
|
|
EXPLAIN EXTENDED SELECT (SELECT 1 FROM t2 WHERE d = IFNULL(c,NULL)) AS RESULT FROM t1 GROUP BY c;
|
|
--echo second equivalent variant
|
|
# used to fail with 1242: Subquery returns more than 1 row
|
|
SELECT (SELECT 1 FROM t2 WHERE d = c) AS RESULT FROM t1 GROUP BY c ;
|
|
EXPLAIN EXTENDED SELECT (SELECT 1 FROM t2 WHERE d = c) AS RESULT FROM t1 GROUP BY c ;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # BUG#45928 "Differing query results depending on MRR and
|
|
--echo # engine_condition_pushdown settings"
|
|
--echo #
|
|
|
|
CREATE TABLE `t1` (
|
|
`pk` int(11) NOT NULL AUTO_INCREMENT,
|
|
`time_nokey` time NOT NULL,
|
|
`varchar_key` varchar(1) NOT NULL,
|
|
`varchar_nokey` varchar(1) NOT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `varchar_key` (`varchar_key`)
|
|
) AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
|
|
INSERT INTO `t1` VALUES (10,'00:00:00','i','i'),(11,'00:00:00','','');
|
|
|
|
set @old_optimizer_switch = @@session.optimizer_switch,
|
|
@old_optimizer_use_mrr = @@session.optimizer_use_mrr,
|
|
@old_engine_condition_pushdown = @@session.engine_condition_pushdown;
|
|
|
|
SET SESSION OPTIMIZER_SWITCH = 'materialization=off,semijoin=off,loosescan=off,firstmatch=off';
|
|
SET SESSION optimizer_use_mrr = 'force';
|
|
SET SESSION engine_condition_pushdown = 1;
|
|
|
|
SELECT `time_nokey` G1 FROM t1 WHERE ( `varchar_nokey` , `varchar_key` ) IN (
|
|
SELECT `varchar_nokey` , `varchar_nokey` ) AND `varchar_key` >= 'c' HAVING G1 ORDER
|
|
BY `pk` ;
|
|
|
|
set @@session.optimizer_switch = @old_optimizer_switch,
|
|
@@session.optimizer_use_mrr = @old_optimizer_use_mrr,
|
|
@@session.engine_condition_pushdown = @old_engine_condition_pushdown;
|
|
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # BUG#45863 "Assertion failed: (fixed == 0), function fix_fields(),
|
|
--echo # file item.cc, line 4448"
|
|
--echo #
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS C, BB;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE C (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO C VALUES
|
|
('k'),('a'),(''),('u'),('e'),('v'),('i'),
|
|
('t'),('u'),('f'),('u'),('m'),('j'),('f'),
|
|
('v'),('j'),('g'),('e'),('h'),('z');
|
|
CREATE TABLE BB (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO BB VALUES ('i'),('t');
|
|
-- error ER_OPERAND_COLUMNS
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey
|
|
FROM BB);
|
|
-- error ER_BAD_FIELD_ERROR
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey, varchar_nokey
|
|
FROM BB);
|
|
DROP TABLE C,BB;
|
|
|
|
--echo #
|
|
--echo # During work with BUG#45863 I had problems with a query that was
|
|
--echo # optimized differently in regular and prepared mode.
|
|
--echo # Because there was a bug in one of the selected strategies, I became
|
|
--echo # aware of the problem. Adding an EXPLAIN query to catch this.
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1, t2, t3;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
EMPNAME CHAR(20),
|
|
GRADE DECIMAL(4),
|
|
CITY CHAR(15));
|
|
|
|
CREATE TABLE t2
|
|
(PNUM CHAR(3) NOT NULL,
|
|
PNAME CHAR(20),
|
|
PTYPE CHAR(6),
|
|
BUDGET DECIMAL(9),
|
|
CITY CHAR(15));
|
|
|
|
CREATE TABLE t3
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
PNUM CHAR(3) NOT NULL,
|
|
HOURS DECIMAL(5));
|
|
|
|
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
|
|
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
|
|
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
|
|
|
|
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
|
|
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
|
|
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
|
|
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
|
|
|
|
INSERT INTO t3 VALUES ('E1','P1',40);
|
|
INSERT INTO t3 VALUES ('E1','P2',20);
|
|
INSERT INTO t3 VALUES ('E1','P3',80);
|
|
INSERT INTO t3 VALUES ('E1','P4',20);
|
|
INSERT INTO t3 VALUES ('E1','P5',12);
|
|
INSERT INTO t3 VALUES ('E1','P6',12);
|
|
INSERT INTO t3 VALUES ('E2','P1',40);
|
|
INSERT INTO t3 VALUES ('E2','P2',80);
|
|
INSERT INTO t3 VALUES ('E3','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P4',40);
|
|
INSERT INTO t3 VALUES ('E4','P5',80);
|
|
|
|
SET @old_optimizer_switch = @@session.optimizer_switch;
|
|
SET @old_join_cache_level = @@session.join_cache_level;
|
|
SET SESSION optimizer_switch = 'firstmatch=on,loosescan=on,materialization=on,in_to_exists=off,semijoin=on';
|
|
SET SESSION join_cache_level = 1;
|
|
|
|
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
DROP INDEX t1_IDX ON t1;
|
|
CREATE INDEX t1_IDX ON t1(EMPNUM);
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
DROP INDEX t1_IDX ON t1;
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
SET SESSION optimizer_switch = @old_optimizer_switch;
|
|
SET SESSION join_cache_level = @old_join_cache_level;
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # BUG#45221 Query SELECT pk FROM C WHERE pk IN (SELECT int_key) failing
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (
|
|
i1_key INT,
|
|
i2 INT,
|
|
i3 INT,
|
|
KEY i1_index (i1_key)
|
|
);
|
|
|
|
INSERT INTO t1 VALUES (9,1,2), (9,2,1);
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL,
|
|
i1 INT,
|
|
PRIMARY KEY (pk)
|
|
);
|
|
|
|
INSERT INTO t2 VALUES (9,1);
|
|
|
|
--echo # Enable Index condition pushdown
|
|
--replace_column 1 #
|
|
SELECT @old_icp:=@@engine_condition_pushdown;
|
|
SET SESSION engine_condition_pushdown = 'ON';
|
|
|
|
--echo
|
|
SELECT pk
|
|
FROM t2
|
|
WHERE
|
|
pk IN (
|
|
SELECT i1_key
|
|
FROM t1
|
|
WHERE t1.i2 < t1.i3 XOR t2.i1 > 1
|
|
ORDER BY t1.i2 desc);
|
|
|
|
--echo # Restore old value for Index condition pushdown
|
|
SET SESSION engine_condition_pushdown=@old_icp;
|
|
|
|
DROP TABLE t1,t2;
|
|
|
|
--echo #
|
|
--echo # BUG#45863 "Assertion failed: (fixed == 0), function fix_fields(),
|
|
--echo # file item.cc, line 4448"
|
|
--echo #
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS C, BB;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE C (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO C VALUES
|
|
('k'),('a'),(''),('u'),('e'),('v'),('i'),
|
|
('t'),('u'),('f'),('u'),('m'),('j'),('f'),
|
|
('v'),('j'),('g'),('e'),('h'),('z');
|
|
CREATE TABLE BB (
|
|
varchar_nokey varchar(1) NOT NULL
|
|
);
|
|
INSERT INTO BB VALUES ('i'),('t');
|
|
-- error ER_OPERAND_COLUMNS
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey
|
|
FROM BB);
|
|
-- error ER_BAD_FIELD_ERROR
|
|
SELECT varchar_nokey FROM C
|
|
WHERE (varchar_nokey, OUTR) IN (SELECT varchar_nokey, varchar_nokey
|
|
FROM BB);
|
|
DROP TABLE C,BB;
|
|
|
|
--echo #
|
|
--echo # During work with BUG#45863 I had problems with a query that was
|
|
--echo # optimized differently in regular and prepared mode.
|
|
--echo # Because there was a bug in one of the selected strategies, I became
|
|
--echo # aware of the problem. Adding an EXPLAIN query to catch this.
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1, t2, t3;
|
|
--enable_warnings
|
|
|
|
CREATE TABLE t1
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
EMPNAME CHAR(20),
|
|
GRADE DECIMAL(4),
|
|
CITY CHAR(15));
|
|
|
|
CREATE TABLE t2
|
|
(PNUM CHAR(3) NOT NULL,
|
|
PNAME CHAR(20),
|
|
PTYPE CHAR(6),
|
|
BUDGET DECIMAL(9),
|
|
CITY CHAR(15));
|
|
|
|
CREATE TABLE t3
|
|
(EMPNUM CHAR(3) NOT NULL,
|
|
PNUM CHAR(3) NOT NULL,
|
|
HOURS DECIMAL(5));
|
|
|
|
INSERT INTO t1 VALUES ('E1','Alice',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E2','Betty',10,'Vienna');
|
|
INSERT INTO t1 VALUES ('E3','Carmen',13,'Vienna');
|
|
INSERT INTO t1 VALUES ('E4','Don',12,'Deale');
|
|
INSERT INTO t1 VALUES ('E5','Ed',13,'Akron');
|
|
|
|
INSERT INTO t2 VALUES ('P1','MXSS','Design',10000,'Deale');
|
|
INSERT INTO t2 VALUES ('P2','CALM','Code',30000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P3','SDP','Test',30000,'Tampa');
|
|
INSERT INTO t2 VALUES ('P4','SDP','Design',20000,'Deale');
|
|
INSERT INTO t2 VALUES ('P5','IRM','Test',10000,'Vienna');
|
|
INSERT INTO t2 VALUES ('P6','PAYR','Design',50000,'Deale');
|
|
|
|
INSERT INTO t3 VALUES ('E1','P1',40);
|
|
INSERT INTO t3 VALUES ('E1','P2',20);
|
|
INSERT INTO t3 VALUES ('E1','P3',80);
|
|
INSERT INTO t3 VALUES ('E1','P4',20);
|
|
INSERT INTO t3 VALUES ('E1','P5',12);
|
|
INSERT INTO t3 VALUES ('E1','P6',12);
|
|
INSERT INTO t3 VALUES ('E2','P1',40);
|
|
INSERT INTO t3 VALUES ('E2','P2',80);
|
|
INSERT INTO t3 VALUES ('E3','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P2',20);
|
|
INSERT INTO t3 VALUES ('E4','P4',40);
|
|
INSERT INTO t3 VALUES ('E4','P5',80);
|
|
|
|
SET @old_optimizer_switch = @@session.optimizer_switch;
|
|
SET @old_join_cache_level = @@session.join_cache_level;
|
|
SET SESSION optimizer_switch = 'firstmatch=on,loosescan=on,materialization=on,in_to_exists=off,semijoin=on';
|
|
SET SESSION join_cache_level = 1;
|
|
|
|
CREATE UNIQUE INDEX t1_IDX ON t1(EMPNUM);
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
DROP INDEX t1_IDX ON t1;
|
|
CREATE INDEX t1_IDX ON t1(EMPNUM);
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
DROP INDEX t1_IDX ON t1;
|
|
|
|
EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'));
|
|
|
|
PREPARE stmt FROM "EXPLAIN SELECT EMPNAME
|
|
FROM t1
|
|
WHERE EMPNUM IN
|
|
(SELECT EMPNUM
|
|
FROM t3
|
|
WHERE PNUM IN
|
|
(SELECT PNUM
|
|
FROM t2
|
|
WHERE PTYPE = 'Design'))";
|
|
EXECUTE stmt;
|
|
EXECUTE stmt;
|
|
DEALLOCATE PREPARE stmt;
|
|
|
|
SET SESSION optimizer_switch = @old_optimizer_switch;
|
|
SET SESSION join_cache_level = @old_join_cache_level;
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # BUG#716293: "Range checked for each record" is not used if condition refers to outside of subquery
|
|
--echo #
|
|
|
|
create table t1 (a int);
|
|
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
|
create table t2 (a int, b int, `filler` char(200), key(a), key (b));
|
|
insert into t2
|
|
select A.a + 10*B.a + 100 * C.a, A.a + 10*B.a + 100 * C.a, 'filler' from t1 A, t1 B, t1 C;
|
|
|
|
--echo # The following must use "Range checked for each record" for table B
|
|
explain
|
|
select a,
|
|
(select sum(X.a+B.b) from t1 X, t2 B where B.a=A.a or B.b=A.a)
|
|
from t1 A;
|
|
drop table t1, t2;
|
|
|
|
|
|
--echo #
|
|
--echo # BUG#723822: Crash in get_constant_key_infix with EXISTS ( SELECT .. DISTINCT )
|
|
--echo #
|
|
CREATE TABLE t1 ( f1 int(11), f3 varchar(1)) ;
|
|
INSERT INTO t1 VALUES ('8','c'),('5','f');
|
|
|
|
ALTER TABLE t1 ADD KEY (f3,f1);
|
|
|
|
CREATE TABLE t2 ( f4 varchar(1)) ;
|
|
INSERT INTO t2 VALUES ('f'),('d');
|
|
|
|
SELECT * FROM t2
|
|
WHERE EXISTS (
|
|
SELECT DISTINCT f3
|
|
FROM t1
|
|
WHERE f3 <= t2.f4
|
|
);
|
|
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#718763 Second crash in select_describe() and materialization
|
|
--echo #
|
|
|
|
CREATE TABLE t1 ( f1 int(11), f3 int(11), f10 varchar(1), KEY (f3)) ;
|
|
INSERT INTO t1 VALUES ('28','6','m'),('29','4','c');
|
|
|
|
CREATE TABLE t2 (f11 varchar(1)) ;
|
|
INSERT INTO t2 VALUES ('f'),('d');
|
|
|
|
SET @old_optimizer_switch = @@session.optimizer_switch;
|
|
SET SESSION optimizer_switch = 'materialization=on,in_to_exists=off,';
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1
|
|
WHERE f3 = (
|
|
SELECT t1.f3 FROM t1
|
|
WHERE ( t1.f10 ) IN ( SELECT f11 FROM t2 GROUP BY f11 ));
|
|
SELECT * FROM t1
|
|
WHERE f3 = (
|
|
SELECT t1.f3 FROM t1
|
|
WHERE ( t1.f10 ) IN ( SELECT f11 FROM t2 GROUP BY f11 ));
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1
|
|
WHERE f3 = (
|
|
SELECT f3 FROM t1
|
|
WHERE ( f10, f10 ) IN ( SELECT f11, f11 FROM t2 GROUP BY f11 ));
|
|
SELECT * FROM t1
|
|
WHERE f3 = (
|
|
SELECT f3 FROM t1
|
|
WHERE ( f10, f10 ) IN ( SELECT f11, f11 FROM t2 GROUP BY f11 ));
|
|
|
|
SET SESSION optimizer_switch = @old_optimizer_switch;
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#715738: Wrong result with implicit grouping and empty result set
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 int, f2 int);
|
|
CREATE TABLE t2 (f3 int, f4 int not null, PRIMARY KEY (f3));
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
|
|
SET @@optimizer_switch = 'materialization=on,in_to_exists=off,semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) > 7) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) > 7) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) is null) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) is null) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2);
|
|
|
|
|
|
SET @@optimizer_switch = 'materialization=off,in_to_exists=on,semijoin=off';
|
|
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) > 7) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) > 7) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) is null) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 HAVING max(f4) is null) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2);
|
|
|
|
|
|
INSERT INTO t1 VALUES (1, 2);
|
|
INSERT INTO t1 VALUES (3, 4);
|
|
INSERT INTO t2 VALUES (5, 6);
|
|
INSERT INTO t2 VALUES (7, 8);
|
|
|
|
SET @@optimizer_switch = 'materialization=on,in_to_exists=off,semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) > 7) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) > 7) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) is null) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) is null) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
SET @@optimizer_switch = 'materialization=off,in_to_exists=on,semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3+f4, min(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, min(f4)+max(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, min(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT f3, f3 + count(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) > 7) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) > 7) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) is null) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT f3, count(f4) FROM t2 WHERE f3 > 10 HAVING max(f4) is null) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4) FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2 WHERE f3 > 10) as not_in;
|
|
SELECT (2, 0) NOT IN (SELECT max(f3+f3), count(f4)+f3 FROM t2 WHERE f3 > 10) as not_in;
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2 WHERE f3 > 10);
|
|
SELECT * FROM t1 WHERE (2, 0) NOT IN (SELECT min(f3)+f3, min(f4)+f3+max(f4) FROM t2 WHERE f3 > 10);
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#613029 Wrong result with materialization and semijoin, and
|
|
--echo # valgrind warnings in Protocol::net_store_data with materialization
|
|
--echo # for implicit grouping
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (
|
|
pk int(11) NOT NULL AUTO_INCREMENT,
|
|
f2 int(11) NOT NULL,
|
|
f3 varchar(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY f2 (f2));
|
|
|
|
INSERT INTO t1 VALUES (1,9,'x');
|
|
INSERT INTO t1 VALUES (2,5,'g');
|
|
|
|
CREATE TABLE t2 (
|
|
pk int(11) NOT NULL AUTO_INCREMENT,
|
|
f2 int(11) NOT NULL,
|
|
f3 varchar(1) NOT NULL,
|
|
PRIMARY KEY (pk),
|
|
KEY f2 (f2));
|
|
|
|
INSERT INTO t2 VALUES (1,7,'p');
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
|
|
set @@optimizer_switch='materialization=off,in_to_exists=on,semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT t1.f3, MAX(t1.f2)
|
|
FROM t1, t2
|
|
WHERE (t2.pk = t1.pk) AND t2.pk IN (SELECT f2 FROM t1);
|
|
|
|
SELECT t1.f3, MAX(t1.f2)
|
|
FROM t1, t2
|
|
WHERE (t2.pk = t1.pk) AND t2.pk IN (SELECT f2 FROM t1);
|
|
|
|
set @@optimizer_switch='materialization=on,in_to_exists=off,semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT t1.f3, MAX(t1.f2)
|
|
FROM t1, t2
|
|
WHERE (t2.pk = t1.pk) AND t2.pk IN (SELECT f2 FROM t1);
|
|
|
|
SELECT t1.f3, MAX(t1.f2)
|
|
FROM t1, t2
|
|
WHERE (t2.pk = t1.pk) AND t2.pk IN (SELECT f2 FROM t1);
|
|
|
|
-- echo TODO: add a test case for semijoin when the wrong result is fixed
|
|
-- echo set @@optimizer_switch='materialization=off,semijoin=on';
|
|
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
|
|
drop table t1, t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#641203 Query returns rows where no result is expected (impossible WHERE)
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (c1 varchar(1) DEFAULT NULL);
|
|
CREATE TABLE t2 (c1 varchar(1) DEFAULT NULL);
|
|
INSERT INTO t2 VALUES ('k'), ('d');
|
|
CREATE TABLE t3 (c1 varchar(1) DEFAULT NULL);
|
|
INSERT INTO t3 VALUES ('a'), ('b'), ('c');
|
|
CREATE TABLE t4 (c1 varchar(1) primary key);
|
|
INSERT INTO t4 VALUES ('k'), ('d');
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON t1.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
SELECT * FROM t1 RIGHT JOIN t2 ON t1.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
EXPLAIN
|
|
SELECT * FROM t2 LEFT JOIN t1 ON t1.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
SELECT * FROM t2 LEFT JOIN t1 ON t1.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
EXPLAIN
|
|
SELECT * FROM (t2 LEFT JOIN t1 ON t1.c1) LEFT JOIN t3 on t3.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
SELECT * FROM (t2 LEFT JOIN t1 ON t1.c1) LEFT JOIN t3 on t3.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
EXPLAIN
|
|
SELECT * FROM t4 LEFT JOIN t2 ON t4.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
SELECT * FROM t4 LEFT JOIN t2 ON t4.c1 WHERE 's' IN (SELECT c1 FROM t2);
|
|
drop table t1, t2, t3, t4;
|
|
|
|
--echo #
|
|
--echo # LP BUG#675981 Assertion `cache != __null' failed in sub_select_cache()
|
|
--echo # on EXPLAIN
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 int,f2 int) ;
|
|
INSERT IGNORE INTO t1 VALUES ('2','5'),('2',NULL);
|
|
|
|
CREATE TABLE t2 (f1 int, f5 int) ;
|
|
INSERT IGNORE INTO t2 VALUES (1,0);
|
|
|
|
CREATE TABLE t3 (f4 int) ;
|
|
INSERT IGNORE INTO t3 VALUES (0),(0);
|
|
|
|
set @@optimizer_switch='in_to_exists=on,materialization=off,semijoin=off';
|
|
EXPLAIN
|
|
SELECT * FROM t2
|
|
WHERE f1 IN (SELECT t1.f2 FROM t1 JOIN t3 ON t3.f4);
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # LP BUG#680005 Second assertion `cache != __null' failed in
|
|
--echo # sub_select_cache() on EXPLAIN
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 int,f2 int,f4 int,f6 int,KEY (f4)) ;
|
|
INSERT IGNORE INTO t1 VALUES
|
|
('1','5','1','0'),('2','1','1','0'),('2','2','2','0'),('0',NULL,'0','0'),
|
|
('2','1','2','0'),('2','0','0','0'),('2','2','2','0'),('2','8','2','0'),
|
|
('2','7','2','0'),('2','5','2','0'),('2',NULL,'1','0');
|
|
|
|
CREATE TABLE t2 (f3 int) ;
|
|
INSERT IGNORE INTO t2 VALUES ('7');
|
|
|
|
CREATE TABLE t3 (f3 int) ;
|
|
INSERT IGNORE INTO t3 VALUES ('2');
|
|
|
|
EXPLAIN
|
|
SELECT t1.f4
|
|
FROM t2 JOIN t1 ON t1.f6
|
|
WHERE
|
|
( t1.f2 ) IN (SELECT SUBQUERY2_t1.f3
|
|
FROM t3 AS SUBQUERY2_t1
|
|
JOIN
|
|
(t1 AS SUBQUERY2_t2
|
|
JOIN
|
|
t1 AS SUBQUERY2_t3 ON SUBQUERY2_t3.f1)
|
|
ON SUBQUERY2_t3.f2)
|
|
GROUP BY t1.f4 ORDER BY t1.f1 LIMIT 10;
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # LP BUG#680038 bool close_thread_table(THD*, TABLE**):
|
|
--echo # Assertion `table->key_read == 0' failed in EXPLAIN
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 int,f3 int,f4 int) ;
|
|
INSERT IGNORE INTO t1 VALUES (NULL,1,0);
|
|
|
|
CREATE TABLE t2 (f2 int,f4 int,f5 int) ;
|
|
INSERT IGNORE INTO t2 VALUES (8,0,0),(5,0,0);
|
|
|
|
CREATE TABLE t3 (f4 int,KEY (f4)) ;
|
|
INSERT IGNORE INTO t3 VALUES (0),(0);
|
|
|
|
set @@optimizer_switch='semijoin=off';
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t1 WHERE
|
|
(SELECT f2 FROM t2
|
|
WHERE f4 <= ALL
|
|
(SELECT SQ1_t1.f4
|
|
FROM t3 AS SQ1_t1 JOIN t3 AS SQ1_t3 ON SQ1_t3.f4
|
|
GROUP BY SQ1_t1.f4));
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
--echo #
|
|
--echo # BUG#52317: Assertion failing in Field_varstring::store()
|
|
--echo # at field.cc:6833
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (i INTEGER);
|
|
INSERT INTO t1 VALUES (1);
|
|
CREATE TABLE t2 (i INTEGER, KEY k(i));
|
|
INSERT INTO t2 VALUES (1), (2);
|
|
|
|
EXPLAIN
|
|
SELECT i FROM t1 WHERE (1) NOT IN (SELECT i FROM t2);
|
|
|
|
DROP TABLE t2;
|
|
DROP TABLE t1;
|
|
|
|
--echo #
|
|
--echo # LP BUG#680846: Crash in clear_tables() with subqueries
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f3 int) ;
|
|
INSERT IGNORE INTO t1 VALUES (0),(0);
|
|
|
|
CREATE TABLE t2 (f1 int,f3 int,f4 varchar(32)) ;
|
|
INSERT IGNORE INTO t2 VALUES (1,0,'f');
|
|
|
|
EXPLAIN
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT COUNT(f3) FROM t1 WHERE t2.f1) AS f9
|
|
FROM t2 JOIN t1 ON t1.f3
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
GROUP BY f9;
|
|
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT COUNT(f3) FROM t1 WHERE t2.f1) AS f9
|
|
FROM t2 JOIN t1 ON t1.f3
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
GROUP BY f9;
|
|
|
|
EXPLAIN
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT COUNT(f3) FROM t1 WHERE t2.f1) AS f9
|
|
FROM t2 JOIN t1 ON t1.f3
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
ORDER BY f9;
|
|
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT COUNT(f3) FROM t1 WHERE t2.f1) AS f9
|
|
FROM t2 JOIN t1 ON t1.f3
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
ORDER BY f9;
|
|
|
|
# these queries are like the ones above, but without the ON clause,
|
|
# resulting in a different crash (failed assert)
|
|
EXPLAIN
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT t2.f1 FROM t1 limit 1) AS f9
|
|
FROM t2 JOIN t1
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
GROUP BY f9;
|
|
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT t2.f1 FROM t1 limit 1) AS f9
|
|
FROM t2 JOIN t1
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
GROUP BY f9;
|
|
|
|
EXPLAIN
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT t2.f1 FROM t1 limit 1) AS f9
|
|
FROM t2 JOIN t1
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
ORDER BY f9;
|
|
|
|
SELECT COUNT(t2.f3),
|
|
(SELECT t2.f1 FROM t1 limit 1) AS f9
|
|
FROM t2 JOIN t1
|
|
WHERE ('v') IN (SELECT f4 FROM t2)
|
|
ORDER BY f9;
|
|
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#682683 Crash in create_tmp_table called from
|
|
--echo # JOIN::init_execution
|
|
--echo #
|
|
|
|
CREATE TABLE t2 (f1 int) ;
|
|
INSERT INTO t2 VALUES (1),(2);
|
|
|
|
CREATE TABLE t1 (f1 int) ;
|
|
|
|
EXPLAIN
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 GROUP BY field1;
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 GROUP BY field1;
|
|
EXPLAIN
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 ORDER BY field1;
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 ORDER BY field1;
|
|
|
|
INSERT INTO t1 VALUES (1),(2);
|
|
|
|
EXPLAIN
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 GROUP BY field1;
|
|
--error ER_SUBQUERY_NO_1_ROW
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 GROUP BY field1;
|
|
EXPLAIN
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 ORDER BY field1;
|
|
--error ER_SUBQUERY_NO_1_ROW
|
|
SELECT (SELECT f1 FROM t1) AS field1 FROM t2 ORDER BY field1;
|
|
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#680943 Assertion `!table || (!table->read_set ||
|
|
--echo # bitmap_is_set(table->read_set, field_index))' failed with subquery
|
|
--echo #
|
|
|
|
CREATE TABLE t1 (f1 int,f3 int) ;
|
|
INSERT IGNORE INTO t1 VALUES ('6','0'),('4','0');
|
|
|
|
CREATE TABLE t2 (f1 int,f2 int,f3 int) ;
|
|
INSERT IGNORE INTO t2 VALUES ('6','0','0'),('2','0','0');
|
|
|
|
SELECT f2
|
|
FROM (SELECT * FROM t2) AS alias1
|
|
WHERE (SELECT SQ2_t2.f1
|
|
FROM t1 JOIN t1 AS SQ2_t2 ON SQ2_t2.f3
|
|
WHERE SQ2_t2.f3 AND alias1.f1)
|
|
ORDER BY f3 ;
|
|
|
|
drop table t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#715062: Wrong result with VIEW + UNION + subquery in maria-5.3-mwl89
|
|
--echo #
|
|
|
|
create table t1 (f1 int);
|
|
create table t2 (f2 int);
|
|
create table t3 (f3 int);
|
|
insert into t1 values (2);
|
|
insert into t2 values (2);
|
|
insert into t3 values (7);
|
|
|
|
CREATE VIEW v1 AS SELECT 2 UNION SELECT 2 ;
|
|
CREATE VIEW v2 AS SELECT * from t1 UNION SELECT * from t2 ;
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
SET @@optimizer_switch = 'in_to_exists=off,semijoin=off,materialization=on';
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN ( SELECT * FROM v1 );
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN ( SELECT * FROM v1 );
|
|
|
|
EXPLAIN
|
|
SELECT ( 5 ) IN ( SELECT * FROM v1 );
|
|
SELECT ( 5 ) IN ( SELECT * FROM v1 );
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM t3 WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
SELECT 'bug' FROM t3 WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
|
|
EXPLAIN
|
|
SELECT ( 5 ) IN ( SELECT * FROM v2 );
|
|
SELECT ( 5 ) IN ( SELECT * FROM v2 );
|
|
|
|
SET @@optimizer_switch = 'in_to_exists=on,semijoin=off,materialization=off';
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN ( SELECT * FROM v1 );
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN ( SELECT * FROM v1 );
|
|
|
|
EXPLAIN
|
|
SELECT ( 5 ) IN ( SELECT * FROM v1 );
|
|
SELECT ( 5 ) IN ( SELECT * FROM v1 );
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
SELECT 'bug' FROM DUAL WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
|
|
EXPLAIN
|
|
SELECT 'bug' FROM t3 WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
SELECT 'bug' FROM t3 WHERE ( 5 ) IN (SELECT * FROM v2);
|
|
|
|
EXPLAIN
|
|
SELECT ( 5 ) IN ( SELECT * FROM v2 );
|
|
SELECT ( 5 ) IN ( SELECT * FROM v2 );
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
|
|
drop table t1,t2,t3;
|
|
drop view v1,v2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#715069 Wrong result with GROUP BY inside subquery and materialization=off
|
|
--echo #
|
|
|
|
CREATE TABLE t0 ( f1 int(11), f2 int(11), f10 varchar(1), PRIMARY KEY (f1)) ;
|
|
INSERT INTO t0 VALUES (8,8,'u'),(10,5,'o');
|
|
|
|
CREATE TABLE t1 (f1a int, f2a int not null, f3a varchar(3) not null, PRIMARY KEY (f1a)) ;
|
|
INSERT INTO t1 VALUES
|
|
(8,8,'a1a'),
|
|
(10,5,'b1b');
|
|
|
|
CREATE TABLE t2 (f1b int, f2b int not null, f3b varchar(3) not null, PRIMARY KEY (f1b)) ;
|
|
INSERT INTO t2 VALUES
|
|
(10,5,'d1d');
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
set @@optimizer_switch = 'materialization=off';
|
|
|
|
EXPLAIN
|
|
SELECT alias2.f1 , alias2.f2
|
|
FROM t0 AS alias1
|
|
RIGHT JOIN t0 AS alias2 ON alias2.f10
|
|
WHERE ( alias2.f1 , alias2.f2 ) IN ( SELECT f2 , f1 FROM t0 GROUP BY f2 , f1 );
|
|
|
|
SELECT alias2.f1 , alias2.f2
|
|
FROM t0 AS alias1
|
|
RIGHT JOIN t0 AS alias2 ON alias2.f10
|
|
WHERE ( alias2.f1 , alias2.f2 ) IN ( SELECT f2 , f1 FROM t0 GROUP BY f2 , f1 );
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE (f1b, f2b) IN (SELECT f1a, f2a FROM t1 GROUP BY f1a, f2a);
|
|
SELECT * FROM t2 WHERE (f1b, f2b) IN (SELECT f1a, f2a FROM t1 GROUP BY f1a, f2a);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE (f1b) IN (SELECT f1a FROM t1 GROUP BY f1a, f2a);
|
|
SELECT * FROM t2 WHERE (f1b) IN (SELECT f1a FROM t1 GROUP BY f1a, f2a);
|
|
|
|
SET @@optimizer_switch = 'materialization=on';
|
|
|
|
EXPLAIN
|
|
SELECT alias2.f1 , alias2.f2
|
|
FROM t0 AS alias1
|
|
RIGHT JOIN t0 AS alias2 ON alias2.f10
|
|
WHERE ( alias2.f1 , alias2.f2 ) IN ( SELECT f2 , f1 FROM t0 GROUP BY f2 , f1 );
|
|
|
|
SELECT alias2.f1 , alias2.f2
|
|
FROM t0 AS alias1
|
|
RIGHT JOIN t0 AS alias2 ON alias2.f10
|
|
WHERE ( alias2.f1 , alias2.f2 ) IN ( SELECT f2 , f1 FROM t0 GROUP BY f2 , f1 );
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE (f1b, f2b) IN (SELECT f1a, f2a FROM t1 GROUP BY f1a, f2a);
|
|
SELECT * FROM t2 WHERE (f1b, f2b) IN (SELECT f1a, f2a FROM t1 GROUP BY f1a, f2a);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2 WHERE (f1b) IN (SELECT f1a FROM t1 GROUP BY f1a, f2a);
|
|
SELECT * FROM t2 WHERE (f1b) IN (SELECT f1a FROM t1 GROUP BY f1a, f2a);
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
|
|
drop table t0,t1,t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#718593 Crash in substitute_for_best_equal_field -> eliminate_item_equal ->
|
|
--echo # Item_field::find_item_equal -> Item_equal::contains
|
|
--echo #
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
SET @@optimizer_switch = 'semijoin=off';
|
|
|
|
CREATE TABLE t1 ( f3 int(11), f10 varchar(1), f11 varchar(1)) ;
|
|
INSERT IGNORE INTO t1 VALUES (6,'f','f'),(2,'d','d');
|
|
|
|
CREATE TABLE t2 ( f12 int(11), f13 int(11)) ;
|
|
insert into t2 values (1,2), (3,4);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2
|
|
WHERE ( f12 ) IN (
|
|
SELECT alias2.f3
|
|
FROM t1 AS alias1 JOIN t1 AS alias2 ON alias2.f10 = alias1.f11
|
|
WHERE alias1.f11 OR alias1.f3 = 50 AND alias1.f10
|
|
);
|
|
SELECT * FROM t2
|
|
WHERE ( f12 ) IN (
|
|
SELECT alias2.f3
|
|
FROM t1 AS alias1 JOIN t1 AS alias2 ON alias2.f10 = alias1.f11
|
|
WHERE alias1.f11 OR alias1.f3 = 50 AND alias1.f10
|
|
);
|
|
|
|
EXPLAIN
|
|
SELECT * FROM t2
|
|
WHERE ( f12 ) IN (
|
|
SELECT alias2.f3
|
|
FROM t1 AS alias1, t1 AS alias2
|
|
WHERE (alias2.f10 = alias1.f11) AND (alias1.f11 OR alias1.f3 = 50 AND alias1.f10));
|
|
SELECT * FROM t2
|
|
WHERE ( f12 ) IN (
|
|
SELECT alias2.f3
|
|
FROM t1 AS alias1, t1 AS alias2
|
|
WHERE (alias2.f10 = alias1.f11) AND (alias1.f11 OR alias1.f3 = 50 AND alias1.f10));
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
drop table t1, t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#715759 Wrong result with in_to_exists=on in maria-5.3-mwl89
|
|
--echo #
|
|
|
|
set @save_optimizer_switch=@@optimizer_switch;
|
|
CREATE TABLE t1 (a1 int, a2 int) ;
|
|
INSERT INTO t1 VALUES (1, 2);
|
|
INSERT INTO t1 VALUES (3, 4);
|
|
|
|
CREATE TABLE t2 (b1 int, b2 int) ;
|
|
INSERT INTO t2 VALUES (1, 2);
|
|
|
|
SET @@optimizer_switch = 'in_to_exists=on,materialization=off,semijoin=off';
|
|
|
|
EXPLAIN SELECT * FROM t1 WHERE a1 IN (SELECT b1 FROM t2 WHERE b1 = b2);
|
|
SELECT * FROM t1 WHERE a1 IN (SELECT b1 FROM t2 WHERE b1 = b2);
|
|
|
|
set @@optimizer_switch=@save_optimizer_switch;
|
|
drop table t1, t2;
|
|
|
|
--echo #
|
|
--echo # LP BUG#772309 join_tab_cmp_straight(): Assertion `!jt2->emb_sj_nest' failed in maria-5.3-mwl89 with semijoin
|
|
--echo #
|
|
|
|
CREATE TABLE t1 ( f2 int) ;
|
|
INSERT INTO t1 VALUES (0),(0);
|
|
|
|
CREATE TABLE t2 ( f1 int NOT NULL ) ;
|
|
INSERT INTO t2 VALUES (0),(0);
|
|
|
|
CREATE TABLE t3 ( f1 int NOT NULL , f2 int) ;
|
|
INSERT INTO t3 VALUES (0,0), (0,0);
|
|
|
|
EXPLAIN SELECT STRAIGHT_JOIN (
|
|
SELECT f2 FROM t1 WHERE ( f2 ) IN ( SELECT t3.f2 FROM t3 JOIN t2 ON t2.f1 = 1 )
|
|
);
|
|
SELECT STRAIGHT_JOIN (
|
|
SELECT f2 FROM t1 WHERE ( f2 ) IN ( SELECT t3.f2 FROM t3 JOIN t2 ON t2.f1 = 1 )
|
|
);
|
|
|
|
drop table t1, t2, t3;
|