mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-5.0
This commit is contained in:
commit
0874bccab5
5 changed files with 161 additions and 127 deletions
|
@ -1,15 +1,4 @@
|
||||||
DROP TABLE IF EXISTS t0,t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
DROP TABLE IF EXISTS t0,t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
Warnings:
|
|
||||||
Note 1051 Unknown table 't0'
|
|
||||||
Note 1051 Unknown table 't1'
|
|
||||||
Note 1051 Unknown table 't2'
|
|
||||||
Note 1051 Unknown table 't3'
|
|
||||||
Note 1051 Unknown table 't4'
|
|
||||||
Note 1051 Unknown table 't5'
|
|
||||||
Note 1051 Unknown table 't6'
|
|
||||||
Note 1051 Unknown table 't7'
|
|
||||||
Note 1051 Unknown table 't8'
|
|
||||||
Note 1051 Unknown table 't9'
|
|
||||||
CREATE TABLE t0 (a int, b int, c int);
|
CREATE TABLE t0 (a int, b int, c int);
|
||||||
CREATE TABLE t1 (a int, b int, c int);
|
CREATE TABLE t1 (a int, b int, c int);
|
||||||
CREATE TABLE t2 (a int, b int, c int);
|
CREATE TABLE t2 (a int, b int, c int);
|
||||||
|
@ -75,7 +64,7 @@ a b a b a b
|
||||||
4 2 1 2 3 2
|
4 2 1 2 3 2
|
||||||
4 2 1 2 4 2
|
4 2 1 2 4 2
|
||||||
5 3 NULL NULL NULL NULL
|
5 3 NULL NULL NULL NULL
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -86,6 +75,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
||||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b` from test.t2 left join (test.t3 join test.t4) on((test.t2.b = test.t4.b)) where ((test.t3.a = 1) or isnull(test.t3.c))
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -149,7 +140,7 @@ a b a b a b a b
|
||||||
4 2 2 2 4 2 2 2
|
4 2 2 2 4 2 2 2
|
||||||
4 2 2 2 4 2 3 3
|
4 2 2 2 4 2 3 3
|
||||||
5 3 NULL NULL NULL NULL NULL NULL
|
5 3 NULL NULL NULL NULL NULL NULL
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -161,6 +152,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
||||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t5 ALL NULL NULL NULL NULL 3
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b` from test.t2 left join (test.t3 join test.t4 join test.t5) on((test.t2.b = test.t4.b)) where ((test.t3.a > 1) or isnull(test.t3.c))
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -176,7 +169,7 @@ a b a b a b a b
|
||||||
4 2 2 2 4 2 2 2
|
4 2 2 2 4 2 2 2
|
||||||
4 2 2 2 4 2 3 3
|
4 2 2 2 4 2 3 3
|
||||||
5 3 NULL NULL NULL NULL NULL NULL
|
5 3 NULL NULL NULL NULL NULL NULL
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -189,6 +182,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
||||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t5 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b` from test.t2 left join (test.t3 join test.t4 join test.t5) on((test.t2.b = test.t4.b)) where (((test.t3.a > 1) or isnull(test.t3.c)) and ((test.t5.a < 3) or isnull(test.t5.c)))
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -226,7 +221,7 @@ FROM t8;
|
||||||
a b
|
a b
|
||||||
0 2
|
0 2
|
||||||
1 2
|
1 2
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t6,
|
FROM t6,
|
||||||
t7
|
t7
|
||||||
|
@ -237,6 +232,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t7 ALL NULL NULL NULL NULL 2
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3
|
||||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t8 ALL NULL NULL NULL NULL 2
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b` from test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10))) where 1
|
||||||
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t6,
|
FROM t6,
|
||||||
t7
|
t7
|
||||||
|
@ -527,7 +524,7 @@ a b
|
||||||
1 1
|
1 1
|
||||||
1 2
|
1 2
|
||||||
2 2
|
2 2
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -564,6 +561,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t7 ALL NULL NULL NULL NULL 2
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3
|
||||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t8 ALL NULL NULL NULL NULL 2
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)))
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -613,7 +612,7 @@ a b a b a b a b a b a b a b a b a b
|
||||||
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 0 2
|
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 0 2
|
||||||
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 1 2
|
1 2 3 2 5 3 NULL NULL NULL NULL 2 2 6 2 2 2 1 2
|
||||||
1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL
|
1 2 3 2 5 3 NULL NULL NULL NULL 3 3 NULL NULL NULL NULL NULL NULL
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -660,6 +659,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b`,test.t9.a AS `a`,test.t9.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) join test.t9 where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)) and ((test.t3.a < 5) or isnull(test.t3.c)) and ((test.t3.b = test.t4.b) or isnull(test.t3.c) or isnull(test.t4.c)) and ((test.t5.a >= 2) or isnull(test.t5.c)) and ((test.t6.a >= 4) or isnull(test.t6.c)) and ((test.t7.a <= 2) or isnull(test.t7.c)) and ((test.t8.a < 1) or isnull(test.t8.c)) and ((test.t8.b = test.t9.b) or isnull(test.t8.c)) and (test.t9.a = 1))
|
||||||
SELECT t9.a,t9.b
|
SELECT t9.a,t9.b
|
||||||
FROM t9;
|
FROM t9;
|
||||||
a b
|
a b
|
||||||
|
@ -844,8 +845,22 @@ a b a b a b a b
|
||||||
1 3 5 3 2 2 NULL NULL
|
1 3 5 3 2 2 NULL NULL
|
||||||
2 2 5 3 1 2 NULL NULL
|
2 2 5 3 1 2 NULL NULL
|
||||||
2 2 5 3 2 2 NULL NULL
|
2 2 5 3 2 2 NULL NULL
|
||||||
|
EXPLAIN EXTENDED
|
||||||
|
SELECT t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
|
FROM t1, t3, t4
|
||||||
|
RIGHT JOIN
|
||||||
|
t2
|
||||||
|
ON t3.a=1 AND t2.b=t4.b
|
||||||
|
WHERE t1.a <= 2;
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t3 ALL NULL NULL NULL NULL 2
|
||||||
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
1 SIMPLE t2 ALL NULL NULL NULL NULL 3
|
||||||
|
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b` from test.t1 join test.t3 join test.t2 left join test.t4 on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) where (test.t1.a <= 2)
|
||||||
CREATE INDEX idx_b ON t2(b);
|
CREATE INDEX idx_b ON t2(b);
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t3,t4
|
FROM t3,t4
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -856,6 +871,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
1 SIMPLE t4 ALL NULL NULL NULL NULL 2
|
||||||
1 SIMPLE t2 ref idx_b idx_b 5 test.t3.b 2
|
1 SIMPLE t2 ref idx_b idx_b 5 test.t3.b 2
|
||||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b` from test.t3 join test.t4 left join (test.t1 join test.t2) on(((test.t3.a = 1) and (test.t3.b = test.t2.b) and (test.t2.b = test.t4.b))) where 1
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t3,t4
|
FROM t3,t4
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -870,7 +887,7 @@ NULL NULL 2 2 3 2
|
||||||
4 2 1 2 4 2
|
4 2 1 2 4 2
|
||||||
4 2 1 2 4 2
|
4 2 1 2 4 2
|
||||||
NULL NULL 2 2 4 2
|
NULL NULL 2 2 4 2
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -917,9 +934,11 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b`,test.t9.a AS `a`,test.t9.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) join test.t9 where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)) and ((test.t3.a < 5) or isnull(test.t3.c)) and ((test.t3.b = test.t4.b) or isnull(test.t3.c) or isnull(test.t4.c)) and ((test.t5.a >= 2) or isnull(test.t5.c)) and ((test.t6.a >= 4) or isnull(test.t6.c)) and ((test.t7.a <= 2) or isnull(test.t7.c)) and ((test.t8.a < 1) or isnull(test.t8.c)) and ((test.t8.b = test.t9.b) or isnull(test.t8.c)) and (test.t9.a = 1))
|
||||||
CREATE INDEX idx_b ON t4(b);
|
CREATE INDEX idx_b ON t4(b);
|
||||||
CREATE INDEX idx_b ON t5(b);
|
CREATE INDEX idx_b ON t5(b);
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -966,8 +985,10 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
||||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b`,test.t9.a AS `a`,test.t9.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) join test.t9 where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)) and ((test.t3.a < 5) or isnull(test.t3.c)) and ((test.t3.b = test.t4.b) or isnull(test.t3.c) or isnull(test.t4.c)) and ((test.t5.a >= 2) or isnull(test.t5.c)) and ((test.t6.a >= 4) or isnull(test.t6.c)) and ((test.t7.a <= 2) or isnull(test.t7.c)) and ((test.t8.a < 1) or isnull(test.t8.c)) and ((test.t8.b = test.t9.b) or isnull(test.t8.c)) and (test.t9.a = 1))
|
||||||
CREATE INDEX idx_b ON t8(b);
|
CREATE INDEX idx_b ON t8(b);
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -1014,9 +1035,11 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t7.b 2 Using where
|
1 SIMPLE t8 ref idx_b idx_b 5 test.t7.b 2 Using where
|
||||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b`,test.t9.a AS `a`,test.t9.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) join test.t9 where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)) and ((test.t3.a < 5) or isnull(test.t3.c)) and ((test.t3.b = test.t4.b) or isnull(test.t3.c) or isnull(test.t4.c)) and ((test.t5.a >= 2) or isnull(test.t5.c)) and ((test.t6.a >= 4) or isnull(test.t6.c)) and ((test.t7.a <= 2) or isnull(test.t7.c)) and ((test.t8.a < 1) or isnull(test.t8.c)) and ((test.t8.b = test.t9.b) or isnull(test.t8.c)) and (test.t9.a = 1))
|
||||||
CREATE INDEX idx_b ON t1(b);
|
CREATE INDEX idx_b ON t1(b);
|
||||||
CREATE INDEX idx_a ON t0(a);
|
CREATE INDEX idx_a ON t0(a);
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -1063,6 +1086,8 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t7.b 2 Using where
|
1 SIMPLE t8 ref idx_b idx_b 5 test.t7.b 2 Using where
|
||||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
Warnings:
|
||||||
|
Note 1003 select test.t0.a AS `a`,test.t0.b AS `b`,test.t1.a AS `a`,test.t1.b AS `b`,test.t2.a AS `a`,test.t2.b AS `b`,test.t3.a AS `a`,test.t3.b AS `b`,test.t4.a AS `a`,test.t4.b AS `b`,test.t5.a AS `a`,test.t5.b AS `b`,test.t6.a AS `a`,test.t6.b AS `b`,test.t7.a AS `a`,test.t7.b AS `b`,test.t8.a AS `a`,test.t8.b AS `b`,test.t9.a AS `a`,test.t9.b AS `b` from test.t0 join test.t1 left join (test.t2 left join (test.t3 join test.t4) on(((test.t3.a = 1) and (test.t2.b = test.t4.b))) join test.t5 left join (test.t6 join test.t7 left join test.t8 on(((test.t7.b = test.t8.b) and (test.t6.b < 10)))) on(((test.t6.b >= 2) and (test.t5.b = test.t7.b)))) on((((test.t3.b = 2) or isnull(test.t3.c)) and ((test.t6.b = 2) or isnull(test.t6.c)) and ((test.t1.b = test.t5.b) or isnull(test.t3.c) or isnull(test.t6.c) or isnull(test.t8.c)) and (test.t1.a <> 2))) join test.t9 where ((test.t0.a = 1) and (test.t0.b = test.t1.b) and ((test.t2.a >= 4) or isnull(test.t2.c)) and ((test.t3.a < 5) or isnull(test.t3.c)) and ((test.t3.b = test.t4.b) or isnull(test.t3.c) or isnull(test.t4.c)) and ((test.t5.a >= 2) or isnull(test.t5.c)) and ((test.t6.a >= 4) or isnull(test.t6.c)) and ((test.t7.a <= 2) or isnull(test.t7.c)) and ((test.t8.a < 1) or isnull(test.t8.c)) and ((test.t8.b = test.t9.b) or isnull(test.t8.c)) and (test.t9.a = 1))
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
DROP TABLE IF EXISTS t0,t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
DROP TABLE IF EXISTS t0,t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
CREATE TABLE t0 (a int, b int, c int);
|
CREATE TABLE t0 (a int, b int, c int);
|
||||||
CREATE TABLE t1 (a int, b int, c int);
|
CREATE TABLE t1 (a int, b int, c int);
|
||||||
|
@ -49,7 +50,7 @@ SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
(t3, t4)
|
(t3, t4)
|
||||||
ON t3.a=1 AND t2.b=t4.b;
|
ON t3.a=1 AND t2.b=t4.b;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -83,7 +84,7 @@ SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
(t3, t4, t5)
|
(t3, t4, t5)
|
||||||
ON t2.b=t4.b;
|
ON t2.b=t4.b;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -98,7 +99,7 @@ SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
ON t2.b=t4.b
|
ON t2.b=t4.b
|
||||||
WHERE t3.a>1 OR t3.c IS NULL;
|
WHERE t3.a>1 OR t3.c IS NULL;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,t5.a,t5.b
|
||||||
FROM t2
|
FROM t2
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -127,7 +128,7 @@ SELECT t6.a,t6.b,t7.a,t7.b
|
||||||
SELECT t8.a,t8.b
|
SELECT t8.a,t8.b
|
||||||
FROM t8;
|
FROM t8;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t6,
|
FROM t6,
|
||||||
t7
|
t7
|
||||||
|
@ -267,7 +268,7 @@ SELECT t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
SELECT t0.a,t0.b
|
SELECT t0.a,t0.b
|
||||||
FROM t0;
|
FROM t0;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -322,7 +323,7 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t0.b=t1.b AND
|
t0.b=t1.b AND
|
||||||
(t2.a >= 4 OR t2.c IS NULL);
|
(t2.a >= 4 OR t2.c IS NULL);
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -457,9 +458,17 @@ SELECT t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
ON t3.a=1 AND t2.b=t4.b
|
ON t3.a=1 AND t2.b=t4.b
|
||||||
WHERE t1.a <= 2;
|
WHERE t1.a <= 2;
|
||||||
|
|
||||||
|
EXPLAIN EXTENDED
|
||||||
|
SELECT t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
|
FROM t1, t3, t4
|
||||||
|
RIGHT JOIN
|
||||||
|
t2
|
||||||
|
ON t3.a=1 AND t2.b=t4.b
|
||||||
|
WHERE t1.a <= 2;
|
||||||
|
|
||||||
CREATE INDEX idx_b ON t2(b);
|
CREATE INDEX idx_b ON t2(b);
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
FROM t3,t4
|
FROM t3,t4
|
||||||
LEFT JOIN
|
LEFT JOIN
|
||||||
|
@ -472,7 +481,7 @@ SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||||
(t1,t2)
|
(t1,t2)
|
||||||
ON t3.a=1 AND t3.b=t2.b AND t2.b=t4.b;
|
ON t3.a=1 AND t3.b=t2.b AND t2.b=t4.b;
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -512,7 +521,7 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
CREATE INDEX idx_b ON t4(b);
|
CREATE INDEX idx_b ON t4(b);
|
||||||
CREATE INDEX idx_b ON t5(b);
|
CREATE INDEX idx_b ON t5(b);
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -551,7 +560,7 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
|
|
||||||
CREATE INDEX idx_b ON t8(b);
|
CREATE INDEX idx_b ON t8(b);
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
@ -591,7 +600,7 @@ SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
CREATE INDEX idx_b ON t1(b);
|
CREATE INDEX idx_b ON t1(b);
|
||||||
CREATE INDEX idx_a ON t0(a);
|
CREATE INDEX idx_a ON t0(a);
|
||||||
|
|
||||||
EXPLAIN
|
EXPLAIN EXTENDED
|
||||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||||
FROM t0,t1
|
FROM t0,t1
|
||||||
|
|
|
@ -417,7 +417,7 @@ public:
|
||||||
List<Item_func_match> ftfunc_list_alloc;
|
List<Item_func_match> ftfunc_list_alloc;
|
||||||
JOIN *join; /* after JOIN::prepare it is pointer to corresponding JOIN */
|
JOIN *join; /* after JOIN::prepare it is pointer to corresponding JOIN */
|
||||||
List<TABLE_LIST> top_join_list; /* join list of the top level */
|
List<TABLE_LIST> top_join_list; /* join list of the top level */
|
||||||
List<TABLE_LIST> *join_list; /* list for the currently parsed join */
|
List<TABLE_LIST> *join_list; /* list for the currently parsed join */
|
||||||
TABLE_LIST *embedding; /* table embedding to the above list */
|
TABLE_LIST *embedding; /* table embedding to the above list */
|
||||||
const char *type; /* type of select for EXPLAIN */
|
const char *type; /* type of select for EXPLAIN */
|
||||||
|
|
||||||
|
|
|
@ -11178,6 +11178,88 @@ int mysql_explain_union(THD *thd, SELECT_LEX_UNIT *unit, select_result *result)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Print joins from the FROM clause
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
print_join()
|
||||||
|
thd thread handler
|
||||||
|
str string where table should bbe printed
|
||||||
|
tables list of tables in join
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void print_join(THD *thd, String *str, List<TABLE_LIST> *tables)
|
||||||
|
{
|
||||||
|
/* List is reversed => we should reverse it before using */
|
||||||
|
List_iterator_fast<TABLE_LIST> ti(*tables);
|
||||||
|
TABLE_LIST **table= (TABLE_LIST **)thd->alloc(sizeof(TABLE_LIST*) *
|
||||||
|
tables->elements);
|
||||||
|
if (table == 0)
|
||||||
|
return; // out of memory
|
||||||
|
|
||||||
|
for (TABLE_LIST **t= table + (tables->elements - 1); t >= table; t--)
|
||||||
|
*t= ti++;
|
||||||
|
|
||||||
|
DBUG_ASSERT(tables->elements >= 1);
|
||||||
|
(*table)->print(thd, str);
|
||||||
|
|
||||||
|
TABLE_LIST **end= table + tables->elements;
|
||||||
|
for(TABLE_LIST **tbl= table + 1; tbl < end; tbl++)
|
||||||
|
{
|
||||||
|
TABLE_LIST *curr= *tbl;
|
||||||
|
if (curr->outer_join)
|
||||||
|
str->append(" left join ", 11); // MySQL converg right to left joins
|
||||||
|
else if (curr->straight)
|
||||||
|
str->append(" straight_join ", 15);
|
||||||
|
else
|
||||||
|
str->append(" join ", 6);
|
||||||
|
curr->print(thd, str);
|
||||||
|
if (curr->on_expr)
|
||||||
|
{
|
||||||
|
str->append(" on(", 4);
|
||||||
|
curr->on_expr->print(str);
|
||||||
|
str->append(')');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Print table as it should be in join list
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
st_table_list::print();
|
||||||
|
str string where table should bbe printed
|
||||||
|
*/
|
||||||
|
|
||||||
|
void st_table_list::print(THD *thd, String *str)
|
||||||
|
{
|
||||||
|
if (nested_join)
|
||||||
|
{
|
||||||
|
str->append('(');
|
||||||
|
print_join(thd, str, &nested_join->join_list);
|
||||||
|
str->append(')');
|
||||||
|
}
|
||||||
|
else if (derived)
|
||||||
|
{
|
||||||
|
str->append('(');
|
||||||
|
derived->print(str);
|
||||||
|
str->append(") ", 2);
|
||||||
|
str->append(alias);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
str->append(db);
|
||||||
|
str->append('.');
|
||||||
|
str->append(real_name);
|
||||||
|
if (my_strcasecmp(table_alias_charset, real_name, alias))
|
||||||
|
{
|
||||||
|
str->append(' ');
|
||||||
|
str->append(alias);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void st_select_lex::print(THD *thd, String *str)
|
void st_select_lex::print(THD *thd, String *str)
|
||||||
{
|
{
|
||||||
if (!thd)
|
if (!thd)
|
||||||
|
@ -11226,92 +11308,8 @@ void st_select_lex::print(THD *thd, String *str)
|
||||||
if (table_list.elements)
|
if (table_list.elements)
|
||||||
{
|
{
|
||||||
str->append(" from ", 6);
|
str->append(" from ", 6);
|
||||||
for (TABLE_LIST *table= (TABLE_LIST *) table_list.first;
|
/* go through join tree */
|
||||||
table;
|
print_join(thd, str, &top_join_list);
|
||||||
table= table->next)
|
|
||||||
{
|
|
||||||
TABLE_LIST *embedded=table;
|
|
||||||
TABLE_LIST *embedding= table->embedding;
|
|
||||||
while (embedding)
|
|
||||||
{
|
|
||||||
TABLE_LIST *next;
|
|
||||||
NESTED_JOIN *nested_join= table->embedding->nested_join;
|
|
||||||
List_iterator_fast<TABLE_LIST> it(nested_join->join_list);
|
|
||||||
TABLE_LIST *tab= it++;
|
|
||||||
while ((next= it++))
|
|
||||||
tab= next;
|
|
||||||
if (tab != embedded)
|
|
||||||
break;
|
|
||||||
str->append('(');
|
|
||||||
if (embedded->outer_join & JOIN_TYPE_RIGHT)
|
|
||||||
str->append(" right join ", 12);
|
|
||||||
else if (embedded->outer_join & JOIN_TYPE_LEFT)
|
|
||||||
str->append(" left join ", 11);
|
|
||||||
else if (embedded->straight)
|
|
||||||
str->append(" straight_join ", 15);
|
|
||||||
else
|
|
||||||
str->append(" join ", 6);
|
|
||||||
embedded= embedding;
|
|
||||||
embedding= embedding->embedding;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (table->derived)
|
|
||||||
{
|
|
||||||
str->append('(');
|
|
||||||
table->derived->print(str);
|
|
||||||
str->append(") ");
|
|
||||||
str->append(table->alias);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
str->append(table->db);
|
|
||||||
str->append('.');
|
|
||||||
str->append(table->real_name);
|
|
||||||
if (my_strcasecmp(table_alias_charset, table->real_name, table->alias))
|
|
||||||
{
|
|
||||||
str->append(' ');
|
|
||||||
str->append(table->alias);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (table->on_expr)
|
|
||||||
{
|
|
||||||
str->append(" on(", 4);
|
|
||||||
table->on_expr->print(str);
|
|
||||||
str->append(')');
|
|
||||||
}
|
|
||||||
|
|
||||||
TABLE_LIST *next_table;
|
|
||||||
if ((next_table= table->next))
|
|
||||||
{
|
|
||||||
if (next_table->outer_join & JOIN_TYPE_RIGHT)
|
|
||||||
str->append(" right join ", 12);
|
|
||||||
else if (next_table->outer_join & JOIN_TYPE_LEFT)
|
|
||||||
str->append(" left join ", 11);
|
|
||||||
else if (next_table->straight)
|
|
||||||
str->append(" straight_join ", 15);
|
|
||||||
else
|
|
||||||
str->append(" join ", 6);
|
|
||||||
}
|
|
||||||
|
|
||||||
embedded=table;
|
|
||||||
embedding= table->embedding;
|
|
||||||
while (embedding)
|
|
||||||
{
|
|
||||||
NESTED_JOIN *nested_join= table->embedding->nested_join;
|
|
||||||
if (nested_join->join_list.head() != embedded)
|
|
||||||
break;
|
|
||||||
str->append(')');
|
|
||||||
if (embedding->on_expr)
|
|
||||||
{
|
|
||||||
str->append(" on(", 4);
|
|
||||||
embedding->on_expr->print(str);
|
|
||||||
str->append(')');
|
|
||||||
}
|
|
||||||
embedded= embedding;
|
|
||||||
embedding= embedding->embedding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Where
|
// Where
|
||||||
|
|
14
sql/table.h
14
sql/table.h
|
@ -173,11 +173,11 @@ typedef struct st_table_list
|
||||||
{
|
{
|
||||||
struct st_table_list *next;
|
struct st_table_list *next;
|
||||||
char *db, *alias, *real_name;
|
char *db, *alias, *real_name;
|
||||||
char *option; /* Used by cache index */
|
char *option; /* Used by cache index */
|
||||||
Item *on_expr; /* Used with outer join */
|
Item *on_expr; /* Used with outer join */
|
||||||
struct st_table_list *natural_join; /* natural join on this table*/
|
struct st_table_list *natural_join; /* natural join on this table*/
|
||||||
/* ... join ... USE INDEX ... IGNORE INDEX */
|
/* ... join ... USE INDEX ... IGNORE INDEX */
|
||||||
List<String> *use_index, *ignore_index;
|
List<String> *use_index, *ignore_index;
|
||||||
TABLE *table; /* opened table */
|
TABLE *table; /* opened table */
|
||||||
st_table_list *table_list; /* pointer to node of list of all tables */
|
st_table_list *table_list; /* pointer to node of list of all tables */
|
||||||
class st_select_lex_unit *derived; /* SELECT_LEX_UNIT of derived table */
|
class st_select_lex_unit *derived; /* SELECT_LEX_UNIT of derived table */
|
||||||
|
@ -191,24 +191,26 @@ typedef struct st_table_list
|
||||||
bool force_index; /* prefer index over table scan */
|
bool force_index; /* prefer index over table scan */
|
||||||
bool ignore_leaves; /* preload only non-leaf nodes */
|
bool ignore_leaves; /* preload only non-leaf nodes */
|
||||||
table_map dep_tables; /* tables the table depends on */
|
table_map dep_tables; /* tables the table depends on */
|
||||||
table_map on_expr_dep_tables; /* tables on expression depends on */
|
table_map on_expr_dep_tables; /* tables on expression depends on */
|
||||||
struct st_nested_join *nested_join; /* if the element is a nested join */
|
struct st_nested_join *nested_join; /* if the element is a nested join */
|
||||||
st_table_list *embedding; /* nested join containing the table */
|
st_table_list *embedding; /* nested join containing the table */
|
||||||
List<struct st_table_list> *join_list;/* join list the table belongs to */
|
List<struct st_table_list> *join_list;/* join list the table belongs to */
|
||||||
bool cacheable_table; /* stop PS caching */
|
bool cacheable_table; /* stop PS caching */
|
||||||
/* used in multi-upd privelege check */
|
/* used in multi-upd privelege check */
|
||||||
bool table_in_update_from_clause;
|
bool table_in_update_from_clause;
|
||||||
|
|
||||||
|
void print(THD *thd, String *str);
|
||||||
} TABLE_LIST;
|
} TABLE_LIST;
|
||||||
|
|
||||||
typedef struct st_nested_join
|
typedef struct st_nested_join
|
||||||
{
|
{
|
||||||
List<TABLE_LIST> join_list; /* list of elements in the nested join */
|
List<TABLE_LIST> join_list; /* list of elements in the nested join */
|
||||||
table_map used_tables; /* bitmap of tables in the nested join */
|
table_map used_tables; /* bitmap of tables in the nested join */
|
||||||
table_map not_null_tables; /* tables that rejects nulls */
|
table_map not_null_tables; /* tables that rejects nulls */
|
||||||
struct st_join_table *first_nested;/* the first nested table in the plan */
|
struct st_join_table *first_nested;/* the first nested table in the plan */
|
||||||
uint counter; /* to count tables in the nested join */
|
uint counter; /* to count tables in the nested join */
|
||||||
} NESTED_JOIN;
|
} NESTED_JOIN;
|
||||||
|
|
||||||
typedef struct st_changed_table_list
|
typedef struct st_changed_table_list
|
||||||
{
|
{
|
||||||
struct st_changed_table_list *next;
|
struct st_changed_table_list *next;
|
||||||
|
|
Loading…
Reference in a new issue