Merge "Move around "ا" to after "آ" and not before"
[lhc/web/wiklou.git] / maintenance / orphans.php
index 24ead60..644fb95 100644 (file)
@@ -30,6 +30,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script that looks for 'orphan' revisions hooked to pages which
  * don't exist and 'childless' pages with no revisions.
@@ -56,15 +58,15 @@ class Orphans extends Maintenance {
 
        /**
         * Lock the appropriate tables for the script
-        * @param DatabaseBase $db
-        * @param string $extraTable The name of any extra tables to lock (eg: text)
+        * @param IMaintainableDatabase $db
+        * @param string[] $extraTable The name of any extra tables to lock (eg: text)
         */
-       private function lockTables( $db, $extraTable = array() ) {
-               $tbls = array( 'page', 'revision', 'redirect' );
+       private function lockTables( $db, $extraTable = [] ) {
+               $tbls = [ 'page', 'revision', 'redirect' ];
                if ( $extraTable ) {
                        $tbls = array_merge( $tbls, $extraTable );
                }
-               $db->lockTables( array(), $tbls, __METHOD__, false );
+               $db->lockTables( [], $tbls, __METHOD__, false );
        }
 
        /**
@@ -73,20 +75,24 @@ class Orphans extends Maintenance {
         */
        private function checkOrphans( $fix ) {
                $dbw = $this->getDB( DB_MASTER );
-               $page = $dbw->tableName( 'page' );
-               $revision = $dbw->tableName( 'revision' );
+               $commentStore = new CommentStore( 'rev_comment' );
 
                if ( $fix ) {
                        $this->lockTables( $dbw );
                }
 
+               $commentQuery = $commentStore->getJoin();
+
                $this->output( "Checking for orphan revision table entries... "
                        . "(this may take a while on a large wiki)\n" );
-               $result = $dbw->query( "
-                       SELECT *
-                       FROM $revision LEFT OUTER JOIN $page ON rev_page=page_id
-                       WHERE page_id IS NULL
-               " );
+               $result = $dbw->select(
+                       [ 'revision', 'page' ] + $commentQuery['tables'],
+                       [ 'rev_id', 'rev_page', 'rev_timestamp', 'rev_user_text' ] + $commentQuery['fields'],
+                       [ 'page_id' => null ],
+                       __METHOD__,
+                       [],
+                       [ 'page' => [ 'LEFT JOIN', [ 'rev_page=page_id' ] ] ] + $commentQuery['joins']
+               );
                $orphans = $result->numRows();
                if ( $orphans > 0 ) {
                        global $wgContLang;
@@ -98,9 +104,10 @@ class Orphans extends Maintenance {
                        ) );
 
                        foreach ( $result as $row ) {
-                               $comment = ( $row->rev_comment == '' )
-                                       ? ''
-                                       : '(' . $wgContLang->truncate( $row->rev_comment, 40 ) . ')';
+                               $comment = $commentStore->getComment( $row )->text;
+                               if ( $comment !== '' ) {
+                                       $comment = '(' . $wgContLang->truncate( $comment, 40 ) . ')';
+                               }
                                $this->output( sprintf( "%10d %10d %14s %20s %s\n",
                                        $row->rev_id,
                                        $row->rev_page,
@@ -108,7 +115,7 @@ class Orphans extends Maintenance {
                                        $wgContLang->truncate( $row->rev_user_text, 17 ),
                                        $comment ) );
                                if ( $fix ) {
-                                       $dbw->delete( 'revision', array( 'rev_id' => $row->rev_id ) );
+                                       $dbw->delete( 'revision', [ 'rev_id' => $row->rev_id ] );
                                }
                        }
                        if ( !$fix ) {
@@ -156,7 +163,7 @@ class Orphans extends Maintenance {
                                        $row->page_namespace,
                                        $row->page_title );
                                if ( $fix ) {
-                                       $dbw->delete( 'page', array( 'page_id' => $row->page_id ) );
+                                       $dbw->delete( 'page', [ 'page_id' => $row->page_id ] );
                                }
                        }
                        if ( !$fix ) {
@@ -181,7 +188,7 @@ class Orphans extends Maintenance {
                $revision = $dbw->tableName( 'revision' );
 
                if ( $fix ) {
-                       $this->lockTables( $dbw, array( 'user', 'text' ) );
+                       $this->lockTables( $dbw, [ 'user', 'text' ] );
                }
 
                $this->output( "\nChecking for pages whose page_latest links are incorrect... "
@@ -215,9 +222,9 @@ class Orphans extends Maintenance {
                                                $maxId = $dbw->selectField(
                                                        'revision',
                                                        'rev_id',
-                                                       array(
+                                                       [
                                                                'rev_page' => $row->page_id,
-                                                               'rev_timestamp' => $row2->max_timestamp ) );
+                                                               'rev_timestamp' => $row2->max_timestamp ] );
                                                $this->output( "... updating to revision $maxId\n" );
                                                $maxRev = Revision::newFromId( $maxId );
                                                $title = Title::makeTitle( $row->page_namespace, $row->page_title );