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;