From 53fb0a9754952053f584c772c1aaa66c26d171f6 Mon Sep 17 00:00:00 2001 From: Pascal Fischer Date: Tue, 14 Nov 2023 17:40:14 +0100 Subject: [PATCH 1/2] refactor activity get queries to only consider 1 deleted user entry --- management/server/activity/sqlite/sqlite.go | 30 ++++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/management/server/activity/sqlite/sqlite.go b/management/server/activity/sqlite/sqlite.go index a5130b0c5..1eefa573a 100644 --- a/management/server/activity/sqlite/sqlite.go +++ b/management/server/activity/sqlite/sqlite.go @@ -14,7 +14,7 @@ import ( ) const ( - //eventSinkDB is the default name of the events database + // eventSinkDB is the default name of the events database eventSinkDB = "events.db" createTableQuery = "CREATE TABLE IF NOT EXISTS events " + "(id INTEGER PRIMARY KEY AUTOINCREMENT, " + @@ -28,16 +28,32 @@ const ( creatTableDeletedUsersQuery = `CREATE TABLE IF NOT EXISTS deleted_users (id TEXT NOT NULL, email TEXT NOT NULL, name TEXT);` selectDescQuery = `SELECT events.id, activity, timestamp, initiator_id, i.name as "initiator_name", i.email as "initiator_email", target_id, t.name as "target_name", t.email as "target_email", account_id, meta - FROM events - LEFT JOIN deleted_users i ON events.initiator_id = i.id - LEFT JOIN deleted_users t ON events.target_id = t.id + FROM events + LEFT JOIN ( + SELECT id, MAX(name) as name, MAX(email) as email + FROM deleted_users + GROUP BY id + ) i ON events.initiator_id = i.id + LEFT JOIN ( + SELECT id, MAX(name) as name, MAX(email) as email + FROM deleted_users + GROUP BY id + ) t ON events.target_id = t.id WHERE account_id = ? ORDER BY timestamp DESC LIMIT ? OFFSET ?;` selectAscQuery = `SELECT events.id, activity, timestamp, initiator_id, i.name as "initiator_name", i.email as "initiator_email", target_id, t.name as "target_name", t.email as "target_email", account_id, meta - FROM events - LEFT JOIN deleted_users i ON events.initiator_id = i.id - LEFT JOIN deleted_users t ON events.target_id = t.id + FROM events + LEFT JOIN ( + SELECT id, MAX(name) as name, MAX(email) as email + FROM deleted_users + GROUP BY id + ) i ON events.initiator_id = i.id + LEFT JOIN ( + SELECT id, MAX(name) as name, MAX(email) as email + FROM deleted_users + GROUP BY id + ) t ON events.target_id = t.id WHERE account_id = ? ORDER BY timestamp ASC LIMIT ? OFFSET ?;` From 9eb1e90bbe1118edf766f53b5ed8718a8a61ea12 Mon Sep 17 00:00:00 2001 From: Pascal Fischer Date: Wed, 15 Nov 2023 11:21:59 +0100 Subject: [PATCH 2/2] refactor activity get queries to only add comment --- management/server/activity/sqlite/sqlite.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/management/server/activity/sqlite/sqlite.go b/management/server/activity/sqlite/sqlite.go index 1eefa573a..b54db5276 100644 --- a/management/server/activity/sqlite/sqlite.go +++ b/management/server/activity/sqlite/sqlite.go @@ -60,6 +60,14 @@ const ( insertQuery = "INSERT INTO events(activity, timestamp, initiator_id, target_id, account_id, meta) " + "VALUES(?, ?, ?, ?, ?, ?)" + /* + TODO: + The insert should avoid duplicated IDs in the table. So the query should be changes to something like: + `INSERT INTO deleted_users(id, email, name) VALUES(?, ?, ?) ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email, name = EXCLUDED.name;` + For this to work we have to set the id column as primary key. But this is not possible because the id column is not unique + and some selfhosted deployments might have duplicates already so we need to clean the table first. + */ + insertDeleteUserQuery = `INSERT INTO deleted_users(id, email, name) VALUES(?, ?, ?)` fallbackName = "unknown"