MWHttpRequest: Include the request ID in outgoing HTTP requests
[lhc/web/wiklou.git] / maintenance / migrateActors.php
index edd5dda..f5a1e44 100644 (file)
@@ -45,9 +45,9 @@ class MigrateActors extends LoggedUpdateMaintenance {
        protected function doDBUpdates() {
                global $wgActorTableSchemaMigrationStage;
 
-               if ( $wgActorTableSchemaMigrationStage < MIGRATION_WRITE_NEW ) {
+               if ( !( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) ) {
                        $this->output(
-                               "...cannot update while \$wgActorTableSchemaMigrationStage < MIGRATION_WRITE_NEW\n"
+                               "...cannot update while \$wgActorTableSchemaMigrationStage lacks SCHEMA_COMPAT_WRITE_NEW\n"
                        );
                        return false;
                }
@@ -119,6 +119,29 @@ class MigrateActors extends LoggedUpdateMaintenance {
                return [ $next, $display ];
        }
 
+       /**
+        * Make the subqueries for `actor_id`
+        * @param IDatabase $dbw
+        * @param string $userField User ID field name
+        * @param string $nameField User name field name
+        * @return string SQL fragment
+        */
+       private function makeActorIdSubquery( $dbw, $userField, $nameField ) {
+               $idSubquery = $dbw->buildSelectSubquery(
+                       'actor',
+                       'actor_id',
+                       [ "$userField = actor_user" ],
+                       __METHOD__
+               );
+               $nameSubquery = $dbw->buildSelectSubquery(
+                       'actor',
+                       'actor_id',
+                       [ "$nameField = actor_name" ],
+                       __METHOD__
+               );
+               return "CASE WHEN $userField = 0 OR $userField IS NULL THEN $nameSubquery ELSE $idSubquery END";
+       }
+
        /**
         * Add actors for anons in a set of rows
         * @param IDatabase $dbw
@@ -214,6 +237,7 @@ class MigrateActors extends LoggedUpdateMaintenance {
                wfWaitForSlaves();
 
                $dbw = $this->getDB( DB_MASTER );
+               $actorIdSubquery = $this->makeActorIdSubquery( $dbw, $userField, $nameField );
                $next = '1=1';
                $countUpdated = 0;
                $countActors = 0;
@@ -221,8 +245,8 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
-                               [ $table, 'actor' ],
-                               array_merge( $primaryKey, [ $userField, $nameField, 'actor_id' ] ),
+                               $table,
+                               array_merge( $primaryKey, [ $userField, $nameField, 'actor_id' => $actorIdSubquery ] ),
                                [
                                        $actorField => 0,
                                        $next,
@@ -231,13 +255,6 @@ class MigrateActors extends LoggedUpdateMaintenance {
                                [
                                        'ORDER BY' => $primaryKey,
                                        'LIMIT' => $this->mBatchSize,
-                               ],
-                               [
-                                       'actor' => [
-                                               'LEFT JOIN',
-                                               "$userField != 0 AND actor_user = $userField OR "
-                                               . "($userField = 0 OR $userField IS NULL) AND actor_name = $nameField"
-                                       ]
                                ]
                        );
                        if ( !$res->numRows() ) {
@@ -266,7 +283,6 @@ class MigrateActors extends LoggedUpdateMaintenance {
                                        $table,
                                        [
                                                $actorField => $row->actor_id,
-                                               $nameField => '',
                                        ],
                                        array_intersect_key( (array)$row, $pkFilter ) + [
                                                $actorField => 0
@@ -316,6 +332,7 @@ class MigrateActors extends LoggedUpdateMaintenance {
                wfWaitForSlaves();
 
                $dbw = $this->getDB( DB_MASTER );
+               $actorIdSubquery = $this->makeActorIdSubquery( $dbw, $userField, $nameField );
                $next = [];
                $countUpdated = 0;
                $countActors = 0;
@@ -323,8 +340,8 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
-                               [ $table, $newTable, 'actor' ],
-                               [ $primaryKey, $userField, $nameField, 'actor_id' ] + $extra,
+                               [ $table, $newTable ],
+                               [ $primaryKey, $userField, $nameField, 'actor_id' => $actorIdSubquery ] + $extra,
                                [ $newPrimaryKey => null ] + $next,
                                __METHOD__,
                                [
@@ -333,11 +350,6 @@ class MigrateActors extends LoggedUpdateMaintenance {
                                ],
                                [
                                        $newTable => [ 'LEFT JOIN', "{$primaryKey}={$newPrimaryKey}" ],
-                                       'actor' => [
-                                               'LEFT JOIN',
-                                               "$userField != 0 AND actor_user = $userField OR "
-                                               . "($userField = 0 OR $userField IS NULL) AND actor_name = $nameField"
-                                       ]
                                ]
                        );
                        if ( !$res->numRows() ) {
@@ -377,7 +389,6 @@ class MigrateActors extends LoggedUpdateMaintenance {
                                }
                                $this->beginTransaction( $dbw, __METHOD__ );
                                $dbw->insert( $newTable, $inserts, __METHOD__ );
-                               $dbw->update( $table, [ $nameField => '' ], [ $primaryKey => $updates ], __METHOD__ );
                                $countUpdated += $dbw->affectedRows();
                                $this->commitTransaction( $dbw, __METHOD__ );
                        }
@@ -416,18 +427,31 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
-                               [ 'log_search', 'actor' ],
-                               [ 'ls_field', 'ls_value', 'actor_id' ],
                                [
-                                       'ls_field' => 'target_author_id',
-                                       $next,
+                                       'ls' => $dbw->buildSelectSubquery(
+                                               'log_search',
+                                               'ls_value',
+                                               [
+                                                       'ls_field' => 'target_author_id',
+                                                       $next
+                                               ],
+                                               __METHOD__,
+                                               [
+                                                       'DISTINCT',
+                                                       'ORDER BY' => [ 'ls_value' ],
+                                                       'LIMIT' => $this->mBatchSize,
+                                               ]
+                                       ),
+                                       'actor'
                                ],
-                               __METHOD__,
                                [
-                                       'DISTINCT',
-                                       'ORDER BY' => [ 'ls_value' ],
-                                       'LIMIT' => $this->mBatchSize,
+                                       'ls_field' => $dbw->addQuotes( 'target_author_id' ),
+                                       'ls_value',
+                                       'actor_id'
                                ],
+                               [],
+                               __METHOD__,
+                               [],
                                [ 'actor' => [ 'LEFT JOIN', 'ls_value = ' . $dbw->buildStringCast( 'actor_user' ) ] ]
                        );
                        if ( !$res->numRows() ) {
@@ -476,18 +500,31 @@ class MigrateActors extends LoggedUpdateMaintenance {
                while ( true ) {
                        // Fetch the rows needing update
                        $res = $dbw->select(
-                               [ 'log_search', 'actor' ],
-                               [ 'ls_field', 'ls_value', 'actor_id' ],
                                [
-                                       'ls_field' => 'target_author_ip',
-                                       $next,
+                                       'ls' => $dbw->buildSelectSubquery(
+                                               'log_search',
+                                               'ls_value',
+                                               [
+                                                       'ls_field' => 'target_author_ip',
+                                                       $next
+                                               ],
+                                               __METHOD__,
+                                               [
+                                                       'DISTINCT',
+                                                       'ORDER BY' => [ 'ls_value' ],
+                                                       'LIMIT' => $this->mBatchSize,
+                                               ]
+                                       ),
+                                       'actor'
                                ],
-                               __METHOD__,
                                [
-                                       'DISTINCT',
-                                       'ORDER BY' => [ 'ls_value' ],
-                                       'LIMIT' => $this->mBatchSize,
+                                       'ls_field' => $dbw->addQuotes( 'target_author_ip' ),
+                                       'ls_value',
+                                       'actor_id'
                                ],
+                               [],
+                               __METHOD__,
+                               [],
                                [ 'actor' => [ 'LEFT JOIN', 'ls_value = actor_name' ] ]
                        );
                        if ( !$res->numRows() ) {