Fix guarding of MySQL's numRows()
authorTim Starling <tstarling@wikimedia.org>
Mon, 8 Oct 2018 03:46:37 +0000 (14:46 +1100)
committerTim Starling <tstarling@wikimedia.org>
Mon, 8 Oct 2018 07:27:05 +0000 (18:27 +1100)
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
includes/libs/rdbms/database/IDatabase.php

index 8d82965..4bd607c 100644 (file)
@@ -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.
index f38ddb8..39fbbca 100644 (file)
@@ -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