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