X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=maintenance%2Forphans.php;h=e4f3e913542eb63634b275f60299bb367946c8fd;hb=1d7a1bf8bddf0908e4f572c82268733f63126a13;hp=24ead605c2610d9c9c4d3a6cd37590c9047e9bdb;hpb=4dc3ac1c375b3d2eb6172dfef8fdebe71b8c5f43;p=lhc%2Fweb%2Fwiklou.git diff --git a/maintenance/orphans.php b/maintenance/orphans.php index 24ead605c2..644fb958df 100644 --- a/maintenance/orphans.php +++ b/maintenance/orphans.php @@ -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 );