Abstract out mysql_field_type() call from DatabaseBase
authorKevin Israel <pleasestand@live.com>
Sat, 7 Dec 2013 20:08:47 +0000 (15:08 -0500)
committerIAlex <codereview@emsenhuber.ch>
Sun, 15 Dec 2013 18:40:50 +0000 (18:40 +0000)
DatabaseMysqlBase::fieldType() is used in the maintenance script
convertLinks.php for upgrading from MediaWiki 1.2 or earlier. This
script was failing when the mysqli extension was enabled.

Follows-up b1cc3511fd7ab2d64432ee02, and 00299ecb9515.

Change-Id: I5d888f4dd344ecba15506023d35f6d2d6e24cfd8

includes/db/Database.php
includes/db/DatabaseMysql.php
includes/db/DatabaseMysqlBase.php
includes/db/DatabaseMysqli.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php

index fa12595..3388297 100644 (file)
@@ -1762,20 +1762,6 @@ abstract class DatabaseBase implements IDatabase, DatabaseType {
                return (bool)$res;
        }
 
-       /**
-        * mysql_field_type() wrapper
-        * @param $res
-        * @param $index
-        * @return string
-        */
-       public function fieldType( $res, $index ) {
-               if ( $res instanceof ResultWrapper ) {
-                       $res = $res->result;
-               }
-
-               return mysql_field_type( $res, $index );
-       }
-
        /**
         * Determines if a given index is unique
         *
index e253f91..b600d94 100644 (file)
@@ -171,6 +171,10 @@ class DatabaseMysql extends DatabaseMysqlBase {
                return mysql_field_name( $res, $n );
        }
 
+       protected function mysqlFieldType( $res, $n ) {
+               return mysql_field_type( $res, $n );
+       }
+
        protected function mysqlDataSeek( $res, $row ) {
                return mysql_data_seek( $res, $row );
        }
index 61b9a17..3125325 100644 (file)
@@ -302,7 +302,7 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
 
        /**
         * @param $res ResultWrapper
-        * @param $n string
+        * @param $n int
         * @return string
         */
        function fieldName( $res, $n ) {
@@ -322,6 +322,29 @@ abstract class DatabaseMysqlBase extends DatabaseBase {
         */
        abstract protected function mysqlFieldName( $res, $n );
 
+       /**
+        * mysql_field_type() wrapper
+        * @param $res
+        * @param $n int
+        * @return string
+        */
+       public function fieldType( $res, $n ) {
+               if ( $res instanceof ResultWrapper ) {
+                       $res = $res->result;
+               }
+
+               return $this->mysqlFieldType( $res, $n );
+       }
+
+       /**
+        * Get the type of the specified field in a result
+        *
+        * @param $res Raw result
+        * @param $n int
+        * @return string
+        */
+       abstract protected function mysqlFieldType( $res, $n );
+
        /**
         * @param $res ResultWrapper
         * @param $row
index 9f18da3..6c83adb 100644 (file)
@@ -188,6 +188,11 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                return $field->name;
        }
 
+       protected function mysqlFieldType( $res, $n ) {
+               $field = $res->fetch_field_direct( $n );
+               return $field->type;
+       }
+
        protected function mysqlDataSeek( $res, $row ) {
                return $res->data_seek( $row );
        }
index 16dac94..516ce3a 100644 (file)
@@ -44,6 +44,7 @@ class FakeDatabaseMysqlBase extends DatabaseMysqlBase {
        protected function mysqlNumRows( $res ) {}
        protected function mysqlNumFields( $res ) {}
        protected function mysqlFieldName( $res, $n ) {}
+       protected function mysqlFieldType( $res, $n ) {}
        protected function mysqlDataSeek( $res, $row ) {}
        protected function mysqlError( $conn = null ) {}
        protected function mysqlFetchField( $res, $n ) {}