From a58285fd06c8113c45377c655dd43cef6337e815 Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Thu, 11 Jan 2007 19:06:07 +0000 Subject: Aktualisierung auf MediaWiki 1.9.0 --- maintenance/initEditCount.php | 85 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 maintenance/initEditCount.php (limited to 'maintenance/initEditCount.php') diff --git a/maintenance/initEditCount.php b/maintenance/initEditCount.php new file mode 100644 index 00000000..9d165cfb --- /dev/null +++ b/maintenance/initEditCount.php @@ -0,0 +1,85 @@ +tableName( 'user' ); +$revision = $dbw->tableName( 'revision' ); + +$dbver = $dbw->getServerVersion(); + +// Autodetect mode... +$backgroundMode = count( $wgDBservers ) > 1 || + ($dbw instanceof DatabaseMySql && version_compare( $dbver, '4.1' ) < 0); + +if( isset( $options['background'] ) ) { + $backgroundMode = true; +} elseif( isset( $options['quick'] ) ) { + $backgroundMode = false; +} + +if( $backgroundMode ) { + echo "Using replication-friendly background mode...\n"; + + $dbr = wfGetDB( DB_SLAVE ); + $chunkSize = 100; + $lastUser = $dbr->selectField( 'user', 'MAX(user_id)', '', __FUNCTION__ ); + + $start = microtime( true ); + $migrated = 0; + for( $min = 0; $min <= $lastUser; $min += $chunkSize ) { + $max = $min + $chunkSize; + $result = $dbr->query( + "SELECT + user_id, + COUNT(rev_user) AS user_editcount + FROM $user + LEFT OUTER JOIN $revision ON user_id=rev_user + WHERE user_id > $min AND user_id <= $max + GROUP BY user_id", + __FUNCTION__ ); + + while( $row = $dbr->fetchObject( $result ) ) { + $dbw->update( 'user', + array( 'user_editcount' => $row->user_editcount ), + array( 'user_id' => $row->user_id ), + __FUNCTION__ ); + ++$migrated; + } + $dbr->freeResult( $result ); + + $delta = microtime( true ) - $start; + $rate = ($delta == 0.0) ? 0.0 : $migrated / $delta; + printf( "%s %d (%0.1f%%) done in %0.1f secs (%0.3f accounts/sec).\n", + $wgDBname, + $migrated, + min( $max, $lastUser ) / $lastUser * 100.0, + $delta, + $rate ); + + wfWaitForSlaves( 10 ); + } +} else { + // Subselect should work on modern MySQLs etc + echo "Using single-query mode...\n"; + $sql = "UPDATE $user SET user_editcount=(SELECT COUNT(*) FROM $revision WHERE rev_user=user_id)"; + $dbw->query( $sql ); +} + +echo "Done!\n"; + +?> -- cgit v1.2.2