Commit ad57284c authored by unknown's avatar unknown
Browse files

join_nested.result, join_nested.test:

  Added a teast case for bug #11284.
sql_select.cc:
  Fixed bug #11284.
  Optimization with empty inner table currently cannot be
  used in the case of nested outer join.


sql/sql_select.cc:
  Fixed bug #11284.
  Optimization with empty inner table currently cannot be
  used in the case of nested outer join.
mysql-test/t/join_nested.test:
  Added a teast case for bug #11284.
parent 67c204c4
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1321,3 +1321,25 @@ NULL NULL NULL
18	NULL	NULL
19	NULL	NULL
DROP TABLE t1,t2,t3;
CREATE TABLE t1 (c11 int);
CREATE TABLE t2 (c21 int);
CREATE TABLE t3 (c31 int);
INSERT INTO t1 VALUES (4), (5);
SELECT * FROM t1 LEFT JOIN t2 ON c11=c21;
c11	c21
4	NULL
5	NULL
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t2	system	NULL	NULL	NULL	NULL	0	const row not found
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	
SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21;
c11	c21	c31
4	NULL	NULL
5	NULL	NULL
EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	
1	SIMPLE	t2	ALL	NULL	NULL	NULL	NULL	0	
1	SIMPLE	t3	ALL	NULL	NULL	NULL	NULL	0	
DROP TABLE t1,t2,t3;
+18 −0
Original line number Diff line number Diff line
@@ -752,3 +752,21 @@ EXPLAIN SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c;
SELECT a, b, c FROM t1 LEFT JOIN (t2, t3) ON b < 3 and b = c;

DROP TABLE t1,t2,t3;

#
# Test for bug #11284: empty table in a nested left join
# 

CREATE TABLE t1 (c11 int);
CREATE TABLE t2 (c21 int);
CREATE TABLE t3 (c31 int);

INSERT INTO t1 VALUES (4), (5);

SELECT * FROM t1 LEFT JOIN t2 ON c11=c21;
EXPLAIN SELECT * FROM t1 LEFT JOIN t2 ON c11=c21;

SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21;
EXPLAIN SELECT * FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON c21=c31) ON c11=c21;

DROP TABLE t1,t2,t3;
+1 −1
Original line number Diff line number Diff line
@@ -2158,7 +2158,7 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
    if (*s->on_expr_ref)
    {
      /* s is the only inner table of an outer join */
      if (!table->file->records)
      if (!table->file->records && !embedding)
      {						// Empty table
        s->dependent= 0;                        // Ignore LEFT JOIN depend.
	set_position(join,const_count++,s,(KEYUSE*) 0);