On Wed, Oct 08, 2003 at 11:02:51PM -0400, Matthew T. O'Connor wrote:
> On Wed, 2003-10-08 at 09:05, Ilja Booij wrote:
> > Hi all,
> > 
> > The 2.0 branch of dbmail is becoming "stable". A lot of code has been
> > changed, almost all of it in the database layer.
> 
> Quick question, are there scripts available to change the database from
> a 1.1 -> 2.0?

I've attached one I've written for mysql/innodb.  You have to change the
constraint id for messageblks as returned by SHOW CREATE TABLE
messageblks.

Backup before using this.  Do not use on a production server.  No
warranty.  It may kill your cat.

xn
DROP TABLE IF EXISTS physmessage;
SET FOREIGN_KEY_CHECKS=0;

CREATE TABLE
        physmessage
(
        id BIGINT(21) NOT NULL PRIMARY KEY AUTO_INCREMENT,
        messagesize BIGINT(21) NOT NULL,
        rfcsize BIGINT(21) NOT NULL,
        internal_date DATETIME NOT NULL
);

INSERT INTO
        physmessage
(
        id,
        messagesize,
        rfcsize,
        internal_date
)
SELECT
        message_idnr,
        messagesize,
        rfcsize,
        internal_date
FROM
        messages; 

ALTER TABLE
        messages
ADD
        physmessage_id BIGINT(21) NOT NULL,
ADD INDEX
        (physmessage_id),
ADD FOREIGN KEY
        (physmessage_id) REFERENCES physmessage(id) ON DELETE CASCADE,
DROP
        messagesize,
DROP
        rfcsize,
DROP
        internal_date;

UPDATE
        messages
SET
        physmessage_id = message_idnr;

ALTER TABLE
        messageblks
DROP FOREIGN KEY
        0_2014, ###### CHANGE ME ######
CHANGE
        message_idnr physmessage_id BIGINT(21) NOT NULL;

ALTER TABLE
        messageblks
ADD FOREIGN KEY
        (physmessage_id) REFERENCES physmessage (id) ON DELETE CASCADE;

CREATE TEMPORARY TABLE
        tmp_users
SELECT
        u.*,
        sum(p.messagesize) AS curmail_size
FROM
        users u
LEFT JOIN mailboxes b ON b.owner_idnr = u.user_idnr
LEFT JOIN messages m ON m.mailbox_idnr = b.mailbox_idnr
LEFT JOIN physmessage p ON m.physmessage_id = p.id
GROUP BY
        u.user_idnr;

ALTER TABLE
        users
ADD
        curmail_size BIGINT(21) NOT NULL;

BEGIN;
DELETE FROM users;
INSERT INTO users SELECT * FROM tmp_users;
COMMIT;
DROP TABLE tmp_users;

SET FOREIGN_KEY_CHECKS=1;

Reply via email to