summaryrefslogtreecommitdiff
path: root/mysql-test/t/join_cache.test
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2010-11-13 06:13:34 -0800
committerIgor Babaev <igor@askmonty.org>2010-11-13 06:13:34 -0800
commit4e5911733ae55231f614f86d072b1c2266cd1afd (patch)
tree98ea39c457ee7e9fe587e10a1cf8d503da876772 /mysql-test/t/join_cache.test
parent46fe431818ed2cb725b0c4e7fafd97f263cb1109 (diff)
downloadmariadb-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.test47
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;