Skip to content

Commit 4db6c92

Browse files
committed
Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
1) A code path in SELECT_LEX::convert_subquery_to_semijoin, which was only intended for scalar subqueries and row subqueries, was previously taken by all kinds of subqueries. Add an extra condition to make sure that it is only taken if the subquery is a scalar subquery or a row subquery. 2) If an IN predicate whose left side contained a non-scalar row subquery, had been converted to a semijoin, it would run into an assert when checking if the semijoin could use materialization. To avoid the problem, stop trying to use materialization for this kind of query.
1 parent f467cbe commit 4db6c92

28 files changed

+1089
-6
lines changed

mysql-test/include/subquery_sj.inc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6631,4 +6631,32 @@ eval $query;
66316631

66326632
DROP TABLE t1,t2,t3;
66336633

6634+
--echo #
6635+
--echo # Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
6636+
--echo #
6637+
6638+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
6639+
INSERT INTO t1 VALUES (1);
6640+
ANALYZE TABLE t1;
6641+
6642+
let $query=SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
6643+
eval EXPLAIN $query;
6644+
eval $query;
6645+
6646+
let $query=
6647+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
6648+
eval EXPLAIN $query;
6649+
eval $query;
6650+
6651+
--echo # The next query is supposed to return zero rows. In some cases
6652+
--echo # it returns one row, because of bug#19822406.
6653+
6654+
let $query=
6655+
SELECT 1 FROM t1 WHERE
6656+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
6657+
eval EXPLAIN $query;
6658+
eval $query;
6659+
6660+
DROP TABLE t1;
6661+
66346662
# New tests go here.

mysql-test/r/subquery_sj_all.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11810,4 +11810,45 @@ WHERE t3.pk < 3
1181011810
);
1181111811
pk i1 pk c1
1181211812
DROP TABLE t1,t2,t3;
11813+
#
11814+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11815+
#
11816+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11817+
INSERT INTO t1 VALUES (1);
11818+
ANALYZE TABLE t1;
11819+
Table Op Msg_type Msg_text
11820+
test.t1 analyze status OK
11821+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11822+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11823+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11824+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11825+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11826+
Warnings:
11827+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11828+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11829+
1
11830+
1
11831+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11832+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11833+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11834+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11835+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11836+
Warnings:
11837+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11838+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11839+
1
11840+
1
11841+
# The next query is supposed to return zero rows. In some cases
11842+
# it returns one row, because of bug#19822406.
11843+
EXPLAIN SELECT 1 FROM t1 WHERE
11844+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11845+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11846+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11847+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11848+
Warnings:
11849+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11850+
SELECT 1 FROM t1 WHERE
11851+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11852+
1
11853+
DROP TABLE t1;
1181311854
set optimizer_switch=default;

mysql-test/r/subquery_sj_all_bka.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11816,5 +11816,46 @@ WHERE t3.pk < 3
1181611816
);
1181711817
pk i1 pk c1
1181811818
DROP TABLE t1,t2,t3;
11819+
#
11820+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11821+
#
11822+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11823+
INSERT INTO t1 VALUES (1);
11824+
ANALYZE TABLE t1;
11825+
Table Op Msg_type Msg_text
11826+
test.t1 analyze status OK
11827+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11828+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11829+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11830+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11831+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11832+
Warnings:
11833+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11834+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11835+
1
11836+
1
11837+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11838+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11839+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11840+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11841+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11842+
Warnings:
11843+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11844+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11845+
1
11846+
1
11847+
# The next query is supposed to return zero rows. In some cases
11848+
# it returns one row, because of bug#19822406.
11849+
EXPLAIN SELECT 1 FROM t1 WHERE
11850+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11851+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11852+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11853+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11854+
Warnings:
11855+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11856+
SELECT 1 FROM t1 WHERE
11857+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11858+
1
11859+
DROP TABLE t1;
1181911860
set optimizer_switch=default;
1182011861
set optimizer_switch=default;

mysql-test/r/subquery_sj_all_bka_nixbnl.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11815,5 +11815,46 @@ WHERE t3.pk < 3
1181511815
);
1181611816
pk i1 pk c1
1181711817
DROP TABLE t1,t2,t3;
11818+
#
11819+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11820+
#
11821+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11822+
INSERT INTO t1 VALUES (1);
11823+
ANALYZE TABLE t1;
11824+
Table Op Msg_type Msg_text
11825+
test.t1 analyze status OK
11826+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11827+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11828+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11829+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1)
11830+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11831+
Warnings:
11832+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11833+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11834+
1
11835+
1
11836+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11837+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11838+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11839+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1)
11840+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11841+
Warnings:
11842+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11843+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11844+
1
11845+
1
11846+
# The next query is supposed to return zero rows. In some cases
11847+
# it returns one row, because of bug#19822406.
11848+
EXPLAIN SELECT 1 FROM t1 WHERE
11849+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11850+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11851+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11852+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11853+
Warnings:
11854+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11855+
SELECT 1 FROM t1 WHERE
11856+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11857+
1
11858+
DROP TABLE t1;
1181811859
set optimizer_switch=default;
1181911860
set optimizer_switch=default;

