package org.dodgybits.shuffle.android.persistence.migrations; import org.dodgybits.shuffle.android.persistence.provider.ReminderProvider; import org.dodgybits.shuffle.android.persistence.provider.TaskProvider; import android.database.sqlite.SQLiteDatabase; public class V11Migration extends AbstractMigration { @Override public void migrate(SQLiteDatabase db) { // Shuffle v1.1.1 (2nd release) db.execSQL("ALTER TABLE " + TaskProvider.TASK_TABLE_NAME + " ADD COLUMN start INTEGER;"); db.execSQL("ALTER TABLE " + TaskProvider.TASK_TABLE_NAME + " ADD COLUMN timezone TEXT;"); db.execSQL("ALTER TABLE " + TaskProvider.TASK_TABLE_NAME + " ADD COLUMN allDay INTEGER NOT NULL DEFAULT 0;"); db.execSQL("ALTER TABLE " + TaskProvider.TASK_TABLE_NAME + " ADD COLUMN hasAlarm INTEGER NOT NULL DEFAULT 0;"); db.execSQL("ALTER TABLE " + TaskProvider.TASK_TABLE_NAME + " ADD COLUMN calEventId INTEGER;"); db.execSQL("UPDATE " + TaskProvider.TASK_TABLE_NAME + " SET start = due;"); db.execSQL("UPDATE " + TaskProvider.TASK_TABLE_NAME + " SET allDay = 1 " + "WHERE due > 0;"); createRemindersTable(db); createRemindersEventIdIndex(db); createTaskCleanupTrigger(db); // no break since we want it to fall through } private void createRemindersTable(SQLiteDatabase db) { db.execSQL("DROP TABLE IF EXISTS " + ReminderProvider.cReminderTableName); db.execSQL("CREATE TABLE " + ReminderProvider.cReminderTableName + " (" + "_id INTEGER PRIMARY KEY," + "taskId INTEGER," + "minutes INTEGER," + "method INTEGER NOT NULL" + " DEFAULT " + ReminderProvider.Reminders.METHOD_DEFAULT + ");"); } private void createRemindersEventIdIndex(SQLiteDatabase db) { db.execSQL("DROP INDEX IF EXISTS remindersEventIdIndex"); db.execSQL("CREATE INDEX remindersEventIdIndex ON " + ReminderProvider.cReminderTableName + " (" + ReminderProvider.Reminders.TASK_ID + ");"); } private void createTaskCleanupTrigger(SQLiteDatabase db) { // Trigger to remove data tied to a task when we delete that task db.execSQL("DROP TRIGGER IF EXISTS tasks_cleanup_delete"); db.execSQL("CREATE TRIGGER tasks_cleanup_delete DELETE ON " + TaskProvider.TASK_TABLE_NAME + " BEGIN " + "DELETE FROM " + ReminderProvider.cReminderTableName + " WHERE taskId = old._id;" + "END"); } }