Database schema optimization - part 13 (fixes #1882 fixes #2415)

This commit is contained in:
mdecimus
2025-11-25 12:14:51 +01:00
parent c7fc16d9a2
commit 2b614aa536
62 changed files with 1661 additions and 2264 deletions

View File

@@ -29,6 +29,7 @@ use store::{
roaring::RoaringBitmap,
write::{AlignedBytes, Archive, BatchBuilder, TaskEpoch, TaskQueueClass, ValueClass},
};
use trc::AddContext;
use types::{
acl::Acl,
collection::{Collection, VanishedCollection},
@@ -277,17 +278,28 @@ impl<T: SessionStream> SessionData<T> {
}
// Assign IMAP UIDs
for uid_mailbox in &mut new_data.mailboxes {
if uid_mailbox.uid == 0 {
let assigned_uid = self
.server
.assign_imap_uid(account_id, uid_mailbox.mailbox_id)
.await
.imap_ctx(&arguments.tag, trc::location!())?;
debug_assert!(assigned_uid > 0);
copied_ids.push((imap_id.uid, assigned_uid));
uid_mailbox.uid = assigned_uid;
}
let ids = self
.server
.assign_email_ids(
account_id,
new_data
.mailboxes
.iter()
.filter(|m| m.uid == 0)
.map(|m| m.mailbox_id),
false,
)
.await
.caused_by(trc::location!())?;
for (uid_mailbox, uid) in new_data
.mailboxes
.iter_mut()
.filter(|m| m.uid == 0)
.zip(ids)
{
copied_ids.push((imap_id.uid, uid));
uid_mailbox.uid = uid;
}
// Prepare write batch