diff options
author | Anna Larch <anna@nextcloud.com> | 2021-03-04 17:46:02 +0300 |
---|---|---|
committer | Anna Larch <anna@nextcloud.com> | 2021-03-08 11:03:51 +0300 |
commit | 79d915eab554ec113dab6293b8909164f2cadace (patch) | |
tree | 3f8d0a843c1b9e67305b301264f57ad8a8e5f17c /lib | |
parent | 93193f848091322178262b133dd458d00997fa5b (diff) |
Delete recipient records when deleting email
Signed-off-by: Anna Larch <anna@nextcloud.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Db/MessageMapper.php | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/Db/MessageMapper.php b/lib/Db/MessageMapper.php index 81f1967a7..2dfeeb9f3 100644 --- a/lib/Db/MessageMapper.php +++ b/lib/Db/MessageMapper.php @@ -406,6 +406,17 @@ class MessageMapper extends QBMapper { } public function deleteAll(Mailbox $mailbox): void { + $messageIdQuery = $this->db->getQueryBuilder(); + $deleteRecipientsQuery = $this->db->getQueryBuilder(); + $messageIdQuery->select('id') + ->from($this->getTableName()) + ->where($messageIdQuery->expr()->eq('mailbox_id', $deleteRecipientsQuery->createNamedParameter($mailbox->getId()))); + + // delete all related recipient entries + $deleteRecipientsQuery->delete('mail_recipients') + ->where($deleteRecipientsQuery->expr()->in('message_id', $deleteRecipientsQuery->createFunction($messageIdQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)); + $deleteRecipientsQuery->execute(); + $query = $this->db->getQueryBuilder(); $query->delete($this->getTableName()) @@ -415,6 +426,20 @@ class MessageMapper extends QBMapper { } public function deleteByUid(Mailbox $mailbox, int ...$uids): void { + $messageIdQuery = $this->db->getQueryBuilder(); + $deleteRecipientsQuery = $this->db->getQueryBuilder(); + + $messageIdQuery->select('id') + ->from($this->getTableName()) + ->where( + $messageIdQuery->expr()->eq('mailbox_id', $deleteRecipientsQuery->createNamedParameter($mailbox->getId())), + $messageIdQuery->expr()->in('uid', $deleteRecipientsQuery->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)) + ); + // delete all related recipient entries + $deleteRecipientsQuery->delete('mail_recipients') + ->where($deleteRecipientsQuery->expr()->in('message_id', $messageIdQuery->createFunction($messageIdQuery->getSQL()), IQueryBuilder::PARAM_INT_ARRAY)); + $deleteRecipientsQuery->execute(); + $query = $this->db->getQueryBuilder(); $query->delete($this->getTableName()) |