Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-0
This commit is contained in:
commit
7b969dddc3
@ -1343,3 +1343,58 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 0
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 0
|
||||
DROP TABLE t1,t2,t3;
|
||||
CREATE TABLE t1 (goods int(12) NOT NULL, price varchar(128) NOT NULL);
|
||||
INSERT INTO t1 VALUES (23, 2340), (26, 9900);
|
||||
CREATE TABLE t2 (goods int(12), name varchar(50), shop char(2));
|
||||
INSERT INTO t2 VALUES (23, 'as300', 'fr'), (26, 'as600', 'fr');
|
||||
create table t3 (groupid int(12) NOT NULL, goodsid int(12) NOT NULL);
|
||||
INSERT INTO t3 VALUES (3,23), (6,26);
|
||||
CREATE TABLE t4 (groupid int(12));
|
||||
INSERT INTO t4 VALUES (1), (2), (3), (4), (5), (6);
|
||||
SELECT * FROM
|
||||
(SELECT DISTINCT gl.groupid, gp.price
|
||||
FROM t4 gl
|
||||
LEFT JOIN
|
||||
(t3 g INNER JOIN t2 p ON g.goodsid = p.goods
|
||||
INNER JOIN t1 gp ON p.goods = gp.goods)
|
||||
ON gl.groupid = g.groupid and p.shop = 'fr') t;
|
||||
groupid price
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 2340
|
||||
4 NULL
|
||||
5 NULL
|
||||
6 9900
|
||||
CREATE VIEW v1 AS
|
||||
SELECT g.groupid groupid, p.goods goods,
|
||||
p.name name, p.shop shop,
|
||||
gp.price price
|
||||
FROM t3 g INNER JOIN t2 p ON g.goodsid = p.goods
|
||||
INNER JOIN t1 gp on p.goods = gp.goods;
|
||||
CREATE VIEW v2 AS
|
||||
SELECT DISTINCT g.groupid, fr.price
|
||||
FROM t4 g
|
||||
LEFT JOIN
|
||||
v1 fr on g.groupid = fr.groupid and fr.shop = 'fr';
|
||||
SELECT * FROM v2;
|
||||
groupid price
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 2340
|
||||
4 NULL
|
||||
5 NULL
|
||||
6 9900
|
||||
SELECT * FROM
|
||||
(SELECT DISTINCT g.groupid, fr.price
|
||||
FROM t4 g
|
||||
LEFT JOIN
|
||||
v1 fr on g.groupid = fr.groupid and fr.shop = 'fr') t;
|
||||
groupid price
|
||||
1 NULL
|
||||
2 NULL
|
||||
3 2340
|
||||
4 NULL
|
||||
5 NULL
|
||||
6 9900
|
||||
DROP VIEW v1,v2;
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
@ -770,3 +770,51 @@ 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;
|
||||
|
||||
#
|
||||
# Bug #12154: creation of temp table for a query with nested outer join
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (goods int(12) NOT NULL, price varchar(128) NOT NULL);
|
||||
INSERT INTO t1 VALUES (23, 2340), (26, 9900);
|
||||
|
||||
CREATE TABLE t2 (goods int(12), name varchar(50), shop char(2));
|
||||
INSERT INTO t2 VALUES (23, 'as300', 'fr'), (26, 'as600', 'fr');
|
||||
|
||||
create table t3 (groupid int(12) NOT NULL, goodsid int(12) NOT NULL);
|
||||
INSERT INTO t3 VALUES (3,23), (6,26);
|
||||
|
||||
CREATE TABLE t4 (groupid int(12));
|
||||
INSERT INTO t4 VALUES (1), (2), (3), (4), (5), (6);
|
||||
|
||||
SELECT * FROM
|
||||
(SELECT DISTINCT gl.groupid, gp.price
|
||||
FROM t4 gl
|
||||
LEFT JOIN
|
||||
(t3 g INNER JOIN t2 p ON g.goodsid = p.goods
|
||||
INNER JOIN t1 gp ON p.goods = gp.goods)
|
||||
ON gl.groupid = g.groupid and p.shop = 'fr') t;
|
||||
|
||||
CREATE VIEW v1 AS
|
||||
SELECT g.groupid groupid, p.goods goods,
|
||||
p.name name, p.shop shop,
|
||||
gp.price price
|
||||
FROM t3 g INNER JOIN t2 p ON g.goodsid = p.goods
|
||||
INNER JOIN t1 gp on p.goods = gp.goods;
|
||||
|
||||
CREATE VIEW v2 AS
|
||||
SELECT DISTINCT g.groupid, fr.price
|
||||
FROM t4 g
|
||||
LEFT JOIN
|
||||
v1 fr on g.groupid = fr.groupid and fr.shop = 'fr';
|
||||
|
||||
SELECT * FROM v2;
|
||||
|
||||
SELECT * FROM
|
||||
(SELECT DISTINCT g.groupid, fr.price
|
||||
FROM t4 g
|
||||
LEFT JOIN
|
||||
v1 fr on g.groupid = fr.groupid and fr.shop = 'fr') t;
|
||||
|
||||
DROP VIEW v1,v2;
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
@ -1450,6 +1450,12 @@ inline void setup_table_map(TABLE *table, TABLE_LIST *table_list, uint tablenr)
|
||||
table->status= STATUS_NO_RECORD;
|
||||
table->keys_in_use_for_query= table->s->keys_in_use;
|
||||
table->maybe_null= table_list->outer_join;
|
||||
TABLE_LIST *embedding= table_list->embedding;
|
||||
while (!table->maybe_null && embedding)
|
||||
{
|
||||
table->maybe_null= embedding->outer_join;
|
||||
embedding= embedding->embedding;
|
||||
}
|
||||
table->tablenr= tablenr;
|
||||
table->map= (table_map) 1 << tablenr;
|
||||
table->force_index= table_list->force_index;
|
||||
|
Loading…
x
Reference in New Issue
Block a user