diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2016-03-03 17:42:15 +0100 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2016-03-03 17:42:15 +0100 |
commit | f072d1672a067da09e7a5dc18d2c227992f0d672 (patch) | |
tree | 2d5fe3b9787c0ac24ae8428faf72d262afff61a9 | |
parent | a6c0c01cec43731df3c58b4fdb68d3ac18e6c699 (diff) | |
download | mariadb-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.result | 23 | ||||
-rw-r--r-- | mysql-test/t/view.test | 23 | ||||
-rw-r--r-- | sql/sql_select.cc | 3 |
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 ")); |