mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
BUG#884184: Wrong result with RIGHT JOIN + derived_merge
- Make eliminate_tables_for_list() take into account that it is not possible to eliminate a table if it is used in the upper-side ON expressions. Example: xxx JOIN (t1 LEFT JOIN t2 ON cond ) ON func(t2.columns) Here it would eliminate t2 which is not possible because of use of t2.columns.
This commit is contained in:
@@ -566,3 +566,22 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
# ^^ The above must not produce a QEP of t3,t5,t2,t4
|
||||
# as that violates the "no interleaving of outer join nests" rule.
|
||||
DROP TABLE t1,t2,t3,t4,t5;
|
||||
#
|
||||
# BUG#884184: Wrong result with RIGHT JOIN + derived_merge
|
||||
#
|
||||
CREATE TABLE t1 (a int(11), b varchar(1)) ;
|
||||
INSERT IGNORE INTO t1 VALUES (0,'g');
|
||||
CREATE TABLE t3 ( a varchar(1)) ;
|
||||
INSERT IGNORE INTO t3 VALUES ('g');
|
||||
CREATE TABLE t2 ( a int(11) NOT NULL, PRIMARY KEY (a)) ;
|
||||
create view v1 as SELECT t1.* FROM t1 LEFT JOIN t2 ON ( t1.a = t2.a ) WHERE t2.a <> 0;
|
||||
SELECT alias1.* FROM t3 LEFT JOIN v1 as alias1 ON ( t3.a = alias1.b );
|
||||
a b
|
||||
NULL NULL
|
||||
EXPLAIN SELECT alias1.* FROM t3 LEFT JOIN v1 as alias1 ON ( t3.a = alias1.b );
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 system NULL NULL NULL NULL 1
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 1
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.a 1 Using index
|
||||
drop view v1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@@ -499,3 +499,21 @@ WHERE t3.f2 ;
|
||||
|
||||
DROP TABLE t1,t2,t3,t4,t5;
|
||||
|
||||
--echo #
|
||||
--echo # BUG#884184: Wrong result with RIGHT JOIN + derived_merge
|
||||
--echo #
|
||||
CREATE TABLE t1 (a int(11), b varchar(1)) ;
|
||||
INSERT IGNORE INTO t1 VALUES (0,'g');
|
||||
|
||||
CREATE TABLE t3 ( a varchar(1)) ;
|
||||
INSERT IGNORE INTO t3 VALUES ('g');
|
||||
|
||||
CREATE TABLE t2 ( a int(11) NOT NULL, PRIMARY KEY (a)) ;
|
||||
create view v1 as SELECT t1.* FROM t1 LEFT JOIN t2 ON ( t1.a = t2.a ) WHERE t2.a <> 0;
|
||||
|
||||
SELECT alias1.* FROM t3 LEFT JOIN v1 as alias1 ON ( t3.a = alias1.b );
|
||||
EXPLAIN SELECT alias1.* FROM t3 LEFT JOIN v1 as alias1 ON ( t3.a = alias1.b );
|
||||
|
||||
drop view v1;
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
|
Reference in New Issue
Block a user