# Make mrbs_entry.repeat_id a foreign key # Previously repeat_id was set to zero if there was no repeat. # However this breaks our foreign key constraint so we have to modify # the repeat_id column before we can create the foreign key. /* Temporary copy of timestamp column */ ALTER TABLE %DB_TBL_PREFIX%entry ADD COLUMN saved_ts DATETIME; UPDATE %DB_TBL_PREFIX%entry SET saved_ts=timestamp; ALTER TABLE %DB_TBL_PREFIX%entry MODIFY COLUMN repeat_id int DEFAULT NULL; UPDATE %DB_TBL_PREFIX%entry SET repeat_id=NULL WHERE repeat_id=0; # Tidy up the database getting rid of any zombie rows which would prevent # the foreign key being created. Note that these rows will not be visible to users # and admins through MRBS. They have most likely been created when a row has been # deleted from a table using a database admin tool, rather than through MRBS. Of course, # foreign keys will stop this happening in the future. DELETE FROM %DB_TBL_PREFIX%entry WHERE repeat_id IS NOT NULL AND repeat_id NOT IN (SELECT id FROM %DB_TBL_PREFIX%repeat); DELETE FROM %DB_TBL_PREFIX%repeat WHERE id NOT IN (SELECT repeat_id FROM %DB_TBL_PREFIX%entry WHERE repeat_id IS NOT NULL); ALTER TABLE %DB_TBL_PREFIX%entry ADD FOREIGN KEY (repeat_id) REFERENCES %DB_TBL_PREFIX%repeat(id) ON UPDATE CASCADE ON DELETE CASCADE; /* Put the table back to how it was */ UPDATE %DB_TBL_PREFIX%entry SET timestamp=saved_ts; ALTER TABLE %DB_TBL_PREFIX%entry DROP COLUMN saved_ts;