diff options
Diffstat (limited to 'maintenance/deleteOldRevisions.php')
-rw-r--r-- | maintenance/deleteOldRevisions.php | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/maintenance/deleteOldRevisions.php b/maintenance/deleteOldRevisions.php index 6a3e211b..847d8634 100644 --- a/maintenance/deleteOldRevisions.php +++ b/maintenance/deleteOldRevisions.php @@ -22,7 +22,7 @@ * @author Rob Church <robchur@gmail.com> */ -require_once( __DIR__ . '/Maintenance.php' ); +require_once __DIR__ . '/Maintenance.php'; /** * Maintenance script that deletes old (non-current) revisions from the database. @@ -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" ); } @@ -103,5 +100,4 @@ class DeleteOldRevisions extends Maintenance { } $maintClass = "DeleteOldRevisions"; -require_once( RUN_MAINTENANCE_IF_MAIN ); - +require_once RUN_MAINTENANCE_IF_MAIN; |