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

Commit 9254e7a0 authored by cketti's avatar cketti
Browse files

Add database migration to clean up orphaned data

Also extend database trigger to remove entries from messages_fulltext.
parent cd0075a7
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line 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;
    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) {
    public static String getColumnNameForFlag(Flag flag) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -205,6 +205,7 @@ class StoreSchemaDefinition implements LockableDatabase.SchemaDefinition {
                "BEFORE DELETE ON messages " +
                "BEFORE DELETE ON messages " +
                "BEGIN " +
                "BEGIN " +
                "DELETE FROM message_parts WHERE root = OLD.message_part_id; " +
                "DELETE FROM message_parts WHERE root = OLD.message_part_id; " +
                "DELETE FROM messages_fulltext WHERE docid = OLD.id; " +
                "END");
                "END");


        db.execSQL("DROP TABLE IF EXISTS messages_fulltext");
        db.execSQL("DROP TABLE IF EXISTS messages_fulltext");
+31 −0
Original line number Original line 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 Original line Diff line number Diff line
@@ -68,6 +68,9 @@ public class Migrations {
                MigrationTo56.cleanUpFtsTable(db);
                MigrationTo56.cleanUpFtsTable(db);
            case 56:
            case 56:
                MigrationTo57.fixDataLocationForMultipartParts(db);
                MigrationTo57.fixDataLocationForMultipartParts(db);
            case 57:
                MigrationTo58.cleanUpOrphanedData(db);
                MigrationTo58.createDeleteMessageTrigger(db);
        }
        }
    }
    }
}
}