mysql-test/r/subquery_sj_all_bkaunique.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11752,6 +11752,47 @@ WHERE t3.pk < 3
1175211752
);
1175311753
pk i1 pk c1
1175411754
DROP TABLE t1,t2,t3;
11755+
#
11756+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11757+
#
11758+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11759+
INSERT INTO t1 VALUES (1);
11760+
ANALYZE TABLE t1;
11761+
Table Op Msg_type Msg_text
11762+
test.t1 analyze status OK
11763+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11764+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11765+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11766+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11767+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11768+
Warnings:
11769+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11770+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11771+
1
11772+
1
11773+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11774+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11775+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11776+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 FirstMatch(t1); Using join buffer (Block Nested Loop)
11777+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11778+
Warnings:
11779+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11780+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11781+
1
11782+
1
11783+
# The next query is supposed to return zero rows. In some cases
11784+
# it returns one row, because of bug#19822406.
11785+
EXPLAIN SELECT 1 FROM t1 WHERE
11786+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11787+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11788+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11789+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11790+
Warnings:
11791+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11792+
SELECT 1 FROM t1 WHERE
11793+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11794+
1
11795+
DROP TABLE t1;
1175511796
set optimizer_switch=default;
1175611797
set optimizer_switch=default;
1175711798
SET sql_mode = default;

mysql-test/r/subquery_sj_dupsweed.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11769,4 +11769,45 @@ WHERE t3.pk < 3
1176911769
);
1177011770
pk i1 pk c1
1177111771
DROP TABLE t1,t2,t3;
11772+
#
11773+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11774+
#
11775+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11776+
INSERT INTO t1 VALUES (1);
11777+
ANALYZE TABLE t1;
11778+
Table Op Msg_type Msg_text
11779+
test.t1 analyze status OK
11780+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11781+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11782+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
11783+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
11784+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11785+
Warnings:
11786+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11787+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11788+
1
11789+
1
11790+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11791+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11792+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
11793+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
11794+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11795+
Warnings:
11796+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11797+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11798+
1
11799+
1
11800+
# The next query is supposed to return zero rows. In some cases
11801+
# it returns one row, because of bug#19822406.
11802+
EXPLAIN SELECT 1 FROM t1 WHERE
11803+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11804+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11805+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11806+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11807+
Warnings:
11808+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11809+
SELECT 1 FROM t1 WHERE
11810+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11811+
1
11812+
DROP TABLE t1;
1177211813
set optimizer_switch=default;

mysql-test/r/subquery_sj_dupsweed_bka.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11770,5 +11770,46 @@ WHERE t3.pk < 3
1177011770
);
1177111771
pk i1 pk c1
1177211772
DROP TABLE t1,t2,t3;
11773+
#
11774+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11775+
#
11776+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11777+
INSERT INTO t1 VALUES (1);
11778+
ANALYZE TABLE t1;
11779+
Table Op Msg_type Msg_text
11780+
test.t1 analyze status OK
11781+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11782+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11783+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
11784+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
11785+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11786+
Warnings:
11787+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11788+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11789+
1
11790+
1
11791+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11792+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11793+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary
11794+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 End temporary; Using join buffer (Block Nested Loop)
11795+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11796+
Warnings:
11797+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11798+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11799+
1
11800+
1
11801+
# The next query is supposed to return zero rows. In some cases
11802+
# it returns one row, because of bug#19822406.
11803+
EXPLAIN SELECT 1 FROM t1 WHERE
11804+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11805+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11806+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11807+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11808+
Warnings:
11809+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11810+
SELECT 1 FROM t1 WHERE
11811+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11812+
1
11813+
DROP TABLE t1;
1177311814
set optimizer_switch=default;
1177411815
set optimizer_switch=default;

mysql-test/r/subquery_sj_dupsweed_bka_nixbnl.result

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11762,5 +11762,46 @@ WHERE t3.pk < 3
1176211762
);
1176311763
pk i1 pk c1
1176411764
DROP TABLE t1,t2,t3;
11765+
#
11766+
# Bug#19586047: CRASH IN ARG_COMPARATOR::SET_CMP_FUNC
11767+
#
11768+
CREATE TABLE t1(x INT) ENGINE=InnoDB;
11769+
INSERT INTO t1 VALUES (1);
11770+
ANALYZE TABLE t1;
11771+
Table Op Msg_type Msg_text
11772+
test.t1 analyze status OK
11773+
EXPLAIN SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11774+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11775+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11776+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary; End temporary
11777+
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL NULL NULL No tables used
11778+
Warnings:
11779+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11780+
SELECT 1 FROM t1 WHERE EXISTS(SELECT 1) IN (SELECT 1 FROM t1);
11781+
1
11782+
1
11783+
EXPLAIN SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11784+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11785+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11786+
1 PRIMARY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Start temporary; End temporary
11787+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 NULL
11788+
Warnings:
11789+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 1
11790+
SELECT 1 FROM t1 WHERE (SELECT 1, 2 FROM t1) IN (SELECT 1, 2 FROM t1);
11791+
1
11792+
1
11793+
# The next query is supposed to return zero rows. In some cases
11794+
# it returns one row, because of bug#19822406.
11795+
EXPLAIN SELECT 1 FROM t1 WHERE
11796+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11797+
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
11798+
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
11799+
2 SUBQUERY t1 NULL ALL NULL NULL NULL NULL 1 100.00 Using where
11800+
Warnings:
11801+
Note 1003 /* select#1 */ select 1 AS `1` from `test`.`t1` semi join (`test`.`t1`) where 0
11802+
SELECT 1 FROM t1 WHERE
11803+
(SELECT 1, 2 FROM t1 WHERE x = 2) IN (SELECT 1, 2 FROM t1);
11804+
1
11805+
DROP TABLE t1;
1176511806
set optimizer_switch=default;
1176611807
set optimizer_switch=default;

0 commit comments

Comments
 (0)