36 $backgroundMode =
true;
37 } elseif ( $this->
hasOption(
'quick' ) ) {
38 $backgroundMode =
false;
41 $backgroundMode = $lb->hasReplicaServers();
44 if ( $backgroundMode ) {
45 $this->
output(
"Using replication-friendly background mode...\n" );
49 $lastUser = $dbr->newSelectQueryBuilder()
50 ->select(
'MAX(user_id)' )
52 ->caller( __METHOD__ )->fetchField();
54 $start = microtime(
true );
56 for ( $min = 0; $min <= $lastUser; $min += $chunkSize ) {
57 $max = $min + $chunkSize;
59 $result = $dbr->newSelectQueryBuilder()
60 ->select( [
'user_id',
'user_editcount' =>
'COUNT(rev_actor)' ] )
62 ->join(
'actor',
'actor_rev_user',
'user_id = actor_rev_user.actor_user' )
63 ->leftJoin(
'revision',
'rev',
'actor_rev_user.actor_id = rev.rev_actor' )
64 ->where( $dbr->expr(
'user_id',
'>', $min )->and(
'user_id',
'<=', $max ) )
65 ->groupBy(
'user_id' )
66 ->caller( __METHOD__ )->fetchResultSet();
68 foreach ( $result as $row ) {
69 $dbw->newUpdateQueryBuilder()
71 ->set( [
'user_editcount' => $row->user_editcount ] )
72 ->where( [
'user_id' => $row->user_id ] )
73 ->caller( __METHOD__ )->execute();
77 $delta = microtime(
true ) - $start;
78 $rate = ( $delta == 0.0 ) ? 0.0 : $migrated / $delta;
79 $this->
output( sprintf(
"%s %d (%0.1f%%) done in %0.1f secs (%0.3f accounts/sec).\n",
80 WikiMap::getCurrentWikiDbDomain()->getId(),
82 min( $max, $lastUser ) / $lastUser * 100.0,
89 $this->
output(
"Using single-query mode...\n" );
91 $subquery = $dbw->newSelectQueryBuilder()
92 ->select(
'COUNT(*)' )
94 ->join(
'actor',
'actor_rev_user',
'actor_rev_user.actor_id = rev_actor' )
95 ->where(
'user_id = actor_rev_user.actor_user' )
96 ->caller( __METHOD__ )->getSQL();
98 $dbw->newUpdateQueryBuilder()
100 ->set( [
'user_editcount' =>
new RawSQLValue(
"($subquery)" ) ] )
101 ->where( IDatabase::ALL_ROWS )
102 ->caller( __METHOD__ )
106 $this->
output(
"Done!\n" );