Replace multiple subscriber update queries with one in sending loop
[MAILPOET-5178]
This commit is contained in:
committed by
Aschepikov
parent
764114edc7
commit
5d88f02216
@ -37,11 +37,13 @@ class Subscribers {
|
||||
|
||||
public function updateProcessedSubscribers(array $processedSubscribers) {
|
||||
if (!empty($processedSubscribers)) {
|
||||
$this->getSubscribers()
|
||||
->whereIn('subscriber_id', $processedSubscribers)
|
||||
->findResultSet()
|
||||
->set('processed', ScheduledTaskSubscriber::STATUS_PROCESSED)
|
||||
->save();
|
||||
ScheduledTaskSubscriber::rawExecute(sprintf(
|
||||
'UPDATE %1$s SET processed = %2$s WHERE task_id = %3$s AND subscriber_id IN (%4$s)',
|
||||
ScheduledTaskSubscriber::$_table,
|
||||
ScheduledTaskSubscriber::STATUS_PROCESSED,
|
||||
$this->task->id,
|
||||
join(', ', array_map('intval', $processedSubscribers))
|
||||
));
|
||||
}
|
||||
$this->checkCompleted();
|
||||
}
|
||||
|
@ -143,12 +143,19 @@ class SendingTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
public function testItUpdatesProcessedSubscribers() {
|
||||
$subscriberId = 456;
|
||||
$taskSubscriber = $this->getTaskSubscriber($this->task->id, $subscriberId);
|
||||
expect($taskSubscriber->processed)->equals(ScheduledTaskSubscriber::STATUS_UNPROCESSED);
|
||||
|
||||
expect($this->sending->count_to_process)->equals(2);
|
||||
expect($this->sending->count_processed)->equals(0);
|
||||
$subscriberIds = [456];
|
||||
$subscriberIds = [$subscriberId];
|
||||
$this->sending->updateProcessedSubscribers($subscriberIds);
|
||||
expect($this->sending->count_to_process)->equals(1);
|
||||
expect($this->sending->count_processed)->equals(1);
|
||||
|
||||
$taskSubscriber = $this->getTaskSubscriber($this->task->id, $subscriberId);
|
||||
expect($taskSubscriber->processed)->equals(ScheduledTaskSubscriber::STATUS_PROCESSED);
|
||||
}
|
||||
|
||||
public function testItGetsScheduledQueues() {
|
||||
@ -271,4 +278,8 @@ class SendingTest extends \MailPoetTest {
|
||||
$sending->scheduledAt = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'))->subHours(1);
|
||||
return $sending->save();
|
||||
}
|
||||
|
||||
private function getTaskSubscriber($taskId, $subscriberId) {
|
||||
return ScheduledTaskSubscriber::where(['task_id' => $taskId, 'subscriber_id' => $subscriberId])->findOne();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user