Migrate to IDatabase::newDeleteQueryBuilder

Change-Id: I516c179df464be68352809873dbff44dc3c642f1
This commit is contained in:
Umherirrender 2024-04-12 21:50:43 +02:00
parent ae71de9eff
commit d2eb46e7b9
10 changed files with 81 additions and 43 deletions

View file

@ -310,10 +310,14 @@ class EmailBatch {
foreach ( $batch as $row ) {
$eventIds[] = $row->eeb_event_id;
}
$dbw->delete( 'echo_email_batch', [
'eeb_user_id' => $this->mUser->getId(),
'eeb_event_id' => $eventIds
], __METHOD__ );
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_email_batch' )
->where( [
'eeb_user_id' => $this->mUser->getId(),
'eeb_event_id' => $eventIds
] )
->caller( __METHOD__ )
->execute();
// Find out which events are now orphaned, i.e. no longer referenced in echo_email_batch
// (besides the rows we just deleted) or in echo_notification, and delete them

View file

@ -232,8 +232,16 @@ class EventMapper extends AbstractMapper {
]
);
if ( $orphanedEventIds ) {
$dbw->delete( 'echo_event', [ 'event_id' => $orphanedEventIds ], __METHOD__ );
$dbw->delete( 'echo_target_page', [ 'etp_event' => $orphanedEventIds ], __METHOD__ );
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_event' )
->where( [ 'event_id' => $orphanedEventIds ] )
->caller( __METHOD__ )
->execute();
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_target_page' )
->where( [ 'etp_event' => $orphanedEventIds ] )
->caller( __METHOD__ )
->execute();
}
}

View file

@ -391,14 +391,14 @@ class NotificationMapper extends AbstractMapper {
foreach ( $batch as $row ) {
$eventIds[] = $row->notification_event;
}
$dbw->delete(
'echo_notification',
[
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_notification' )
->where( [
'notification_user' => $userId,
'notification_event' => $eventIds,
],
__METHOD__
);
] )
->caller( __METHOD__ )
->execute();
// Find out which events are now orphaned, i.e. no longer referenced in echo_notifications
// (besides the rows we just deleted) or in echo_email_batch, and delete them

View file

@ -123,11 +123,11 @@ class SubscriptionManager extends AbstractMapper {
if ( $centralId ) {
$cond['eps_user'] = $centralId;
}
$this->dbw->delete(
'echo_push_subscription',
$cond,
__METHOD__
);
$this->dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_push_subscription' )
->where( $cond )
->caller( __METHOD__ )
->execute();
return $this->dbw->affectedRows();
}

View file

@ -150,11 +150,11 @@ class UnreadWikis {
->execute();
} else {
// No unread notifications, delete the row
$dbw->delete(
'echo_unread_wikis',
$conditions,
__METHOD__
);
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_unread_wikis' )
->where( $conditions )
->caller( __METHOD__ )
->execute();
}
}
}

View file

@ -92,14 +92,14 @@ class UserMergeHooks implements
// Delete notifications
$ids = array_merge( $selfIds, $welcomeIds, $thankYouIds );
if ( $ids !== [] ) {
$dbw->delete(
'echo_notification',
[
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_notification' )
->where( [
'notification_user' => $newUser->getId(),
'notification_event' => $ids
],
$method
);
] )
->caller( $method )
->execute();
}
}

View file

@ -67,16 +67,16 @@ class RemoveInvalidNotification extends Maintenance {
if ( $event ) {
$this->beginTransaction( $dbw, __METHOD__ );
$dbw->delete(
'echo_event',
[ 'event_id' => $event ],
__METHOD__
);
$dbw->delete(
'echo_notification',
[ 'notification_event' => $event ],
__METHOD__
);
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_event' )
->where( [ 'event_id' => $event ] )
->caller( __METHOD__ )
->execute();
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_notification' )
->where( [ 'notification_event' => $event ] )
->caller( __METHOD__ )
->execute();
$this->commitTransaction( $dbw, __METHOD__ );

View file

@ -85,9 +85,17 @@ class RemoveOrphanedEvents extends LoggedUpdateMaintenance {
foreach ( $batch as $row ) {
$ids[] = $row->event_id;
}
$dbw->delete( 'echo_event', [ 'event_id' => $ids ], __METHOD__ );
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_event' )
->where( [ 'event_id' => $ids ] )
->caller( __METHOD__ )
->execute();
$eventsProcessed += $dbw->affectedRows();
$dbw->delete( 'echo_target_page', [ 'etp_event' => $ids ], __METHOD__ );
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_target_page' )
->where( [ 'etp_event' => $ids ] )
->caller( __METHOD__ )
->execute();
$targetsProcessed += $dbw->affectedRows();
$this->output( "Deleted $eventsProcessed orphaned events and $targetsProcessed target_page rows.\n" );
$this->waitForReplication();
@ -116,7 +124,11 @@ class RemoveOrphanedEvents extends LoggedUpdateMaintenance {
foreach ( $batch as $row ) {
$ids[] = $row->etp_event;
}
$dbw->delete( 'echo_target_page', [ 'etp_event' => $ids ], __METHOD__ );
$dbw->newDeleteQueryBuilder()
->deleteFrom( 'echo_target_page' )
->where( [ 'etp_event' => $ids ] )
->caller( __METHOD__ )
->execute();
$processed += $dbw->affectedRows();
$this->output( "Deleted $processed orphaned target_page rows.\n" );
$this->waitForReplication();

View file

@ -4,6 +4,7 @@ use MediaWiki\Extension\Notifications\DbFactory;
use MediaWiki\Extension\Notifications\Mapper\NotificationMapper;
use MediaWiki\Extension\Notifications\Model\Notification;
use MediaWiki\User\User;
use Wikimedia\Rdbms\DeleteQueryBuilder;
use Wikimedia\Rdbms\IDatabase;
/**
@ -181,6 +182,10 @@ class NotificationMapperTest extends MediaWikiIntegrationTestCase {
$this->assertSame( array_shift( $expectedArgs ), [ $table, $conds ] );
return true;
} );
$mockDb->method( 'newDeleteQueryBuilder' )
->willReturnCallback( static function () use ( $mockDb ) {
return new DeleteQueryBuilder( $mockDb );
} );
$notifMapper = new NotificationMapper( $this->mockDbFactory( $mockDb ) );
$this->assertTrue( $notifMapper->deleteByUserEventOffset( User::newFromId( 1 ), 500 ) );

View file

@ -3,6 +3,7 @@
use MediaWiki\Extension\Notifications\DbFactory;
use MediaWiki\Extension\Notifications\Mapper\NotificationMapper;
use MediaWiki\Title\Title;
use Wikimedia\Rdbms\Platform\ISQLPlatform;
/**
* @group Echo
@ -12,8 +13,16 @@ class ThankYouEditTest extends MediaWikiIntegrationTestCase {
private function deleteEchoData() {
$db = DbFactory::newFromDefault()->getEchoDb( DB_PRIMARY );
$db->delete( 'echo_event', '*', __METHOD__ );
$db->delete( 'echo_notification', '*', __METHOD__ );
$db->newDeleteQueryBuilder()
->deleteFrom( 'echo_event' )
->where( ISQLPlatform::ALL_ROWS )
->caller( __METHOD__ )
->execute();
$db->newDeleteQueryBuilder()
->deleteFrom( 'echo_notification' )
->where( ISQLPlatform::ALL_ROWS )
->caller( __METHOD__ )
->execute();
}
/**