From 91c16e1874cc93408461b0bad8d27f368ba80adb Mon Sep 17 00:00:00 2001 From: Alexandre Emsenhuber Date: Sun, 2 Dec 2012 15:05:37 +0100 Subject: [PATCH] (bug 42601) Make deleteOldRevisions.php no longer throw database errors on empty sets. Also changes DatabaseBase::query() calls to more specific ones. Change-Id: I7b1eef9ac7cfc89c535a932477fcf1598d3bc0b2 --- maintenance/deleteOldRevisions.php | 37 ++++++++++++++---------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/maintenance/deleteOldRevisions.php b/maintenance/deleteOldRevisions.php index 6a3e211b00..4f82a63d2f 100644 --- a/maintenance/deleteOldRevisions.php +++ b/maintenance/deleteOldRevisions.php @@ -48,48 +48,45 @@ class DeleteOldRevisions extends Maintenance { $dbw = wfGetDB( DB_MASTER ); $dbw->begin( __METHOD__ ); - $tbl_pag = $dbw->tableName( 'page' ); - $tbl_rev = $dbw->tableName( 'revision' ); - - $pageIdClause = ''; - $revPageClause = ''; + $pageConds = array(); + $revConds = array(); # If a list of page_ids was provided, limit results to that set of page_ids - if ( sizeof( $args ) > 0 ) { - $pageIdList = implode( ',', $args ); - $pageIdClause = " WHERE page_id IN ({$pageIdList})"; - $revPageClause = " AND rev_page IN ({$pageIdList})"; - $this->output( "Limiting to {$tbl_pag}.page_id IN ({$pageIdList})\n" ); + if ( count( $args ) > 0 ) { + $pageConds['page_id'] = $args; + $revConds['rev_page'] = $args; + $this->output( "Limiting to page IDs " . implode( ',', $args ) . "\n" ); } # Get "active" revisions from the page table $this->output( "Searching for active revisions..." ); - $res = $dbw->query( "SELECT page_latest FROM $tbl_pag{$pageIdClause}" ); - $cur = array(); + $res = $dbw->select( 'page', 'page_latest', $pageConds, __METHOD__ ); + $latestRevs = array(); foreach ( $res as $row ) { - $cur[] = $row->page_latest; + $latestRevs[] = $row->page_latest; } $this->output( "done.\n" ); # Get all revisions that aren't in this set - $old = array(); $this->output( "Searching for inactive revisions..." ); - $set = implode( ', ', $cur ); - $res = $dbw->query( "SELECT rev_id FROM $tbl_rev WHERE rev_id NOT IN ( $set ){$revPageClause}" ); + if ( count( $latestRevs ) > 0 ) { + $revConds[] = 'rev_id NOT IN (' . $dbw->makeList( $latestRevs ) . ')'; + } + $res = $dbw->select( 'revision', 'rev_id', $revConds, __METHOD__ ); + $oldRevs = array(); foreach ( $res as $row ) { - $old[] = $row->rev_id; + $oldRevs[] = $row->rev_id; } $this->output( "done.\n" ); # Inform the user of what we're going to do - $count = count( $old ); + $count = count( $oldRevs ); $this->output( "$count old revisions found.\n" ); # Delete as appropriate if ( $delete && $count ) { $this->output( "Deleting..." ); - $set = implode( ', ', $old ); - $dbw->query( "DELETE FROM $tbl_rev WHERE rev_id IN ( $set )" ); + $dbw->delete( 'revision', array( 'rev_id' => $oldRevs ), __METHOD__ ); $this->output( "done.\n" ); } -- 2.20.1