summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Babaev <igor@askmonty.org>2011-10-27 09:14:45 -0700
committerIgor Babaev <igor@askmonty.org>2011-10-27 09:14:45 -0700
commitaaa47b88a6c3e15d1642c440f692360c698d6cd8 (patch)
treebb4350bc2790d79a13e8c0afd0eaeddc2dde785b
parent08e9e6a790ea6ba8bbe6fa5c5bd54677f4add072 (diff)
parent2a3858d9d0bd0cccc6609388ff89096441193d5c (diff)
downloadmariadb-git-aaa47b88a6c3e15d1642c440f692360c698d6cd8.tar.gz
Merge.
-rw-r--r--mysql-test/r/derived_view.result23
-rw-r--r--mysql-test/t/derived_view.test24
-rw-r--r--sql/item.cc6
3 files changed, 52 insertions, 1 deletions
diff --git a/mysql-test/r/derived_view.result b/mysql-test/r/derived_view.result
index cfd98a78601..25683f9c16c 100644
--- a/mysql-test/r/derived_view.result
+++ b/mysql-test/r/derived_view.result
@@ -1764,4 +1764,27 @@ x
set optimizer_switch= @save_optimizer_switch;
DROP VIEW v3;
DROP TABLE t1,t2,t3;
+#
+# Bug #874035: view as an inner table of a materialized derived
+#
+CREATE TABLE t2 (a int NOT NULL);
+INSERT INTO t2 VALUES (7), (4);
+CREATE TABLE t1 (b int NOT NULL);
+INSERT INTO t1 VALUES (5), (7);
+CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
+SET SESSION optimizer_switch='derived_merge=off';
+PREPARE st1 FROM
+'SELECT * FROM (SELECT * FROM t2 LEFT JOIN v1 ON t2.a = v1.b) AS t';
+EXECUTE st1;
+a b
+7 7
+4 NULL
+EXECUTE st1;
+a b
+7 7
+4 NULL
+DEALLOCATE PREPARE st1;
+DROP VIEW v1;
+DROP TABLE t1,t2;
+SET SESSION optimizer_switch='derived_merge=on';
set optimizer_switch=@exit_optimizer_switch;
diff --git a/mysql-test/t/derived_view.test b/mysql-test/t/derived_view.test
index 5ff945c094f..34b01210e1d 100644
--- a/mysql-test/t/derived_view.test
+++ b/mysql-test/t/derived_view.test
@@ -1166,5 +1166,29 @@ set optimizer_switch= @save_optimizer_switch;
DROP VIEW v3;
DROP TABLE t1,t2,t3;
+--echo #
+--echo # Bug #874035: view as an inner table of a materialized derived
+--echo #
+
+CREATE TABLE t2 (a int NOT NULL);
+INSERT INTO t2 VALUES (7), (4);
+
+CREATE TABLE t1 (b int NOT NULL);
+INSERT INTO t1 VALUES (5), (7);
+CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1;
+
+SET SESSION optimizer_switch='derived_merge=off';
+
+PREPARE st1 FROM
+'SELECT * FROM (SELECT * FROM t2 LEFT JOIN v1 ON t2.a = v1.b) AS t';
+EXECUTE st1;
+EXECUTE st1;
+DEALLOCATE PREPARE st1;
+
+DROP VIEW v1;
+DROP TABLE t1,t2;
+
+SET SESSION optimizer_switch='derived_merge=on';
+
# The following command must be the last one the file
set optimizer_switch=@exit_optimizer_switch;
diff --git a/sql/item.cc b/sql/item.cc
index f5ce0fbc7a7..2407de1bf30 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -7321,7 +7321,11 @@ bool Item_direct_view_ref::fix_fields(THD *thd, Item **reference)
((*ref)->fix_fields(thd, ref)))
return TRUE;
- return Item_direct_ref::fix_fields(thd, reference);
+ if (Item_direct_ref::fix_fields(thd, reference))
+ return TRUE;
+ if (view->table && view->table->maybe_null)
+ maybe_null= TRUE;
+ return FALSE;
}
/*