diff --git a/src/database/queue.c b/src/database/queue.c index 73463e90d19b46d0ec40a1418f6a2639ec7afa52..c0cf57fd46b4ddcfba1d19c654cca7922db1ce94 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -252,17 +252,17 @@ database_queue_add_uri(volatile sqlite3 *db, struct lkt_uri *uri, int priority) bool database_queue_del_id(volatile sqlite3 *db, int id) { +#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 > (SELECT position FROM queue WHERE kara_id = %d);" + "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;"; +#undef POS_OF_ID char SQL[LKT_MAX_SQLITE_STATEMENT]; - snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id, id, id); + snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_TEMPLATE, id, id, id, id); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = '\0'; SQLITE_EXEC(db, SQL, error); return true;