[Store] Make scheme more generic
This commit is contained in:
parent
d1989b480f
commit
8e7c2a3f5b
|
@ -63,11 +63,9 @@ class Store {
|
||||||
print(
|
print(
|
||||||
"[Store] Migrate databse from version $oldVersion to $newVersion");
|
"[Store] Migrate databse from version $oldVersion to $newVersion");
|
||||||
if (oldVersion != newVersion) {
|
if (oldVersion != newVersion) {
|
||||||
await db.execute("DROP TABLE IF EXISTS Rooms");
|
await schemes.forEach((name, scheme) async {
|
||||||
await db.execute("DROP TABLE IF EXISTS Participants");
|
await db.execute("DROP TABLE IF EXISTS ?", [name]);
|
||||||
await db.execute("DROP TABLE IF EXISTS Users");
|
});
|
||||||
await db.execute("DROP TABLE IF EXISTS Events");
|
|
||||||
await db.execute("DROP TABLE IF EXISTS NotificationsCache");
|
|
||||||
db.rawUpdate("UPDATE Clients SET prev_batch='' WHERE client=?",
|
db.rawUpdate("UPDATE Clients SET prev_batch='' WHERE client=?",
|
||||||
[client.clientName]);
|
[client.clientName]);
|
||||||
await createTables(db);
|
await createTables(db);
|
||||||
|
@ -99,11 +97,9 @@ class Store {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> createTables(Database db) async {
|
Future<void> createTables(Database db) async {
|
||||||
await db.execute(ClientsScheme);
|
await schemes.forEach((name, scheme) async {
|
||||||
await db.execute(RoomsScheme);
|
await db.execute(scheme);
|
||||||
await db.execute(UserScheme);
|
});
|
||||||
await db.execute(EventsScheme);
|
|
||||||
await db.execute(NotificationsCacheScheme);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> queryPrevBatch() async {
|
Future<String> queryPrevBatch() async {
|
||||||
|
@ -133,9 +129,9 @@ class Store {
|
||||||
Future<void> clear() async {
|
Future<void> clear() async {
|
||||||
await _db
|
await _db
|
||||||
.rawDelete("DELETE FROM Clients WHERE client=?", [client.clientName]);
|
.rawDelete("DELETE FROM Clients WHERE client=?", [client.clientName]);
|
||||||
await _db.rawDelete("DELETE FROM Rooms");
|
await schemes.forEach((name, scheme) async {
|
||||||
await _db.rawDelete("DELETE FROM Users");
|
if (name != "Clients") await db.rawDelete("DELETE FROM ?", [name]);
|
||||||
await _db.rawDelete("DELETE FROM Events");
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,8 +670,9 @@ class Store {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static final Map<String, String> schemes = {
|
||||||
/// The database scheme for the Client class.
|
/// The database scheme for the Client class.
|
||||||
static final String ClientsScheme = 'CREATE TABLE IF NOT EXISTS Clients(' +
|
"Clients": 'CREATE TABLE IF NOT EXISTS Clients(' +
|
||||||
'client TEXT PRIMARY KEY, ' +
|
'client TEXT PRIMARY KEY, ' +
|
||||||
'token TEXT, ' +
|
'token TEXT, ' +
|
||||||
'homeserver TEXT, ' +
|
'homeserver TEXT, ' +
|
||||||
|
@ -685,10 +682,10 @@ class Store {
|
||||||
'prev_batch TEXT, ' +
|
'prev_batch TEXT, ' +
|
||||||
'matrix_versions TEXT, ' +
|
'matrix_versions TEXT, ' +
|
||||||
'lazy_load_members INTEGER, ' +
|
'lazy_load_members INTEGER, ' +
|
||||||
'UNIQUE(client))';
|
'UNIQUE(client))',
|
||||||
|
|
||||||
/// The database scheme for the Room class.
|
/// The database scheme for the Room class.
|
||||||
static final String RoomsScheme = 'CREATE TABLE IF NOT EXISTS Rooms(' +
|
"Rooms": 'CREATE TABLE IF NOT EXISTS Rooms(' +
|
||||||
'id TEXT PRIMARY KEY, ' +
|
'id TEXT PRIMARY KEY, ' +
|
||||||
'membership TEXT, ' +
|
'membership TEXT, ' +
|
||||||
'topic TEXT, ' +
|
'topic TEXT, ' +
|
||||||
|
@ -725,10 +722,10 @@ class Store {
|
||||||
'power_event_aliases INTEGER, ' +
|
'power_event_aliases INTEGER, ' +
|
||||||
'power_event_name INTEGER, ' +
|
'power_event_name INTEGER, ' +
|
||||||
'power_event_power_levels INTEGER, ' +
|
'power_event_power_levels INTEGER, ' +
|
||||||
'UNIQUE(id))';
|
'UNIQUE(id))',
|
||||||
|
|
||||||
/// The database scheme for the Event class.
|
/// The database scheme for the Event class.
|
||||||
static final String EventsScheme = 'CREATE TABLE IF NOT EXISTS Events(' +
|
"Events": 'CREATE TABLE IF NOT EXISTS Events(' +
|
||||||
'id TEXT PRIMARY KEY, ' +
|
'id TEXT PRIMARY KEY, ' +
|
||||||
'chat_id TEXT, ' +
|
'chat_id TEXT, ' +
|
||||||
'origin_server_ts INTEGER, ' +
|
'origin_server_ts INTEGER, ' +
|
||||||
|
@ -738,23 +735,23 @@ class Store {
|
||||||
'type TEXT, ' +
|
'type TEXT, ' +
|
||||||
'content_json TEXT, ' +
|
'content_json TEXT, ' +
|
||||||
"status INTEGER, " +
|
"status INTEGER, " +
|
||||||
'UNIQUE(id))';
|
'UNIQUE(id))',
|
||||||
|
|
||||||
/// The database scheme for the User class.
|
/// The database scheme for the User class.
|
||||||
static final String UserScheme = 'CREATE TABLE IF NOT EXISTS Users(' +
|
"Users": 'CREATE TABLE IF NOT EXISTS Users(' +
|
||||||
'chat_id TEXT, ' + // The chat id of this membership
|
'chat_id TEXT, ' + // The chat id of this membership
|
||||||
'matrix_id TEXT, ' + // The matrix id of this user
|
'matrix_id TEXT, ' + // The matrix id of this user
|
||||||
'displayname TEXT, ' +
|
'displayname TEXT, ' +
|
||||||
'avatar_url TEXT, ' +
|
'avatar_url TEXT, ' +
|
||||||
'membership TEXT, ' + // The status of the membership. Must be one of [join, invite, ban, leave]
|
'membership TEXT, ' + // The status of the membership. Must be one of [join, invite, ban, leave]
|
||||||
'power_level INTEGER, ' + // The power level of this user. Must be in [0,..,100]
|
'power_level INTEGER, ' + // The power level of this user. Must be in [0,..,100]
|
||||||
'UNIQUE(chat_id, matrix_id))';
|
'UNIQUE(chat_id, matrix_id))',
|
||||||
|
|
||||||
/// The database scheme for the NotificationsCache class.
|
/// The database scheme for the NotificationsCache class.
|
||||||
static final String NotificationsCacheScheme =
|
"NotificationsCache": 'CREATE TABLE IF NOT EXISTS NotificationsCache(' +
|
||||||
'CREATE TABLE IF NOT EXISTS NotificationsCache(' +
|
|
||||||
'id int PRIMARY KEY, ' +
|
'id int PRIMARY KEY, ' +
|
||||||
'chat_id TEXT, ' + // The chat id
|
'chat_id TEXT, ' + // The chat id
|
||||||
'event_id TEXT, ' + // The matrix id of the Event
|
'event_id TEXT, ' + // The matrix id of the Event
|
||||||
'UNIQUE(event_id))';
|
'UNIQUE(event_id))',
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue