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