mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 12:38:09 +00:00
feat(EventsDb): add a trigger to delete message_participant entries
This commit is contained in:
parent
26cc84140d
commit
2aa0652cc9
1 changed files with 22 additions and 1 deletions
|
|
@ -267,10 +267,11 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {}
|
|||
soci::use(static_cast<int>(state)), soci::use(messageEventId), soci::use(sipAddressId)
|
||||
);
|
||||
statement.execute(true);
|
||||
if (statement.get_affected_rows() == 0)
|
||||
if (statement.get_affected_rows() == 0 && state != ChatMessage::State::Displayed) {
|
||||
*session << "INSERT INTO message_participant (message_event_id, sip_address_id, state)"
|
||||
" VALUES (:messageEventId, :sipAddressId, :state)",
|
||||
soci::use(messageEventId), soci::use(sipAddressId), soci::use(static_cast<int>(state));
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
@ -526,6 +527,26 @@ EventsDb::EventsDb () : AbstractDb(*new EventsDbPrivate) {}
|
|||
" REFERENCES message_event(event_id)"
|
||||
" ON DELETE CASCADE"
|
||||
")";
|
||||
|
||||
// Trigger to delete participant_message cache entries.
|
||||
string displayedId = Utils::toString(static_cast<int>(ChatMessage::State::Displayed));
|
||||
string participantMessageDeleter =
|
||||
"CREATE TRIGGER IF NOT EXISTS message_participant_deleter"
|
||||
" AFTER UPDATE OF state ON message_participant FOR EACH ROW"
|
||||
" WHEN NEW.state = ";
|
||||
participantMessageDeleter += displayedId;
|
||||
participantMessageDeleter += " AND (SELECT COUNT(*) FROM ("
|
||||
" SELECT state FROM message_participant WHERE"
|
||||
" NEW.message_event_id = message_participant.message_event_id"
|
||||
" AND state <> ";
|
||||
participantMessageDeleter += displayedId;
|
||||
participantMessageDeleter += " LIMIT 1"
|
||||
" )) = 0"
|
||||
" BEGIN"
|
||||
" DELETE FROM message_participant WHERE NEW.message_event_id = message_participant.message_event_id;"
|
||||
" END";
|
||||
|
||||
*session << participantMessageDeleter;
|
||||
}
|
||||
|
||||
bool EventsDb::addEvent (const EventLog &eventLog) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue