From: Brad Jorsch Date: Wed, 28 Nov 2018 18:09:28 +0000 (-0500) Subject: Fix RevisionDeleteUser rev_actor query for MySQL X-Git-Tag: 1.34.0-rc.0~3405 X-Git-Url: http://git.cyclocoop.org/?a=commitdiff_plain;h=25f02d91dc843c78ad4b77b2fba7b46e1f4ce1eb;p=lhc%2Fweb%2Fwiklou.git 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 --- 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(