[Store][NotificationsCache] Fixing issues that caused some cache errors

- Remove primary key
- make sure that the id is per room not per event to have no issues with the order that select returned
- Add asserts to detect any null values when testing
- up the db version as the schema changed

Took 16 minutes
This commit is contained in:
Marcel 2019-08-17 15:33:53 +02:00
parent 3c365bb884
commit c6f699aaff

View file

@ -55,7 +55,7 @@ class Store {
_init() async {
var databasePath = await getDatabasesPath();
String path = p.join(databasePath, "FluffyMatrix.db");
_db = await openDatabase(path, version: 11,
_db = await openDatabase(path, version: 12,
onCreate: (Database db, int version) async {
await createTables(db);
}, onUpgrade: (Database db, int oldVersion, int newVersion) async {
@ -665,19 +665,27 @@ class Store {
}
Future forgetNotification(String roomID) async {
assert(roomID != "");
await db
.rawDelete("DELETE FROM NotificationsCache WHERE chat_id=?", [roomID]);
return;
}
Future addNotification(String roomID, String event_id, int uniqueID) async {
await db.rawInsert("INSERT INTO NotificationsCache VALUES (?, ?,?)",
assert(roomID != "");
assert(event_id != "");
assert(uniqueID != "");
await db.rawInsert(
"INSERT INTO NotificationsCache(id, chat_id, event_id) VALUES (?, ?, ?)",
[uniqueID, roomID, event_id]);
// Make sure we got the same unique ID everywhere
await db.rawUpdate("UPDATE NotificationsCache SET id=? WHERE chat_id=?", [uniqueID, roomID]);
return;
}
Future<List<Map<String, dynamic>>> getNotificationByRoom(
String room_id) async {
assert(room_id != "");
List<Map<String, dynamic>> res = await db.rawQuery(
"SELECT * FROM NotificationsCache WHERE chat_id=?", [room_id]);
if (res.length == 0) return null;
@ -766,7 +774,7 @@ class Store {
/// The database scheme for the NotificationsCache class.
"NotificationsCache": 'CREATE TABLE IF NOT EXISTS NotificationsCache(' +
'id int PRIMARY KEY, ' +
'id int, ' +
'chat_id TEXT, ' + // The chat id
'event_id TEXT, ' + // The matrix id of the Event
'UNIQUE(event_id))',