diff options
-rw-r--r-- | mysql-test/r/ps.result | 21 | ||||
-rw-r--r-- | mysql-test/suite/plugins/t/unix_socket.test | 13 | ||||
-rw-r--r-- | mysql-test/t/ps.test | 23 | ||||
-rw-r--r-- | sql/sql_derived.cc | 2 |
4 files changed, 58 insertions, 1 deletions
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result index fa15bcf5576..53d0a4f85db 100644 --- a/mysql-test/r/ps.result +++ b/mysql-test/r/ps.result @@ -4019,4 +4019,25 @@ c1 NULL 2 DROP TABLE t1,t2; +# +# MDEV-5369: Wrong result (0 instead of NULL) on 2nd execution of +# PS with LEFT JOIN, TEMPTABLE view +# +CREATE TABLE t1 (a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (0),(8); +CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=MyISAM; +CREATE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2; +SELECT SUM(pk) FROM t1 LEFT JOIN v2 ON a = pk; +SUM(pk) +NULL +PREPARE stmt FROM "SELECT SUM(pk) FROM t1 LEFT JOIN v2 ON a = pk"; +EXECUTE stmt; +SUM(pk) +NULL +EXECUTE stmt; +SUM(pk) +NULL +DEALLOCATE PREPARE stmt; +DROP VIEW v2; +DROP TABLE t1, t2; # End of 5.3 tests diff --git a/mysql-test/suite/plugins/t/unix_socket.test b/mysql-test/suite/plugins/t/unix_socket.test index 72106fab46d..5869e2717c9 100644 --- a/mysql-test/suite/plugins/t/unix_socket.test +++ b/mysql-test/suite/plugins/t/unix_socket.test @@ -3,10 +3,23 @@ # get .result differences from CURRENT_USER(). --source include/not_as_root.inc +# The previous check verifies that the user does not have root permissions. +# However in some cases tests are run under a user named 'root', +# even although this user does not have real root permissions. +# This test should be skipped in this case, since it does not expect +# that there are records in mysql.user where user=<username> +if ($USER=="root") { + skip Cannot be run by user named 'root' even if it does not have all privileges; +} + if (!$AUTH_SOCKET_SO) { skip No auth_socket plugin; } +if (!$USER) { + skip USER variable is undefined; +} + let $plugindir=`SELECT @@global.plugin_dir`; eval install plugin unix_socket soname '$AUTH_SOCKET_SO'; diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test index 5f4c815a192..4200f7435fb 100644 --- a/mysql-test/t/ps.test +++ b/mysql-test/t/ps.test @@ -3594,4 +3594,27 @@ EXECUTE stmt; DROP TABLE t1,t2; + +--echo # +--echo # MDEV-5369: Wrong result (0 instead of NULL) on 2nd execution of +--echo # PS with LEFT JOIN, TEMPTABLE view +--echo # + + +CREATE TABLE t1 (a INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (0),(8); + +CREATE TABLE t2 (pk INT PRIMARY KEY) ENGINE=MyISAM; +CREATE ALGORITHM=TEMPTABLE VIEW v2 AS SELECT * FROM t2; + +SELECT SUM(pk) FROM t1 LEFT JOIN v2 ON a = pk; + +PREPARE stmt FROM "SELECT SUM(pk) FROM t1 LEFT JOIN v2 ON a = pk"; +EXECUTE stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +DROP VIEW v2; +DROP TABLE t1, t2; + --echo # End of 5.3 tests diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index f09c585fa79..90dd2483a44 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -625,7 +625,7 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *derived) if ((res= sl->handle_derived(lex, DT_PREPARE))) goto exit; - if (derived->outer_join) + if (derived->outer_join && sl->first_cond_optimization) { /* Mark that table is part of OUTER JOIN and fields may be NULL */ for (TABLE_LIST *cursor= (TABLE_LIST*) sl->table_list.first; |