From bc06a9b8b705b3069088e4dda5ee0a2b4c99e5e4 Mon Sep 17 00:00:00 2001 From: Kevin Israel Date: Sat, 7 Dec 2013 15:08:47 -0500 Subject: [PATCH] Abstract out mysql_field_type() call from DatabaseBase 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 b1cc3511fd7a, b2d64432ee02, and 00299ecb9515. Change-Id: I5d888f4dd344ecba15506023d35f6d2d6e24cfd8 --- includes/db/Database.php | 14 ----------- includes/db/DatabaseMysql.php | 4 +++ includes/db/DatabaseMysqlBase.php | 25 ++++++++++++++++++- includes/db/DatabaseMysqli.php | 5 ++++ .../includes/db/DatabaseMysqlBaseTest.php | 1 + 5 files changed, 34 insertions(+), 15 deletions(-) diff --git a/includes/db/Database.php b/includes/db/Database.php index fa125956e0..3388297e80 100644 --- a/includes/db/Database.php +++ b/includes/db/Database.php @@ -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 * diff --git a/includes/db/DatabaseMysql.php b/includes/db/DatabaseMysql.php index e253f91dd9..b600d94846 100644 --- a/includes/db/DatabaseMysql.php +++ b/includes/db/DatabaseMysql.php @@ -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 ); } diff --git a/includes/db/DatabaseMysqlBase.php b/includes/db/DatabaseMysqlBase.php index 61b9a17d3b..31253259f7 100644 --- a/includes/db/DatabaseMysqlBase.php +++ b/includes/db/DatabaseMysqlBase.php @@ -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 diff --git a/includes/db/DatabaseMysqli.php b/includes/db/DatabaseMysqli.php index 9f18da3bbe..6c83adb732 100644 --- a/includes/db/DatabaseMysqli.php +++ b/includes/db/DatabaseMysqli.php @@ -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 ); } diff --git a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php index 16dac9404c..516ce3a0d0 100644 --- a/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php +++ b/tests/phpunit/includes/db/DatabaseMysqlBaseTest.php @@ -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 ) {} -- 2.20.1