summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2016-03-03 17:42:15 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2016-03-03 17:42:15 +0100
commitf072d1672a067da09e7a5dc18d2c227992f0d672 (patch)
tree2d5fe3b9787c0ac24ae8428faf72d262afff61a9
parenta6c0c01cec43731df3c58b4fdb68d3ac18e6c699 (diff)
downloadmariadb-git-10.2-MDEV-3944.tar.gz
MDEV-9671 Wrong result upon select from a view with a FROM subquery10.2-MDEV-3944
do not take marker OIN_TYPE_OUTER as a LEFT JOIN on print
-rw-r--r--mysql-test/r/view.result23
-rw-r--r--mysql-test/t/view.test23
-rw-r--r--sql/sql_select.cc3
3 files changed, 48 insertions, 1 deletions
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index 449b095ad59..f8491581daa 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -6121,5 +6121,28 @@ ERROR HY000: The target table v2 of the UPDATE is not updatable
drop view v1, v2;
drop table t1;
#
+# MDEV-9671:Wrong result upon select from a view with a FROM subquery
+#
+CREATE TABLE t1 (i INT);
+INSERT INTO t1 VALUES (3),(2);
+CREATE TABLE t2 (j INT);
+INSERT INTO t2 VALUES (8),(3),(3);
+CREATE TABLE t3 (k INT);
+INSERT INTO t3 VALUES (1),(8);
+CREATE VIEW v1 AS SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
+show create view v1;
+View Create View character_set_client collation_connection
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `test`.`t1`.`i` AS `i`,`alias1`.`j` AS `j` from (`test`.`t1` left join (select `test`.`t2`.`j` AS `j` from (`test`.`t2` join `test`.`t3` on((`test`.`t3`.`k` = `test`.`t2`.`j`)))) `alias1` on((`test`.`t1`.`i` = `alias1`.`j`))) latin1 latin1_swedish_ci
+SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
+i j
+3 NULL
+2 NULL
+SELECT * FROM v1;
+i j
+3 NULL
+2 NULL
+DROP VIEW v1;
+DROP TABLE t1, t2, t3;
+#
# End of 10.2 tests
#
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index 1d85e21ded6..c3a9aec60fb 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -5909,6 +5909,29 @@ update v2 set s1=s1+1;
drop view v1, v2;
drop table t1;
+
+--echo #
+--echo # MDEV-9671:Wrong result upon select from a view with a FROM subquery
+--echo #
+CREATE TABLE t1 (i INT);
+INSERT INTO t1 VALUES (3),(2);
+
+CREATE TABLE t2 (j INT);
+INSERT INTO t2 VALUES (8),(3),(3);
+
+CREATE TABLE t3 (k INT);
+INSERT INTO t3 VALUES (1),(8);
+
+CREATE VIEW v1 AS SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
+
+show create view v1;
+
+SELECT * FROM t1 LEFT JOIN ( SELECT t2.* FROM t2 INNER JOIN t3 ON ( k = j ) ) AS alias1 ON ( i = j );
+
+SELECT * FROM v1;
+
+DROP VIEW v1;
+DROP TABLE t1, t2, t3;
--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 8c4e8812d72..c110057fc21 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -24466,7 +24466,8 @@ static void print_table_array(THD *thd,
continue;
}
- if (curr->outer_join)
+ /* JOIN_TYPE_OUTER is just a marker unrelated to real join */
+ if (curr->outer_join & (JOIN_TYPE_LEFT|JOIN_TYPE_RIGHT))
{
/* MySQL converts right to left joins */
str->append(STRING_WITH_LEN(" left join "));