+ // If we're going to be using actor_timestamp, we need to swap the order of `revision`
+ // and `revision_actor_temp` in the query (for the straight join) and adjust some field aliases.
+ if ( $idField !== 'rev_id' && isset( $revQuery['tables']['temp_rev_user'] ) ) {
+ $aliasFields = [ 'rev_id' => $idField, 'rev_timestamp' => $tsField, 'rev_page' => $pageField ];
+ $revQuery['fields'] = array_merge(
+ $aliasFields,
+ array_diff( $revQuery['fields'], array_keys( $aliasFields ) )
+ );
+ unset( $revQuery['tables']['temp_rev_user'] );
+ $revQuery['tables'] = array_merge(
+ [ 'temp_rev_user' => 'revision_actor_temp' ],
+ $revQuery['tables']
+ );
+ $revQuery['joins']['revision'] = $revQuery['joins']['temp_rev_user'];
+ unset( $revQuery['joins']['temp_rev_user'] );
+ }
+
+ $this->addTables( $revQuery['tables'] );
+ $this->addFields( $revQuery['fields'] );
+ $this->addJoinConds( $revQuery['joins'] );
+
+ // Seems to be needed to avoid a planner bug (T113901)
+ $this->addOption( 'STRAIGHT_JOIN' );
+