Merge "Separate select() parameter summary from detail"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 1 Aug 2014 22:49:36 +0000 (22:49 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 1 Aug 2014 22:49:36 +0000 (22:49 +0000)
1  2 
includes/db/Database.php

diff --combined includes/db/Database.php
@@@ -600,18 -600,7 +600,18 @@@ abstract class DatabaseBase implements 
         * @return bool
         */
        public function doneWrites() {
 -              return $this->mDoneWrites;
 +              return (bool)$this->mDoneWrites;
 +      }
 +
 +      /**
 +       * Returns the last time the connection may have been used for write queries.
 +       * Should return a timestamp if unsure.
 +       *
 +       * @return int|float UNIX timestamp or false
 +       * @since 1.24
 +       */
 +      public function lastDoneWrites() {
 +              return $this->mDoneWrites ?: false;
        }
  
        /**
         *     for a successful read query, or false on failure if $tempIgnore set
         */
        public function query( $sql, $fname = __METHOD__, $tempIgnore = false ) {
 -              global $wgUser, $wgDebugDBTransactions;
 +              global $wgUser, $wgDebugDBTransactions, $wgDebugDumpSqlLength;
  
                $this->mLastQuery = $sql;
 -              if ( !$this->mDoneWrites && $this->isWriteQuery( $sql ) ) {
 +              if ( $this->isWriteQuery( $sql ) ) {
                        # Set a flag indicating that writes have been done
                        wfDebug( __METHOD__ . ': Writes done: ' . DatabaseBase::generalizeSQL( $sql ) . "\n" );
 -                      $this->mDoneWrites = true;
 +                      $this->mDoneWrites = microtime( true );
                }
  
                # Add a comment for easy SHOW PROCESSLIST interpretation
                        static $cnt = 0;
  
                        $cnt++;
 -                      $sqlx = substr( $commentedSql, 0, 500 );
 +                      $sqlx = $wgDebugDumpSqlLength ? substr( $commentedSql, 0, $wgDebugDumpSqlLength )
 +                              : $commentedSql;
                        $sqlx = strtr( $sqlx, "\t\n", '  ' );
  
                        $master = $isMaster ? 'master' : 'slave';
                        if ( $this->ping() ) {
                                global $wgRequestTime;
                                wfDebug( "Reconnected\n" );
 -                              $sqlx = substr( $commentedSql, 0, 500 );
 +                              $sqlx = $wgDebugDumpSqlLength ? substr( $commentedSql, 0, $wgDebugDumpSqlLength )
 +                                      : $commentedSql;
                                $sqlx = strtr( $sqlx, "\t\n", '  ' );
                                $elapsed = round( microtime( true ) - $wgRequestTime, 3 );
                                if ( $elapsed < 300 ) {
         * @param array $options Query options
         * @param array $join_conds Join conditions
         *
+        *
         * @param string|array $table
         *
         * May be either an array of table names, or a single string holding a table
                # All newlines, tabs, etc replaced by single space
                $sql = preg_replace( '/\s+/', ' ', $sql );
  
 -              # All numbers => N
 +              # All numbers => N,
 +              # except the ones surrounded by characters, e.g. l10n
                $sql = preg_replace( '/-?\d+(,-?\d+)+/s', 'N,...,N', $sql );
 -              $sql = preg_replace( '/-?\d+/s', 'N', $sql );
 +              $sql = preg_replace( '/(?<![a-zA-Z])-?\d+(?![a-zA-Z])/s', 'N', $sql );
  
                return $sql;
        }
         *   DatabaseBase::tableName().
         * @param array $a Array of rows to insert
         * @param string $fname Calling function name (use __METHOD__) for logs/profiling
 -       * @param array $options of options
 +       * @param array $options Array of options
         *
         * @return bool
         */
         * Build a partial where clause from a 2-d array such as used for LinkBatch.
         * The keys on each level may be either integers or strings.
         *
 -       * @param array $data organized as 2-d
 +       * @param array $data Organized as 2-d
         *    array(baseKeyVal => array(subKeyVal => [ignored], ...), ...)
         * @param string $baseKey Field name to match the base-level keys to (eg 'pl_namespace')
         * @param string $subKey Field name to match the sub-level keys to (eg 'pl_title')
 -       * @return string|bool string SQL fragment, or false if no items in array.
 +       * @return string|bool SQL fragment, or false if no items in array
         */
        public function makeWhereFrom2d( $data, $baseKey, $subKey ) {
                $conds = array();
        /**
         * Gets an array of aliased table names
         *
 -       * @param array $tables array( [alias] => table )
 +       * @param array $tables Array( [alias] => table )
         * @return string[] See tableNameWithAlias()
         */
        public function tableNamesWithAlias( $tables ) {
        /**
         * Gets an array of aliased field names
         *
 -       * @param array $fields array( [alias] => field )
 +       * @param array $fields Array( [alias] => field )
         * @return string[] See fieldNameWithAlias()
         */
        public function fieldNamesWithAlias( $fields ) {
         * DELETE query wrapper.
         *
         * @param array $table Table name
 -       * @param string|array $conds of conditions. See $conds in DatabaseBase::select()
 +       * @param string|array $conds Array of conditions. See $conds in DatabaseBase::select()
         *   for the format. Use $conds == "*" to delete all rows
 -       * @param string $fname name of the calling function
 +       * @param string $fname Name of the calling function
         * @throws DBUnexpectedError
         * @return bool|ResultWrapper
         */
         * @param DBMasterPos $pos
         * @param int $timeout The maximum number of seconds to wait for
         *   synchronisation
 -       * @return int Zzero if the slave was past that position already,
 +       * @return int Zero if the slave was past that position already,
         *   greater than zero if we waited for some period of time, less than
         *   zero if we timed out.
         */
        protected function runOnTransactionIdleCallbacks() {
                $autoTrx = $this->getFlag( DBO_TRX ); // automatic begin() enabled?
  
 -              $e = null; // last exception
 +              $e = $ePrior = null; // last exception
                do { // callbacks may add callbacks :)
                        $callbacks = $this->mTrxIdleCallbacks;
                        $this->mTrxIdleCallbacks = array(); // recursion guard
                                        call_user_func( $phpCallback );
                                        $this->setFlag( $autoTrx ? DBO_TRX : 0 ); // restore automatic begin()
                                } catch ( Exception $e ) {
 +                                      if ( $ePrior ) {
 +                                              MWExceptionHandler::logException( $ePrior );
 +                                      }
 +                                      $ePrior = $e;
                                }
                        }
                } while ( count( $this->mTrxIdleCallbacks ) );
         * @since 1.22
         */
        protected function runOnTransactionPreCommitCallbacks() {
 -              $e = null; // last exception
 +              $e = $ePrior = null; // last exception
                do { // callbacks may add callbacks :)
                        $callbacks = $this->mTrxPreCommitCallbacks;
                        $this->mTrxPreCommitCallbacks = array(); // recursion guard
                                        list( $phpCallback ) = $callback;
                                        call_user_func( $phpCallback );
                                } catch ( Exception $e ) {
 +                                      if ( $ePrior ) {
 +                                              MWExceptionHandler::logException( $ePrior );
 +                                      }
 +                                      $ePrior = $e;
                                }
                        }
                } while ( count( $this->mTrxPreCommitCallbacks ) );
        /**
         * Encode an expiry time into the DBMS dependent format
         *
 -       * @param string $expiry timestamp for expiry, or the 'infinity' string
 +       * @param string $expiry Timestamp for expiry, or the 'infinity' string
         * @return string
         */
        public function encodeExpiry( $expiry ) {