Revert to r15092; massive breakage, unable to connect to MySQL at all
[lhc/web/wiklou.git] / includes / Database.php
index 173bc71..fc2d67d 100644 (file)
@@ -577,7 +577,9 @@ class Database {
                }
 
                # If DBO_TRX is set, start a transaction
-               if ( ( $this->mFlags & DBO_TRX ) && !$this->trxLevel() && $sql != 'BEGIN' ) {
+               if ( ( $this->mFlags & DBO_TRX ) && !$this->trxLevel() && 
+                       $sql != 'BEGIN' && $sql != 'COMMIT' && $sql != 'ROLLBACK' 
+               ) {
                        $this->begin();
                }
 
@@ -1699,26 +1701,19 @@ class Database {
        }
 
        /**
-        * Begin a transaction, or if a transaction has already started, continue it
+        * Begin a transaction, committing any previously open transaction
         */
        function begin( $fname = 'Database::begin' ) {
-               if ( !$this->mTrxLevel ) {
-                       $this->immediateBegin( $fname );
-               } else {
-                       $this->mTrxLevel++;
-               }
+               $this->query( 'BEGIN', $fname );
+               $this->mTrxLevel = 1;
        }
 
        /**
-        * End a transaction, or decrement the nest level if transactions are nested
+        * End a transaction
         */
        function commit( $fname = 'Database::commit' ) {
-               if ( $this->mTrxLevel ) {
-                       $this->mTrxLevel--;
-               }
-               if ( !$this->mTrxLevel ) {
-                       $this->immediateCommit( $fname );
-               }
+               $this->query( 'COMMIT', $fname );
+               $this->mTrxLevel = 0;
        }
 
        /**
@@ -1731,18 +1726,18 @@ class Database {
 
        /**
         * Begin a transaction, committing any previously open transaction
+        * @deprecated use begin()
         */
        function immediateBegin( $fname = 'Database::immediateBegin' ) {
-               $this->query( 'BEGIN', $fname );
-               $this->mTrxLevel = 1;
+               $this->begin();
        }
 
        /**
         * Commit transaction, if one is open
+        * @deprecated use commit()
         */
        function immediateCommit( $fname = 'Database::immediateCommit' ) {
-               $this->query( 'COMMIT', $fname );
-               $this->mTrxLevel = 0;
+               $this->commit();
        }
 
        /**
@@ -1817,14 +1812,24 @@ class Database {
                # dubious, but unfortunately there's no easy rigorous way
                $slaveThreads = 0;
                while ( $row = $this->fetchObject( $res ) ) {
-                       if ( $row->User == 'system user' ) {
-                               if ( ++$slaveThreads == 2 ) {
-                                       # This is it, return the time (except -ve)
-                                       if ( $row->Time > 0x7fffffff ) {
-                                               return false;
-                                       } else {
-                                               return $row->Time;
-                                       }
+                       /* This should work for most situations - when default db 
+                        * for thread is not specified, it had no events executed, 
+                        * and therefore it doesn't know yet how lagged it is.
+                        *
+                        * Relay log I/O thread does not select databases.
+                        */
+                       if ( $row->User == 'system user' && 
+                               $row->State != 'Waiting for master to send event' &&
+                               $row->State != 'Connecting to master' && 
+                               $row->State != 'Queueing master event to the relay log' &&
+                               $row->State != 'Waiting for master update' &&
+                               $row->State != 'Requesting binlog dump'
+                               ) {
+                               # This is it, return the time (except -ve)
+                               if ( $row->Time > 0x7fffffff ) {
+                                       return false;
+                               } else {
+                                       return $row->Time;
                                }
                        }
                }
