diff --git a/src/database/queue.c b/src/database/queue.c index a9aba9847a8a44bd977e01c7be86d6f86c34229c..2486074a8290fd5b32381d2e1862e62f12b0e335 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -35,6 +35,19 @@ sqlite_just_exec(database_queue_flat, "UPDATE queue SET priority = 1;" #undef sqlite_just_exec // *INDENT-ON* +static inline void +__queue_resequence(volatile sqlite3 *db) +{ + static const char *SQL = + "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';"; + SQLITE_EXEC(db, SQL, error); + LOG_INFO("DB", "Re-sequenced the queue"); + return; +error: + LOG_ERROR("DB", "Failed to update the " LKT_PROTECTED_DATABASE ".sqlite_sequence table..."); + return; +} + bool database_queue_set_paused(volatile sqlite3 *db, bool paused) { @@ -148,7 +161,7 @@ __queue_reorder(volatile sqlite3 *db) " ORDER BY priority DESC, position ASC;" "DELETE FROM queue WHERE position > " CURRENT_POS_OR_0 ";" /* Update the sqlite_sequence table */ - "UPDATE sqlite_sequence SET seq = " CURRENT_POS_OR_0 " WHERE name = 'queue';" + "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = " CURRENT_POS_OR_0 " WHERE name = 'queue';" /* Insert back */ "INSERT INTO queue (position, kara_id, priority)" " SELECT position + " CURRENT_POS_OR_0 ", kara_id, priority" @@ -304,7 +317,7 @@ database_queue_del_id(volatile sqlite3 *db, int id) "INSERT INTO queue_tmp(priority, position, kara_id) SELECT priority, position, kara_id FROM queue ORDER BY position ASC;" "DELETE FROM queue;" "INSERT INTO queue(priority, position, kara_id) SELECT priority, ROW_NUMBER() OVER(ORDER BY position ASC), kara_id FROM queue_tmp;" - "UPDATE sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';" /* Update the sqlite_sequence */ + "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence SET seq = (SELECT COUNT(*) FROM queue) WHERE name = 'queue';" /* Update the sqlite_sequence */ /* Clear the TMP */ "DELETE FROM queue_tmp;" "DELETE FROM sqlite_sequence WHERE name = 'queue_tmp';" @@ -312,6 +325,7 @@ database_queue_del_id(volatile sqlite3 *db, int id) char SQL[LKT_MAX_SQLITE_STATEMENT]; safe_snprintf(SQL, LKT_MAX_SQLITE_STATEMENT, SQL_TEMPLATE, id, id); SQLITE_EXEC(db, SQL, error); + __queue_resequence(db); return true; error: SQLITE_DO_ROLLBACK(db); @@ -344,13 +358,13 @@ database_queue_del_pos(volatile sqlite3 *db, int pos) " FROM queue;" /* Re-init positions in the queue */ "DELETE FROM queue;" - "DELETE FROM sqlite_sequence WHERE name = 'queue';" + "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" /* Insert back all karas */ "INSERT INTO queue (kara_id, priority, position)" " SELECT kara_id, priority, position" " FROM queue_tmp;" /* Slap correct values here */ - "UPDATE sqlite_sequence" + "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence" " SET seq = (SELECT COUNT(position) FROM queue)" " WHERE name = 'queue';" "DELETE FROM queue_tmp;" @@ -369,6 +383,7 @@ database_queue_del_pos(volatile sqlite3 *db, int pos) error_in_delete_or_update: if (sta) { /* Commit transaction, if failed use a magnificient goto... */ + __queue_resequence(db); SQLITE_EXEC(db, "END TRANSACTION;", error_rollback); } @@ -510,7 +525,7 @@ database_queue_swap(volatile sqlite3 *db, int from, int to) static const char *SQL_POP_ROW_2 = "DELETE FROM queue WHERE position = ?;"; static const char *SQL_SLAP_MAX = - "UPDATE sqlite_sequence" + "UPDATE " LKT_PROTECTED_DATABASE ".sqlite_sequence" " SET seq = (SELECT COUNT(position) FROM queue)" " WHERE name = 'queue';"; static const char *SQL_PUSH_ROW = @@ -616,7 +631,7 @@ database_queue_move(volatile sqlite3 *db, int from, int to) " WHERE kara_id=(SELECT kara_id FROM queue WHERE position = current))" " ELSE NULL END;" "DELETE FROM queue;" - "DELETE FROM sqlite_sequence WHERE name = 'queue';" + "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" "INSERT INTO queue(position, kara_id, priority)" " SELECT position, kara_id, priority FROM queue_tmp ORDER BY priority, position;" /* Clean queue_tmp */ @@ -797,7 +812,7 @@ database_queue_shuffle(volatile sqlite3 *db) " ORDER BY RANDOM();" /* Do the insertion in the other way */ "DELETE FROM queue;" - "DELETE FROM sqlite_sequence WHERE name = 'queue';" + "DELETE FROM " LKT_PROTECTED_DATABASE ".sqlite_sequence WHERE name = 'queue';" "INSERT INTO queue (position, kara_id, priority)" " SELECT position, kara_id, priority" " FROM queue_tmp"