From 46611dcf0f4c5776ce08f1c336335541a2c53b79 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Tue, 10 Oct 2017 10:50:33 +0200 Subject: [PATCH] feat(EventsDb): can clean messages history --- src/db/events-db.cpp | 33 +++++++++++++++++++++++++-------- src/db/events-db.h | 3 ++- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/db/events-db.cpp b/src/db/events-db.cpp index 000f41ac1..65da14503 100644 --- a/src/db/events-db.cpp +++ b/src/db/events-db.cpp @@ -379,11 +379,11 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} *session << "CREATE TABLE IF NOT EXISTS chat_room_participant (" - " id" + primaryKeyAutoIncrementStr() + "," " chat_room_id INT UNSIGNED NOT NULL," " sip_address_id INT UNSIGNED NOT NULL," " is_admin BOOLEAN NOT NULL," + " PRIMARY KEY (chat_room_id, sip_address_id)," " FOREIGN KEY (chat_room_id)" " REFERENCES chat_room(peer_sip_address_id)" " ON DELETE CASCADE," @@ -428,7 +428,7 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} " PRIMARY KEY (message_event_id, sip_address_id)," " FOREIGN KEY (message_event_id)" - " REFERENCES message_event(id)" + " REFERENCES message_event(event_id)" " ON DELETE CASCADE," " FOREIGN KEY (sip_address_id)" " REFERENCES sip_address(id)" @@ -441,8 +441,9 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} " message_event_id INT UNSIGNED NOT NULL," " content_type_id INT UNSIGNED NOT NULL," " body TEXT NOT NULL," + " FOREIGN KEY (message_event_id)" - " REFERENCES message_event(id)" + " REFERENCES message_event(event_id)" " ON DELETE CASCADE," " FOREIGN KEY (content_type_id)" " REFERENCES content_type(id)" @@ -451,12 +452,13 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} *session << "CREATE TABLE IF NOT EXISTS message_crypto_data (" - " id" + primaryKeyAutoIncrementStr() + "," " message_event_id INT UNSIGNED NOT NULL," + " key VARCHAR(255)," " data BLOB," + " PRIMARY KEY (message_event_id, key)," " FOREIGN KEY (message_event_id)" - " REFERENCES message_event(id)" + " REFERENCES message_event(event_id)" " ON DELETE CASCADE" ")"; } @@ -633,14 +635,29 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {} return list>(); } - void EventsDb::cleanHistory (const string &peerAddress) { + void EventsDb::cleanHistory (const string &peerAddress, FilterMask mask) { + L_D(); + + // TODO: Deal with mask. + (void)mask; + if (!isConnected()) { lWarning() << "Unable to clean history. Not connected."; return; } - // TODO. - (void)peerAddress; + L_BEGIN_LOG_EXCEPTION + + soci::session *session = d->dbSession.getBackendSession(); + *session << "DELETE FROM event WHERE id = (" + " SELECT event_id FROM message_event WHERE chat_room_id = (" + " SELECT peer_sip_address_id FROM chat_room WHERE peer_sip_address_id = (" + " SELECT id FROM sip_address WHERE value = :peerAddress" + " )" + " )" + ")"; + + L_END_LOG_EXCEPTION } // ----------------------------------------------------------------------------- diff --git a/src/db/events-db.h b/src/db/events-db.h index 030ff7eeb..d582f5149 100644 --- a/src/db/events-db.h +++ b/src/db/events-db.h @@ -64,8 +64,9 @@ public: int end, FilterMask mask = NoFilter ) const; - void cleanHistory (const std::string &peerAddress = ""); + void cleanHistory (const std::string &peerAddress = "", FilterMask mask = NoFilter); + // Import legacy messages from old db. bool import (Backend backend, const std::string ¶meters) override; protected: