From: Aaron Schulz Date: Tue, 8 Apr 2008 01:09:39 +0000 (+0000) Subject: Add a script to populate rev_parent_id X-Git-Tag: 1.31.0-rc.0~48549 X-Git-Url: http://git.cyclocoop.org/%22.%24h.%22?a=commitdiff_plain;h=7a16b211300cf1851ac40e1ef0d4e4cea578dcec;p=lhc%2Fweb%2Fwiklou.git Add a script to populate rev_parent_id --- diff --git a/maintenance/populateParentId.php b/maintenance/populateParentId.php new file mode 100644 index 0000000000..84e99dd882 --- /dev/null +++ b/maintenance/populateParentId.php @@ -0,0 +1,62 @@ +tableExists( 'revision' ) ) { + echo "revision table does not exist\n"; + exit( 1 ); +} + +populate_rev_parent_id( $db ); + +function populate_rev_parent_id( $db ) { + echo "Populating rev_parent_id column\n"; + $start = $db->selectField( 'revision', 'MIN(rev_id)', false, __FUNCTION__ ); + $end = $db->selectField( 'revision', 'MAX(rev_id)', false, __FUNCTION__ ); + $blockStart = $start; + $blockEnd = $start + BATCH_SIZE - 1; + while( $blockEnd <= $end ) { + $cond = "rev_id BETWEEN $blockStart AND $blockEnd"; + $res = $db->select( 'revision', array('rev_id', 'rev_page'), $cond, __FUNCTION__ ); + # Go through and update rev_parent_id from these rows. + # Assume that the previous revision of the title was + # the original previous revision of the title when the + # edit was made... + while( $row = $db->fetchObject( $res ) ) { + $previousID = $db->selectField( 'revision', 'rev_id', + array( 'rev_page' => $row->rev_page, 'rev_id < ' . $row->rev_id ), + __FUNCTION__, + array( 'ORDER BY' => 'rev_id DESC' ) ); + # Update the row... + $db->update( 'revision', + array( 'rev_parent_id' => intval($previousID) ), + array( 'rev_page' => $row->rev_page, 'rev_id' => $row->rev_id ), + __FUNCTION__ ); + } + $blockStart += BATCH_SIZE; + $blockEnd += BATCH_SIZE; + wfWaitForSlaves( 5 ); + } + $logged = $db->insert( 'updatelog', + array( 'ul_key' => 'populate rev_parent_id' ), + __FUNCTION__, + 'IGNORE' ); + if( $logged ) { + echo "rev_parent_id population complete\n"; + return true; + } else { + echo "Could not insert rev_parent_id population row.\n"; + return false; + } +} + + diff --git a/maintenance/updaters.inc b/maintenance/updaters.inc index 1b434439ab..56aa5f8ff4 100644 --- a/maintenance/updaters.inc +++ b/maintenance/updaters.inc @@ -135,6 +135,7 @@ $wgMysqlUpdates = array( array( 'add_table', 'updatelog', 'patch-updatelog.sql' ), array( 'add_table', 'category', 'patch-category.sql' ), array( 'do_category_population' ), + array( 'do_populate_parent_id' ), ); @@ -1151,6 +1152,14 @@ function do_category_population() { echo "Done populating category table.\n"; } +function do_populate_parent_id() { + if( update_row_exists( 'populate rev_parent_id' ) ) { + echo "...rev_parent_id column already populated.\n"; + return; + } + require_once( 'populateParentId.inc' ); +} + function pg_describe_table($table) {