MediaWiki  REL1_22
purgeOldText.inc
Go to the documentation of this file.
00001 <?php
00002 
00026 function PurgeRedundantText( $delete = false ) {
00027 
00028     # Data should come off the master, wrapped in a transaction
00029     $dbw = wfGetDB( DB_MASTER );
00030     $dbw->begin( __METHOD__ );
00031 
00032     $tbl_arc = $dbw->tableName( 'archive' );
00033     $tbl_rev = $dbw->tableName( 'revision' );
00034     $tbl_txt = $dbw->tableName( 'text' );
00035 
00036     # Get "active" text records from the revisions table
00037     echo "Searching for active text records in revisions table...";
00038     $res = $dbw->query( "SELECT DISTINCT rev_text_id FROM $tbl_rev" );
00039     foreach ( $res as $row ) {
00040         $cur[] = $row->rev_text_id;
00041     }
00042     echo "done.\n";
00043 
00044     # Get "active" text records from the archive table
00045     echo "Searching for active text records in archive table...";
00046     $res = $dbw->query( "SELECT DISTINCT ar_text_id FROM $tbl_arc" );
00047     $cur = array();
00048     foreach ( $res as $row ) {
00049         $cur[] = $row->ar_text_id;
00050     }
00051     echo "done.\n";
00052 
00053     # Get the IDs of all text records not in these sets
00054     echo "Searching for inactive text records...";
00055     $set = implode( ', ', $cur );
00056     $res = $dbw->query( "SELECT old_id FROM $tbl_txt WHERE old_id NOT IN ( $set )" );
00057     $old = array();
00058     foreach ( $res as $row ) {
00059         $old[] = $row->old_id;
00060     }
00061     echo "done.\n";
00062 
00063     # Inform the user of what we're going to do
00064     $count = count( $old );
00065     echo "$count inactive items found.\n";
00066 
00067     # Delete as appropriate
00068     if ( $delete && $count ) {
00069         echo "Deleting...";
00070         $set = implode( ', ', $old );
00071         $dbw->query( "DELETE FROM $tbl_txt WHERE old_id IN ( $set )" );
00072         echo "done.\n";
00073     }
00074 
00075     # Done
00076     $dbw->commit( __METHOD__ );
00077 
00078 }