summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ps.result21
-rw-r--r--mysql-test/suite/plugins/t/unix_socket.test13
-rw-r--r--mysql-test/t/ps.test23
-rw-r--r--sql/sql_derived.cc2
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;