Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e102a57 authored by cketti's avatar cketti Committed by GitHub
Browse files

Merge pull request #2137 from k9mail/GH-2103_fix_database_trigger

Add database migration to clean up orphaned data
parents 6738b497 9254e7a0
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ public class LocalStore extends Store implements Serializable {
     */
    private static final int THREAD_FLAG_UPDATE_BATCH_SIZE = 500;

    public static final int DB_VERSION = 57;
    public static final int DB_VERSION = 58;


    public static String getColumnNameForFlag(Flag flag) {
+2 −1
Original line number Diff line number Diff line
@@ -205,6 +205,7 @@ class StoreSchemaDefinition implements LockableDatabase.SchemaDefinition {
                "BEFORE DELETE ON messages " +
                "BEGIN " +
                "DELETE FROM message_parts WHERE root = OLD.message_part_id; " +
                "DELETE FROM messages_fulltext WHERE docid = OLD.id; " +
                "END");

        db.execSQL("DROP TABLE IF EXISTS messages_fulltext");
+31 −0
Original line number Diff line number Diff line
package com.fsck.k9.mailstore.migrations;


import android.database.sqlite.SQLiteDatabase;


class MigrationTo58 {
    static void cleanUpOrphanedData(SQLiteDatabase db) {
        cleanUpFtsTable(db);
        cleanUpMessagePartsTable(db);
    }
    
    private static void cleanUpFtsTable(SQLiteDatabase db) {
        MigrationTo56.cleanUpFtsTable(db);
    }

    private static void cleanUpMessagePartsTable(SQLiteDatabase db) {
        db.execSQL("DELETE FROM message_parts WHERE root NOT IN " +
                "(SELECT message_part_id FROM messages WHERE deleted = 0)");
    }

    static void createDeleteMessageTrigger(SQLiteDatabase db) {
        db.execSQL("DROP TRIGGER IF EXISTS delete_message");
        db.execSQL("CREATE TRIGGER delete_message " +
                "BEFORE DELETE ON messages " +
                "BEGIN " +
                "DELETE FROM message_parts WHERE root = OLD.message_part_id; " +
                "DELETE FROM messages_fulltext WHERE docid = OLD.id; " +
                "END");
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -68,6 +68,9 @@ public class Migrations {
                MigrationTo56.cleanUpFtsTable(db);
            case 56:
                MigrationTo57.fixDataLocationForMultipartParts(db);
            case 57:
                MigrationTo58.cleanUpOrphanedData(db);
                MigrationTo58.createDeleteMessageTrigger(db);
        }
    }
}