From 6c5bd63d18615210f9127ba2e6248f15705a4ed3 Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Mon, 4 May 2020 20:13:13 +0200
Subject: [PATCH] Fix delete_id (again)

---
 src/database/queue.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/database/queue.c b/src/database/queue.c
index 9de49722..8ff68e84 100644
--- a/src/database/queue.c
+++ b/src/database/queue.c
@@ -251,20 +251,21 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority)
 bool
 database_queue_del_id(volatile sqlite3 *db, int id)
 {
+    /* FIXME: Can't pop if its the last kara */
 #define POS_OF_ID "(SELECT position FROM queue WHERE kara_id = %d)"
     static const char *SQL_TEMPLATE =
         "BEGIN TRANSACTION;"
         "WITH before(pos) AS (SELECT position FROM queue JOIN queue_state WHERE position < current ORDER BY position DESC LIMIT 1) "
         "UPDATE queue_state SET current = CASE WHEN current IS NULL THEN NULL ELSE (SELECT pos FROM before) END WHERE current > " POS_OF_ID ";"
-        "UPDATE queue SET position = position - 1 WHERE position > " POS_OF_ID ";"
-        "DELETE FROM queue WHERE kara_id = %d LIMIT 1;"
-        "COMMIT TRANSACTION;";
+        "UPDATE OR REPLACE queue SET position = position - 1 WHERE position > " POS_OF_ID ";"
+        "COMMIT;";
 #undef POS_OF_ID
     char SQL[LKT_MAX_SQLITE_STATEMENT];
     safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE, id, id, id, id);
     SQLITE_EXEC(db, SQL, error);
     return true;
 error:
+    SQLITE_DO_ROLLBACK(db);
     return false;
 }
 
@@ -387,10 +388,11 @@ database_queue_clear(volatile sqlite3 *db)
         "DELETE FROM queue;"
         "DELETE FROM sqlite_sequence WHERE name = 'queue';"
         "UPDATE queue_state SET current = NULL;"
-        "COMMIT TRANSACTION;";
+        "COMMIT;";
     SQLITE_EXEC(db, SQL_STMT, error);
     return true;
 error:
+    SQLITE_DO_ROLLBACK(db);
     return false;
 }
 
@@ -417,7 +419,7 @@ database_queue_move(volatile sqlite3 *db, int from, int to)
         "BEGIN TRANSACTION;"
         "UPDATE queue SET position = position + 1 WHERE position >= ?;"
         "UPDATE queue SET position = ? WHERE position = ?;"
-        "COMMIT TRANSACTION;";
+        "COMMIT;";
     sqlite3_stmt *stmt = 0;
     bool ret = false;
     int code;
@@ -579,6 +581,7 @@ database_queue_shuffle(volatile sqlite3 *db)
     SQLITE_EXEC(db, SQL, error);
     return true;
 error:
+    SQLITE_DO_ROLLBACK(db);
     return false;
 }
 
-- 
GitLab