Merge "Revert "(bug 260) Handle <pre> overflow automatically with a scroll bar""
[lhc/web/wiklou.git] / includes / db / DatabaseIbm_db2.php
index 9b3374f..1fdcd5c 100644 (file)
@@ -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
@@ -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 ) {
@@ -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,9 +798,9 @@ 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__ );
                }
        }
 
@@ -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 ) ) {
@@ -893,7 +913,7 @@ class DatabaseIbm_db2 extends DatabaseBase {
         * Handle reserved keyword replacement in table names
         *
         * @param $name Object
-        * @param $name Boolean
+        * @param $format String Ignored parameter Default 'quoted'Boolean
         * @return String
         */
        public function tableName( $name, $format = 'quoted' ) {
@@ -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
@@ -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;
@@ -1502,7 +1523,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,
@@ -1640,6 +1661,7 @@ SQL;
         * in the appropriate places.
         * @param $query String
         * @param $args ...
+        * @return Resource
         */
        public function safeQuery( $query, $args = null ) {
                // copied verbatim from Database.php
@@ -1674,6 +1696,7 @@ SQL;
 
        /**
         * Switches module between regular and install modes
+        * @return string
         */
        public function setMode( $mode ) {
                $old = $this->mMode;