diff options
author | Igor Babaev <igor@askmonty.org> | 2010-11-13 06:13:34 -0800 |
---|---|---|
committer | Igor Babaev <igor@askmonty.org> | 2010-11-13 06:13:34 -0800 |
commit | 4e5911733ae55231f614f86d072b1c2266cd1afd (patch) | |
tree | 98ea39c457ee7e9fe587e10a1cf8d503da876772 /mysql-test/t/join_cache.test | |
parent | 46fe431818ed2cb725b0c4e7fafd97f263cb1109 (diff) | |
download | mariadb-git-4e5911733ae55231f614f86d072b1c2266cd1afd.tar.gz |
Fixed LP bug #674431.
A non-incremental join buffer cannot be used for inner tables of nested
outer joins. That's why when join_cache_level is set to 7 it must
be downgraded to level 6 for the inner tables of nested outer joins.
For the same reason with join_cache_level set to 3 no join buffer is
used for the inner tables of outer joins (we could downgrade it to
level 2, but this level does not support ref access).
Diffstat (limited to 'mysql-test/t/join_cache.test')
-rw-r--r-- | mysql-test/t/join_cache.test | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/mysql-test/t/join_cache.test b/mysql-test/t/join_cache.test index ea3cca1ed9d..382ea88b281 100644 --- a/mysql-test/t/join_cache.test +++ b/mysql-test/t/join_cache.test @@ -2448,5 +2448,52 @@ SET SESSION join_cache_level = DEFAULT; DROP TABLE t1,t2; +--echo # +--echo # Bug #674431: nested outer join when join_cache_level is set to 7 +--echo # + +CREATE TABLE t1 (a int, b varchar(32)) ; +INSERT INTO t1 VALUES (5,'h'), (NULL,'j'); +CREATE TABLE t2 (a int, b varchar(32), c int) ; +INSERT INTO t2 VALUES (5,'h',100), (NULL,'j',200); +CREATE TABLE t3 (a int, b varchar(32), INDEX idx(b)); +INSERT INTO t3 VALUES (77,'h'), (88,'g'); + +SET SESSION optimizer_switch = 'outer_join_with_cache=on'; +SET SESSION join_cache_level = 7; +SELECT t3.a + FROM t1 LEFT JOIN + (t2 LEFT OUTER JOIN t3 ON t2.b = t3.b) ON t2.a = t1.b + WHERE t3.a BETWEEN 3 AND 11 OR t1.a <= t2.c; + +SET SESSION optimizer_switch = 'outer_join_with_cache=off'; +SET SESSION join_cache_level = DEFAULT; + +DROP TABLE t1,t2,t3; + +--echo # +--echo # Bug #52540: nested outer join when join_cache_level is set to 3 +--echo # + +CREATE TABLE t1 (a int); +INSERT INTO t1 VALUES (2); +CREATE TABLE t2 (a varchar(10)); +INSERT INTO t2 VALUES ('f'),('x'); +CREATE TABLE t3 (pk int(11) PRIMARY KEY); +INSERT INTO t3 VALUES (2); +CREATE TABLE t4 (a varchar(10)); + +SET SESSION optimizer_switch = 'outer_join_with_cache=on'; +SET SESSION join_cache_level = 3; + +SELECT * + FROM t2 LEFT JOIN + ((t1 JOIN t3 ON t1.a = t3.pk) LEFT JOIN t4 ON 1) ON 1; + +SET SESSION optimizer_switch = 'outer_join_with_cache=off'; +SET SESSION join_cache_level = DEFAULT; + +DROP TABLE t1,t2,t3,t4; + # this must be the last command in the file set @@optimizer_switch=@save_optimizer_switch; |