#1471 DB sanitizing to mitigate v1.12.4 upgrade issue
This commit is contained in:
parent
3f6ef0cdaf
commit
a32c0cf0f0
2 changed files with 22 additions and 1 deletions
|
@ -117,7 +117,7 @@ class SqfliteLocalMediaDb implements LocalMediaDb {
|
||||||
')');
|
')');
|
||||||
},
|
},
|
||||||
onUpgrade: LocalMediaDbUpgrader.upgradeDb,
|
onUpgrade: LocalMediaDbUpgrader.upgradeDb,
|
||||||
version: 14,
|
version: 15,
|
||||||
);
|
);
|
||||||
|
|
||||||
final maxIdRows = await _db.rawQuery('SELECT MAX(id) AS maxId FROM $entryTable');
|
final maxIdRows = await _db.rawQuery('SELECT MAX(id) AS maxId FROM $entryTable');
|
||||||
|
|
|
@ -50,6 +50,8 @@ class LocalMediaDbUpgrader {
|
||||||
await _upgradeFrom12(db);
|
await _upgradeFrom12(db);
|
||||||
case 13:
|
case 13:
|
||||||
await _upgradeFrom13(db);
|
await _upgradeFrom13(db);
|
||||||
|
case 14:
|
||||||
|
await _upgradeFrom14(db);
|
||||||
}
|
}
|
||||||
oldVersion++;
|
oldVersion++;
|
||||||
}
|
}
|
||||||
|
@ -479,4 +481,23 @@ class LocalMediaDbUpgrader {
|
||||||
await db.execute('ALTER TABLE $newEntryTable RENAME TO $entryTable;');
|
await db.execute('ALTER TABLE $newEntryTable RENAME TO $entryTable;');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<void> _upgradeFrom14(Database db) async {
|
||||||
|
debugPrint('upgrading DB from v14');
|
||||||
|
|
||||||
|
// no schema changes, but v1.12.4 may have corrupted the DB, so we sanitize it
|
||||||
|
|
||||||
|
// clear rebuildable tables
|
||||||
|
await db.delete(dateTakenTable, where: '1');
|
||||||
|
await db.delete(metadataTable, where: '1');
|
||||||
|
await db.delete(addressTable, where: '1');
|
||||||
|
await db.delete(trashTable, where: '1');
|
||||||
|
await db.delete(videoPlaybackTable, where: '1');
|
||||||
|
|
||||||
|
// remove rows referencing future entry IDs
|
||||||
|
final maxIdRows = await db.rawQuery('SELECT MAX(id) AS maxId FROM $entryTable');
|
||||||
|
final lastId = (maxIdRows.firstOrNull?['maxId'] as int?) ?? 0;
|
||||||
|
await db.delete(favouriteTable, where: 'id > ?', whereArgs: [lastId]);
|
||||||
|
await db.delete(coverTable, where: 'entryId > ?', whereArgs: [lastId]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue