From bf0275090a05fbf53300a1d8bcb9d278f7446628 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Blin?=
 <sebastien.blin@savoirfairelinux.com>
Date: Wed, 13 Nov 2019 10:24:39 -0500
Subject: [PATCH] lrc: fix clearAllHistory

and protect from crashes

Change-Id: I6012d545f24ab183809ee66153923a6153d86a30
---
 src/authority/storagehelper.cpp | 50 ++++++++++++++++++++++++---------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/src/authority/storagehelper.cpp b/src/authority/storagehelper.cpp
index e76e919b..0c14394d 100644
--- a/src/authority/storagehelper.cpp
+++ b/src/authority/storagehelper.cpp
@@ -609,30 +609,48 @@ conversationIdFromInteractionId(Database& db, unsigned int interactionId)
 void clearHistory(Database& db,
                   const std::string& conversationId)
 {
-    db.deleteFrom("interactions",
-                  "conversation=:conversation",
-                  {{":conversation", conversationId}});
+    try {
+        db.deleteFrom("interactions",
+                    "conversation=:conversation",
+                    {{":conversation", conversationId}});
+    } catch (Database::QueryDeleteError& e) {
+        qWarning() << "deleteFrom error: " << e.details().c_str();
+    }
 }
 
 void clearInteractionFromConversation(Database& db,
                                       const std::string& conversationId,
                                       const uint64_t& interactionId)
 {
-    db.deleteFrom("interactions",
-                  "conversation=:conversation AND id=:id",
-                  {{":conversation", conversationId},
-                  {":id", std::to_string(interactionId)}});
+    try {
+        db.deleteFrom("interactions",
+                    "conversation=:conversation AND id=:id",
+                    {{":conversation", conversationId},
+                    {":id", std::to_string(interactionId)}});
+    } catch (Database::QueryDeleteError& e) {
+        qWarning() << "deleteFrom error: " << e.details().c_str();
+    }
 }
 
 void clearAllHistory(Database& db)
 {
-    db.truncateTable("interactions");
+    try {
+        db.deleteFrom("interactions",
+                    "1=1",
+                    {});
+    } catch (Database::QueryDeleteError& e) {
+        qWarning() << "deleteFrom error: " << e.details().c_str();
+    }
 }
 
 void
 deleteObsoleteHistory(Database& db, long int date)
 {
-    db.deleteFrom("interactions", "timestamp<=:date", { {":date", std::to_string(date)} });
+    try {
+        db.deleteFrom("interactions", "timestamp<=:date", { {":date", std::to_string(date)} });
+    } catch (Database::QueryDeleteError& e) {
+        qWarning() << "deleteFrom error: " << e.details().c_str();
+    }
 }
 
 void
@@ -641,11 +659,15 @@ removeContact(Database& db, const std::string& contactUri)
     // Get common conversations
     auto conversations = getConversationsWithPeer(db, contactUri);
     // Remove conversations + interactions
-    for (const auto& conversationId: conversations) {
-        // Remove conversation
-        db.deleteFrom("conversations", "id=:id", {{":id", conversationId}});
-        // clear History
-        db.deleteFrom("interactions", "conversation=:id", {{":id", conversationId}});
+    try {
+        for (const auto& conversationId: conversations) {
+            // Remove conversation
+            db.deleteFrom("conversations", "id=:id", {{":id", conversationId}});
+            // clear History
+            db.deleteFrom("interactions", "conversation=:id", {{":id", conversationId}});
+        }
+    } catch (Database::QueryDeleteError& e) {
+        qWarning() << "deleteFrom error: " << e.details().c_str();
     }
 }
 
-- 
GitLab