50 $backgroundMode =
true;
51 } elseif ( $this->
hasOption(
'quick' ) ) {
52 $backgroundMode =
false;
55 $backgroundMode = $lb->hasReplicaServers();
58 if ( $backgroundMode ) {
59 $this->
output(
"Using replication-friendly background mode...\n" );
63 $lastUser = $dbr->newSelectQueryBuilder()
64 ->select(
'MAX(user_id)' )
66 ->caller( __METHOD__ )->fetchField();
68 $start = microtime(
true );
70 for ( $min = 0; $min <= $lastUser; $min += $chunkSize ) {
71 $max = $min + $chunkSize;
73 $result = $dbr->newSelectQueryBuilder()
74 ->select( [
'user_id',
'user_editcount' =>
"COUNT(actor_rev_user.actor_user)" ] )
76 ->leftJoin(
'revision',
'rev',
"user_id = actor_rev_user.actor_user" )
77 ->join(
'actor',
'actor_rev_user',
'actor_rev_user.actor_id = rev_actor' )
78 ->where( $dbr->expr(
'user_id',
'>', $min )->and(
'user_id',
'<=', $max ) )
79 ->groupBy(
'user_id' )
80 ->caller( __METHOD__ )->fetchResultSet();
82 foreach ( $result as $row ) {
83 $dbw->newUpdateQueryBuilder()
85 ->set( [
'user_editcount' => $row->user_editcount ] )
86 ->where( [
'user_id' => $row->user_id ] )
87 ->caller( __METHOD__ )->execute();
91 $delta = microtime(
true ) - $start;
92 $rate = ( $delta == 0.0 ) ? 0.0 : $migrated / $delta;
93 $this->
output( sprintf(
"%s %d (%0.1f%%) done in %0.1f secs (%0.3f accounts/sec).\n",
94 WikiMap::getCurrentWikiDbDomain()->getId(),
96 min( $max, $lastUser ) / $lastUser * 100.0,
103 $this->
output(
"Using single-query mode...\n" );
105 $subquery = $dbw->newSelectQueryBuilder()
106 ->select(
'COUNT(*)' )
108 ->join(
'actor',
'actor_rev_user',
'actor_rev_user.actor_id = rev_actor' )
109 ->where(
'user_id = actor_rev_user.actor_user' )
110 ->caller( __METHOD__ )->getSQL();
112 $dbw->newUpdateQueryBuilder()
114 ->set( [
'user_editcount' =>
new RawSQLValue(
"($subquery)" ) ] )
115 ->where( IDatabase::ALL_ROWS )
116 ->caller( __METHOD__ )
120 $this->
output(
"Done!\n" );