From 114e5c8228eeabb4197799dd1ba36fdc5d94ac32 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Thu, 30 Apr 2020 10:09:27 +0200
Subject: [PATCH] More atomic queries (because of multithreading)

---
 src/database/queue.c    | 13 ++++++-------
 src/database/stickers.c |  7 ++-----
 2 files changed, 8 insertions(+), 12 deletions(-)

diff --git a/src/database/queue.c b/src/database/queue.c
index bd5a5dc2..78abdd7b 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -380,9 +380,11 @@ bool
 database_queue_clear(sqlite3 *db)
 {
     static const char *SQL_STMT =
+        "BEGIN TRANSACTION;"
         "DELETE FROM queue;"
         "DELETE FROM sqlite_sequence WHERE name = 'queue';"
-        "UPDATE queue_state SET current = NULL;";
+        "UPDATE queue_state SET current = NULL;"
+        "COMMIT TRANSACTION;";
     SQLITE_EXEC(db, SQL_STMT, error);
     return true;
 error:
@@ -578,11 +580,9 @@ database_queue_shuffle(sqlite3 *db)
         "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';"
         /* Set the current to the right kara when needed.  */
         "UPDATE queue_state"
-        "  SET current ="
-        "  CASE"
+        "  SET current = CASE"
         "    WHEN current NOT NULL THEN 1"
-        "    ELSE NULL"
-        "  END;"
+        "    ELSE NULL END;"
         "COMMIT;";
     SQLITE_EXEC(db, SQL, error);
     return true;
@@ -600,8 +600,7 @@ database_queue_list(sqlite3 *db, size_t from, size_t to, struct lkt_callback *ca
         "  JOIN kara ON kara_id = kara.id"
         "  WHERE position >= ? AND position <= ?"
         "  GROUP BY position ORDER BY position)"
-        "SELECT id, string, (SELECT MAX(len) FROM content)"
-        " FROM content;";
+        "SELECT id, string, (SELECT MAX(len) FROM content) FROM content;";
     int code, id, id_len;
     const char *row;
     bool ret = false;
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 9d172285..0130cfb7 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -13,9 +13,7 @@ database_sticker_create(sqlite3 *db, const char *name)
     static const char *INSERT =
         "WITH id_max (id) AS (SELECT MAX(id) FROM 'stickers')"
         "INSERT INTO 'stickers' (id, name)"
-        " SELECT"
-        "  CASE WHEN id_max.id IS NULL THEN 1 ELSE id_max.id + 1 END,"
-        "  ?"
+        " SELECT CASE WHEN id_max.id IS NULL THEN 1 ELSE id_max.id + 1 END, ?"
         " FROM id_max"
         "WHERE NOT EXISTS (SELECT 1 FROM 'stickers' WHERE name = ?);";
     sqlite3_stmt *stmt;
@@ -34,8 +32,7 @@ error:
 bool
 database_sticker_delete(sqlite3 *db, const char *name)
 {
-    static const char *INSERT =
-        "DELETE FROM 'stickers' WHERE name = ?;";
+    static const char *INSERT = "DELETE FROM 'stickers' WHERE name = ?;";
     sqlite3_stmt *stmt;
     int ret = false;
     RETURN_IF(strlen(name) == 0, "A sticker name must be at least one character long", ret);
-- 
GitLab