From 9fbbce857ccb64e64615b7bfb97c62a66f96c9ca Mon Sep 17 00:00:00 2001 From: Tim Starling Date: Mon, 8 Oct 2018 14:46:37 +1100 Subject: [PATCH] Fix guarding of MySQL's numRows() It can be true for successful write queries, not just false. f3a197e49b785 introduced a caller which calls numRows() on the return value of CREATE TEMPORARY TABLE queries, and it improved guarding of numRows() in the PostgreSQL and SQLite cases accordingly, but it neglected MySQL. Bug: T201900 Change-Id: I8ae754a2518d9e47b093c31c20d98daaba913513 --- includes/libs/rdbms/database/DatabaseMysqlBase.php | 2 +- includes/libs/rdbms/database/IDatabase.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/includes/libs/rdbms/database/DatabaseMysqlBase.php b/includes/libs/rdbms/database/DatabaseMysqlBase.php index 8d82965fb9..4bd607c021 100644 --- a/includes/libs/rdbms/database/DatabaseMysqlBase.php +++ b/includes/libs/rdbms/database/DatabaseMysqlBase.php @@ -359,7 +359,7 @@ abstract class DatabaseMysqlBase extends Database { $res = $res->result; } Wikimedia\suppressWarnings(); - $n = $res ? $this->mysqlNumRows( $res ) : 0; + $n = !is_bool( $res ) ? $this->mysqlNumRows( $res ) : 0; Wikimedia\restoreWarnings(); // Unfortunately, mysql_num_rows does not reset the last errno. diff --git a/includes/libs/rdbms/database/IDatabase.php b/includes/libs/rdbms/database/IDatabase.php index f38ddb804e..39fbbcaccd 100644 --- a/includes/libs/rdbms/database/IDatabase.php +++ b/includes/libs/rdbms/database/IDatabase.php @@ -394,7 +394,8 @@ interface IDatabase { public function fetchRow( $res ); /** - * Get the number of rows in a result object + * Get the number of rows in a query result. If the query did not return + * any rows (for example, if it was a write query), this returns zero. * * @param mixed $res A SQL result * @return int -- 2.20.1