From 25f02d91dc843c78ad4b77b2fba7b46e1f4ce1eb Mon Sep 17 00:00:00 2001 From: Brad Jorsch Date: Wed, 28 Nov 2018 13:09:28 -0500 Subject: [PATCH] Fix RevisionDeleteUser rev_actor query for MySQL MySQL uses an extremely bad plan for the update with subquery here. For the time being let's split out the subquery. This'll break if the user has too many revision rows, but on the other hand all the existing queries here will probably break in the same way so let's leave that for later. Bug: T210628 Change-Id: Ia3eb41b43b96c506349279e19743c41530969636 --- includes/revisiondelete/RevisionDeleteUser.php | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/includes/revisiondelete/RevisionDeleteUser.php b/includes/revisiondelete/RevisionDeleteUser.php index a8bf81498f..19fe0c3255 100644 --- a/includes/revisiondelete/RevisionDeleteUser.php +++ b/includes/revisiondelete/RevisionDeleteUser.php @@ -120,14 +120,17 @@ class RevisionDeleteUser { $actorId = $dbw->selectField( 'actor', 'actor_id', [ 'actor_name' => $name ], __METHOD__ ); if ( $actorId ) { # Hide name from live edits - $subquery = $dbw->selectSQLText( + $ids = $dbw->selectFieldValues( 'revision_actor_temp', 'revactor_rev', [ 'revactor_actor' => $actorId ], __METHOD__ ); - $dbw->update( - 'revision', - [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], - [ "rev_id IN ($subquery)" ], - __METHOD__ ); + if ( $ids ) { + $dbw->update( + 'revision', + [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ], + [ 'rev_id' => $ids ], + __METHOD__ + ); + } # Hide name from deleted edits $dbw->update( -- 2.20.1