From 63601400e476c6cf43d985f3e7b9864681695ed4 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Fri, 18 Jan 2013 16:46:04 +0100 Subject: Update to MediaWiki 1.20.2 this update includes: * adjusted Arch Linux skin * updated FluxBBAuthPlugin * patch for https://bugzilla.wikimedia.org/show_bug.cgi?id=44024 --- includes/db/DatabaseIbm_db2.php | 165 +++++++++++++++++++--------------------- 1 file changed, 80 insertions(+), 85 deletions(-) (limited to 'includes/db/DatabaseIbm_db2.php') diff --git a/includes/db/DatabaseIbm_db2.php b/includes/db/DatabaseIbm_db2.php index fed3b12e..f1f6dfca 100644 --- a/includes/db/DatabaseIbm_db2.php +++ b/includes/db/DatabaseIbm_db2.php @@ -2,7 +2,22 @@ /** * This is the IBM DB2 database abstraction layer. * See maintenance/ibm_db2/README for development notes - * and other specific information + * and other specific information. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html * * @file * @ingroup Database @@ -122,7 +137,7 @@ class IBM_DB2Result{ /** * Construct and initialize a wrapper for DB2 query results - * @param $db Database + * @param $db DatabaseBase * @param $result Object * @param $num_rows Integer * @param $sql String @@ -130,21 +145,21 @@ class IBM_DB2Result{ */ public function __construct( $db, $result, $num_rows, $sql, $columns ){ $this->db = $db; - + if( $result instanceof ResultWrapper ){ $this->result = $result->result; } else{ $this->result = $result; } - + $this->num_rows = $num_rows; $this->current_pos = 0; if ( $this->num_rows > 0 ) { // Make a lower-case list of the column names // By default, DB2 column names are capitalized // while MySQL column names are lowercase - + // Is there a reasonable maximum value for $i? // Setting to 2048 to prevent an infinite loop for( $i = 0; $i < 2048; $i++ ) { @@ -155,11 +170,11 @@ class IBM_DB2Result{ else { return false; } - + $this->columns[$i] = strtolower( $name ); } } - + $this->sql = $sql; } @@ -187,14 +202,14 @@ class IBM_DB2Result{ * @return mixed Object on success, false on failure. */ public function fetchObject() { - if ( $this->result - && $this->num_rows > 0 - && $this->current_pos >= 0 - && $this->current_pos < $this->num_rows ) + if ( $this->result + && $this->num_rows > 0 + && $this->current_pos >= 0 + && $this->current_pos < $this->num_rows ) { $row = $this->fetchRow(); $ret = new stdClass(); - + foreach ( $row as $k => $v ) { $lc = $this->columns[$k]; $ret->$lc = $v; @@ -210,9 +225,9 @@ class IBM_DB2Result{ * @throws DBUnexpectedError */ public function fetchRow(){ - if ( $this->result - && $this->num_rows > 0 - && $this->current_pos >= 0 + if ( $this->result + && $this->num_rows > 0 + && $this->current_pos >= 0 && $this->current_pos < $this->num_rows ) { if ( $this->loadedLines <= $this->current_pos ) { @@ -227,7 +242,7 @@ class IBM_DB2Result{ if ( $this->loadedLines > $this->current_pos ){ return $this->resultSet[$this->current_pos++]; } - + } return false; } @@ -313,6 +328,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns true if this database supports (and uses) cascading deletes + * @return bool */ function cascadingDeletes() { return true; @@ -321,6 +337,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns true if this database supports (and uses) triggers (e.g. on the * page table) + * @return bool */ function cleanupTriggers() { return true; @@ -330,6 +347,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * Returns true if this database is strict about what can be put into an * IP field. * Specifically, it uses a NULL value instead of an empty string. + * @return bool */ function strictIPs() { return true; @@ -337,13 +355,15 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns true if this database uses timestamps rather than integers - */ + * @return bool + */ function realTimestamps() { return true; } /** * Returns true if this database does an implicit sort when doing GROUP BY + * @return bool */ function implicitGroupby() { return false; @@ -353,6 +373,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * Returns true if this database does an implicit order by when the column * has an index * For example: SELECT page_title FROM page LIMIT 1 + * @return bool */ function implicitOrderby() { return false; @@ -361,6 +382,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns true if this database can do a native search on IP columns * e.g. this works as expected: .. WHERE rc_ip = '127.42.12.102/32'; + * @return bool */ function searchableIPs() { return true; @@ -368,6 +390,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns true if this database can use functional indexes + * @return bool */ function functionalIndexes() { return true; @@ -375,6 +398,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Returns a unique string representing the wiki on the server + * @return string */ public function getWikiID() { if( $this->mSchema ) { @@ -392,7 +416,7 @@ class DatabaseIbm_db2 extends DatabaseBase { return 'ibm_db2'; } - /** + /** * Returns the database connection object * @return Object */ @@ -472,7 +496,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * @param $user String * @param $password String * @param $dbName String: database name - * @return a fresh connection + * @return DatabaseBase a fresh connection */ public function open( $server, $user, $password, $dbName ) { wfProfileIn( __METHOD__ ); @@ -546,32 +570,26 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Closes a database connection, if it is open * Returns success, true if already closed + * @return bool */ - public function close() { - $this->mOpened = false; - if ( $this->mConn ) { - if ( $this->trxLevel() > 0 ) { - $this->commit(); - } - return db2_close( $this->mConn ); - } else { - return true; - } + protected function closeConnection() { + return db2_close( $this->mConn ); } /** * Retrieves the most current database error * Forces a database rollback + * @return bool|string */ public function lastError() { $connerr = db2_conn_errormsg(); if ( $connerr ) { - //$this->rollback(); + //$this->rollback( __METHOD__ ); return $connerr; } $stmterr = db2_stmt_errormsg(); if ( $stmterr ) { - //$this->rollback(); + //$this->rollback( __METHOD__ ); return $stmterr; } @@ -667,7 +685,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * Fields can be retrieved with $row->fieldname, with fields acting like * member variables. * - * @param $res SQL result object as returned from Database::query(), etc. + * @param $res array|ResultWrapper SQL result object as returned from Database::query(), etc. * @return DB2 row object * @throws DBUnexpectedError Thrown if the database returns an error */ @@ -689,8 +707,8 @@ class DatabaseIbm_db2 extends DatabaseBase { * Fetch the next row from the given result object, in associative array * form. Fields are retrieved with $row['fieldname']. * - * @param $res SQL result object as returned from Database::query(), etc. - * @return DB2 row object + * @param $res array|ResultWrapper SQL result object as returned from Database::query(), etc. + * @return ResultWrapper row object * @throws DBUnexpectedError Thrown if the database returns an error */ public function fetchRow( $res ) { @@ -715,7 +733,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * Doesn't escape numbers * * @param $s String: string to escape - * @return escaped string + * @return string escaped string */ public function addQuotes( $s ) { //$this->installPrint( "DB2::addQuotes( $s )\n" ); @@ -758,7 +776,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Alias for addQuotes() * @param $s String: string to escape - * @return escaped string + * @return string escaped string */ public function strencode( $s ) { // Bloody useless function @@ -780,16 +798,16 @@ class DatabaseIbm_db2 extends DatabaseBase { protected function applySchema() { if ( !( $this->mSchemaSet ) ) { $this->mSchemaSet = true; - $this->begin(); + $this->begin( __METHOD__ ); $this->doQuery( "SET SCHEMA = $this->mSchema" ); - $this->commit(); + $this->commit( __METHOD__ ); } } /** * Start a transaction (mandatory) */ - public function begin( $fname = 'DatabaseIbm_db2::begin' ) { + protected function doBegin( $fname = 'DatabaseIbm_db2::begin' ) { // BEGIN is implicit for DB2 // However, it requires that AutoCommit be off. @@ -805,7 +823,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * End a transaction * Must have a preceding begin() */ - public function commit( $fname = 'DatabaseIbm_db2::commit' ) { + protected function doCommit( $fname = 'DatabaseIbm_db2::commit' ) { db2_commit( $this->mConn ); // Some MediaWiki code is still transaction-less (?). @@ -819,7 +837,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Cancel a transaction */ - public function rollback( $fname = 'DatabaseIbm_db2::rollback' ) { + protected function doRollback( $fname = 'DatabaseIbm_db2::rollback' ) { db2_rollback( $this->mConn ); // turn auto-commit back on // not sure if this is appropriate @@ -836,6 +854,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * LIST_SET - comma separated with field names, like a SET clause * LIST_NAMES - comma separated field names * LIST_SET_PREPARED - like LIST_SET, except with ? tokens as values + * @return string */ function makeList( $a, $mode = LIST_COMMA ) { if ( !is_array( $a ) ) { @@ -873,6 +892,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * @param $sql string SQL query we will append the limit too * @param $limit integer the SQL limit * @param $offset integer the SQL offset (default false) + * @return string */ public function limitResult( $sql, $limit, $offset=false ) { if( !is_numeric( $limit ) ) { @@ -904,7 +924,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Generates a timestamp in an insertable format * - * @param $ts timestamp + * @param $ts string timestamp * @return String: timestamp value */ public function timestamp( $ts = 0 ) { @@ -915,7 +935,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * Return the next in a sequence, save the value for retrieval via insertId() * @param $seqName String: name of a defined sequence in the database - * @return next value in that sequence + * @return int next value in that sequence */ public function nextSequenceValue( $seqName ) { // Not using sequences in the primary schema to allow for easier migration @@ -934,7 +954,7 @@ class DatabaseIbm_db2 extends DatabaseBase { /** * This must be called after nextSequenceVal - * @return Last sequence value used as a primary key + * @return int Last sequence value used as a primary key */ public function insertId() { return $this->mInsertId; @@ -1003,7 +1023,7 @@ class DatabaseIbm_db2 extends DatabaseBase { $res = true; // If we are not in a transaction, we need to be for savepoint trickery if ( !$this->mTrxLevel ) { - $this->begin(); + $this->begin( __METHOD__ ); } $sql = "INSERT INTO $table ( " . implode( ',', $keys ) . ' ) VALUES '; @@ -1018,7 +1038,7 @@ class DatabaseIbm_db2 extends DatabaseBase { $stmt = $this->prepare( $sql ); // start a transaction/enter transaction mode - $this->begin(); + $this->begin( __METHOD__ ); if ( !$ignore ) { //$first = true; @@ -1071,7 +1091,7 @@ class DatabaseIbm_db2 extends DatabaseBase { $this->mAffectedRows = $numrowsinserted; } // commit either way - $this->commit(); + $this->commit( __METHOD__ ); $this->freePrepared( $stmt ); return $res; @@ -1121,11 +1141,11 @@ class DatabaseIbm_db2 extends DatabaseBase { * UPDATE wrapper, takes a condition array and a SET array * * @param $table String: The table to UPDATE - * @param $values An array of values to SET - * @param $conds An array of conditions ( WHERE ). Use '*' to update all rows. + * @param $values array An array of values to SET + * @param $conds array An array of conditions ( WHERE ). Use '*' to update all rows. * @param $fname String: The Class::Function calling this function * ( for the log ) - * @param $options An array of UPDATE options, can be one or + * @param $options array An array of UPDATE options, can be one or * more of IGNORE, LOW_PRIORITY * @return Boolean */ @@ -1153,6 +1173,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * DELETE query wrapper * * Use $conds == "*" to delete all rows + * @return bool|\ResultWrapper */ public function delete( $table, $conds, $fname = 'DatabaseIbm_db2::delete' ) { if ( !$conds ) { @@ -1206,7 +1227,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * Moves the row pointer of the result set * @param $res Object: result set * @param $row Integer: row number - * @return success or failure + * @return bool success or failure */ public function dataSeek( $res, $row ) { if ( $res instanceof ResultWrapper ) { @@ -1279,11 +1300,11 @@ class DatabaseIbm_db2 extends DatabaseBase { * @param $conds Array or string, condition(s) for WHERE * @param $fname String: calling function name (use __METHOD__) * for logs/profiling - * @param $options Associative array of options + * @param $options array Associative array of options * (e.g. array( 'GROUP BY' => 'page_title' )), * see Database::makeSelectOptions code for list of * supported stuff - * @param $join_conds Associative array of table join conditions (optional) + * @param $join_conds array Associative array of table join conditions (optional) * (e.g. array( 'page' => array('LEFT JOIN', * 'page_latest=rev_id') ) * @return Mixed: database result resource for fetch functions or false @@ -1320,10 +1341,10 @@ class DatabaseIbm_db2 extends DatabaseBase { $res2 = parent::select( $table, $vars2, $conds, $fname, $options2, $join_conds ); - + $obj = $this->fetchObject( $res2 ); $this->mNumRows = $obj->num_rows; - + return new ResultWrapper( $this, new IBM_DB2Result( $this, $res, $obj->num_rows, $vars, $sql ) ); } @@ -1333,7 +1354,7 @@ class DatabaseIbm_db2 extends DatabaseBase { * * @private * - * @param $options Associative array of options to be turned into + * @param $options array Associative array of options to be turned into * an SQL query, valid keys are listed in the function. * @return Array */ @@ -1412,7 +1433,7 @@ class DatabaseIbm_db2 extends DatabaseBase { // db2_ping() doesn't exist // Emulate $this->close(); - $this->mConn = $this->openUncataloged( $this->mDBName, $this->mUser, + $this->openUncataloged( $this->mDBName, $this->mUser, $this->mPassword, $this->mServer, $this->mPort ); return false; @@ -1420,14 +1441,6 @@ class DatabaseIbm_db2 extends DatabaseBase { ###################################### # Unimplemented and not applicable ###################################### - /** - * Not implemented - * @return string $sql - */ - public function limitResultForUpdate( $sql, $num ) { - $this->installPrint( 'Not implemented for DB2: limitResultForUpdate()' ); - return $sql; - } /** * Only useful with fake prepare like in base Database class @@ -1502,7 +1515,7 @@ SQL; * Verifies that an index was created as unique * @param $table String: table name * @param $index String: index name - * @param $fname function name for profiling + * @param $fname string function name for profiling * @return Bool */ public function indexUnique ( $table, $index, @@ -1635,25 +1648,6 @@ SQL; return $res; } - /** - * Prepare & execute an SQL statement, quoting and inserting arguments - * in the appropriate places. - * @param $query String - * @param $args ... - */ - public function safeQuery( $query, $args = null ) { - // copied verbatim from Database.php - $prepared = $this->prepare( $query, 'DB2::safeQuery' ); - if( !is_array( $args ) ) { - # Pull the var args - $args = func_get_args(); - array_shift( $args ); - } - $retval = $this->execute( $prepared, $args ); - $this->freePrepared( $prepared ); - return $retval; - } - /** * For faking prepared SQL statements on DBs that don't support * it directly. @@ -1674,6 +1668,7 @@ SQL; /** * Switches module between regular and install modes + * @return string */ public function setMode( $mode ) { $old = $this->mMode; -- cgit v1.2.3-54-g00ecf