diff --git a/lib/Db/MessageMapper.php b/lib/Db/MessageMapper.php index 81f1967a720a85fe9ce57cd5327385fc2a34ac7f..2dfeeb9f3e6a3090494ea5b4fc6c667ad6f15a4c 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()) diff --git a/tests/psalm-baseline.xml b/tests/psalm-baseline.xml index 0976805840f7c9c7f2769a0de7b22611228b4c84..c58ef7c3dc4ef4aa5fecba07dd1568d86bcbc54b 100644 --- a/tests/psalm-baseline.xml +++ b/tests/psalm-baseline.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<files psalm-version="4.4.1@9fd7a7d885b3a216cff8dec9d8c21a132f275224"> +<files psalm-version="4.6.1@e93e532e4eaad6d68c4d7b606853800eaceccc72"> <file src="lib/Attachment.php"> <MissingDocblockType occurrences="1"> <code>$fetch</code> @@ -30,9 +30,31 @@ </ImplicitToStringCast> </file> <file src="lib/Db/MessageMapper.php"> - <ImplicitToStringCast occurrences="23"> + <ImplicitToStringCast occurrences="26"> + <code>$deleteRecipientsQuery->createFunction($messageIdQuery->getSQL())</code> + <code>$deleteRecipientsQuery->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$messageIdQuery->createFunction($messageIdQuery->getSQL())</code> <code>$messagesQuery->createFunction($mailboxesQuery->getSQL())</code> <code>$qb->createFunction($mailboxIdsQuery->getSQL())</code> + <code>$qb->createFunction($mailboxIdsQuery->getSQL())</code> + <code>$qb->createFunction($selectMailboxIds->getSQL())</code> + <code>$qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb->createNamedParameter($mailboxIds, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb->createNamedParameter($query->getBcc(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getBcc(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getCc(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getCc(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getFrom(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getFrom(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getTo(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($query->getTo(), IQueryBuilder::PARAM_STR_ARRAY)</code> + <code>$qb->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb2->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb2->createNamedParameter(array_keys($indexedMessages), IQueryBuilder::PARAM_INT_ARRAY)</code> + <code>$qb4->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)</code> <code>$query->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY)</code> <code>$query->createNamedParameter($uids, IQueryBuilder::PARAM_INT_ARRAY)</code> </ImplicitToStringCast>