Don't die horribly from sql.php when making INSERT/DELETE/UPDATE/CREATE TABLE/etc...
authorBrion Vibber <brion@users.mediawiki.org>
Fri, 1 Aug 2008 21:00:24 +0000 (21:00 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Fri, 1 Aug 2008 21:00:24 +0000 (21:00 +0000)
Code was attempting to handle this case by asking the result object for its db so we can ask for the affected row count -- obviously that doesn't do so good when the result is not an object.
Changed Database::sourceStream() to send itself as the second parameter to the result-handling callback, so the callback knows which DB to check.

includes/db/Database.php
maintenance/sql.php

index 885ede5..2e3e0ed 100644 (file)
@@ -2177,7 +2177,7 @@ class Database {
                                $cmd = $this->replaceVars( $cmd );
                                $res = $this->query( $cmd, __METHOD__ );
                                if ( $resultCallback ) {
-                                       call_user_func( $resultCallback, $res );
+                                       call_user_func( $resultCallback, $res, $this );
                                }
 
                                if ( false === $res ) {
index 38c995a..ab6546b 100644 (file)
@@ -53,15 +53,15 @@ class SqlPromptPrinter {
        }
 }
 
-function sqlPrintResult( $res ) {
+function sqlPrintResult( $res, $db ) {
        if ( !$res ) {
                // Do nothing
-       } elseif ( $res->numRows() ) {
+       } elseif ( is_object( $res ) && $res->numRows() ) {
                while ( $row = $res->fetchObject() ) {
                        print_r( $row );
                }
        } else {
-               $affected = $res->db->affectedRows();
+               $affected = $db->affectedRows();
                echo "Query OK, $affected row(s) affected\n";
        }
 }