On Mon, 01 Nov 2004 13:27:59 +0100, Hans Kristian Rosbach <[EMAIL PROTECTED]> wrote: > > > > So, in order to get one message we need to look it up in this order: > > Users->Mailboxes->Physmessages->mailblks > > > > Well, this sucks.. But I guess it's nice for IMAP users. But does
No, it doesn't suck. Explanation below. :) > > people actually copy messages that much? I've never done so myself, > > and I don't really see any big use for it. In my openion it is not > > worth it to make everything else slow and complex in order to speed > > up a seldomly used function. The move argument is not true I think, > > couldn't that be just as easily done using a simple update? > > Well, I've taken a good look at it again.. And I cannot really see > that this is true.. You cannot do a copy using an update. > > Physmessages is not a layer between Mailboxes and Mailblks. Roel's original idea was a layer between mailboxes and messages. I changed that to a layer between messages and messageblocks. > > Physmessages only contains one id (it's own), and both > Mailboxes and Mailblks point to physmessages using that id. > So I still see no gain from using the Physmessages table. > > CREATE SEQUENCE dbmail_physmessage_id_seq; > CREATE TABLE dbmail_physmessage ( > id INT8 DEFAULT nextval('dbmail_physmessage_id_seq'), > messagesize INT8 DEFAULT '0' NOT NULL, > rfcsize INT8 DEFAULT '0' NOT NULL, > internal_date TIMESTAMP WITHOUT TIME ZONE, > PRIMARY KEY(id) > ); > > See, it would need another id in there to be able to point > one mailblks into several mailboxes. > > Once again.. Is there any logic behind this in it's current layout? I think you're a bit confused. Your earlier point that DBMail database layout needs documentation is very valid here. Let me try to explain how the physmessage (for physical message) works. A message in the messages table can be called a virtual message, but I'll just refer to it as 'message': Originally (dbmail 1.x) , when copying a message the following woudl happen: 1. a new entry in the messages table was made. 2. the message blocks of the original message was copied step 2 costs a lot of time. As IMAP COPY commands are very frequent (e.g. when moving a lot of messages from one mailbox to another) I created a layer in between: an entry physmessage in physmessage is related to one or more messagblocks. every message in the messages table points to *one* physmessage entry. However, there can be several messages pointing at the same physmessage entry. Now, a copy will result in the following operation: 1. enter a new record in the messages table pointing at the same physmessage. This is fast. And certainly much faster than copying the whole message to a new set of message blocks. The new entry in messages still has it's own set of flags, so they can be set independently. Hope this clears things up. Ilja