@@ -1994,7 +1999,7 @@ class ResultWrapper {
        /**
         * @todo document
         */
-       function &fetchRow() {
+       function fetchRow() {
                return $this->db->fetchRow( $this->result );
        }
 
@@ -2013,106 +2018,4 @@ class ResultWrapper {
 
 }
 
-
-#------------------------------------------------------------------------------
-# Global functions
-#------------------------------------------------------------------------------
-
-/**
- * Standard fail function, called by default when a connection cannot be
- * established.
- * Displays the file cache if possible
- */
-function wfEmergencyAbort( &$conn, $error ) {
-       global $wgTitle, $wgUseFileCache, $title, $wgInputEncoding, $wgOutputEncoding;
-       global $wgSitename, $wgServer, $wgMessageCache, $wgLogo;
-
-       # I give up, Brion is right. Getting the message cache to work when there is no DB is tricky.
-       # Hard coding strings instead.
-
-       $noconnect = "<h1><img src='$wgLogo' style='float:left;margin-right:1em' alt=''>$wgSitename has a problem</h1><p><strong>Sorry! This site is experiencing technical difficulties.</strong></p><p>Try waiting a few minutes and reloading.</p><p><small>(Can't contact the database server: $1)</small></p>";
-       $mainpage = 'Main Page';
-       $searchdisabled = <<<EOT
-<p style="margin: 1.5em 2em 1em">$wgSitename search is disabled for performance reasons. You can search via Google in the meantime.
-<span style="font-size: 89%; display: block; margin-left: .2em">Note that their indexes of $wgSitename content may be out of date.</span></p>',
-EOT;
-
-       $googlesearch = "
-<!-- SiteSearch Google -->
-<FORM method=GET action=\"http://www.google.com/search\">
-<TABLE bgcolor=\"#FFFFFF\"><tr><td>
-<A HREF=\"http://www.google.com/\">
-<IMG SRC=\"http://www.google.com/logos/Logo_40wht.gif\"
-border=\"0\" ALT=\"Google\"></A>
-</td>
-<td>
-<INPUT TYPE=text name=q size=31 maxlength=255 value=\"$1\">
-<INPUT type=submit name=btnG VALUE=\"Google Search\">
-<font size=-1>
-<input type=hidden name=domains value=\"$wgServer\"><br /><input type=radio name=sitesearch value=\"\"> WWW <input type=radio name=sitesearch value=\"$wgServer\" checked> $wgServer <br />
-<input type='hidden' name='ie' value='$2'>
-<input type='hidden' name='oe' value='$2'>
-</font>
-</td></tr></TABLE>
-</FORM>
-<!-- SiteSearch Google -->";
-       $cachederror = "The following is a cached copy of the requested page, and may not be up to date. ";
-
-
-       if( !headers_sent() ) {
-               header( 'HTTP/1.0 500 Internal Server Error' );
-               header( 'Content-type: text/html; charset='.$wgOutputEncoding );
-               /* Don't cache error pages!  They cause no end of trouble... */
-               header( 'Cache-control: none' );
-               header( 'Pragma: nocache' );
-       }
-
-       # No database access
-       if ( is_object( $wgMessageCache ) ) {
-               $wgMessageCache->disable();
-       }
-
-       if ( trim( $error ) == '' ) {
-               $error = $this->mServer;
-       }
-
-       wfLogDBError( "Connection error: $error\n" );
-
-       $text = str_replace( '$1', $error, $noconnect );
-       $text .= wfGetSiteNotice();
-
-       if($wgUseFileCache) {
-               if($wgTitle) {
-                       $t =& $wgTitle;
-               } else {
-                       if($title) {
-                               $t = Title::newFromURL( $title );
-                       } elseif (@/**/$_REQUEST['search']) {
-                               $search = $_REQUEST['search'];
-                               echo $searchdisabled;
-                               echo str_replace( array( '$1', '$2' ), array( htmlspecialchars( $search ),
-                                 $wgInputEncoding ), $googlesearch );
-                               wfErrorExit();
-                       } else {
-                               $t = Title::newFromText( $mainpage );
-                       }
-               }
-
-               $cache = new CacheManager( $t );
-               if( $cache->isFileCached() ) {
-                       $msg = '<p style="color: red"><b>'.$msg."<br />\n" .
-                               $cachederror . "</b></p>\n";
-
-                       $tag = '<div id="article">';
-                       $text = str_replace(
-                               $tag,
-                               $tag . $msg,
-                               $cache->fetchPageText() );
-               }
-       }
-
-       echo $text;
-       wfErrorExit();
-}
-
 ?>