diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h index faa7c53e097a36da8a1c61c6c7ded9122e4554c4..5cea0a50bd2172957af9beab44d3e069c59f4d14 100644 --- a/inc/lektor/macro.h +++ b/inc/lektor/macro.h @@ -1,12 +1,19 @@ #pragma once #define SQLITE_PREPARE(db, stmt, SQL, goto_label) \ - if (sqlite3_prepare_v2(db, SQL, -1, &stmt, 0) != SQLITE_OK) { \ + if (sqlite3_prepare_v2(db, SQL, -1, &(stmt), 0) != SQLITE_OK) { \ fprintf(stderr, " ! %s: Failed to prepare statement: %s\n", \ __func__, sqlite3_errmsg(db)); \ goto goto_label; \ } +#define SQLITE_EXEC(db, SQL, goto_label) \ + if (sqlite3_exec(db, SQL, NULL, NULL, NULL) != SQLITE_OK) { \ + fprintf(stderr, " ! %s: Failed to exec statement: %s\n", \ + __func__, sqlite3_errmsg(db)); \ + goto goto_label; \ + } + #define LKT_MAX_SQLITE_STATEMENT 1024 #define PROTECTED_DATABASE "disk" diff --git a/src/database/config.c b/src/database/config.c index 4dc40d1bdbd46e0a4d3e71dbfe05ce7111362e10..d931f9eebc11192dbef3727d6b8f11882775aae7 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -186,12 +186,10 @@ database_config_queue_default(sqlite3 *db) " duration = 0;" ; - if (sqlite3_exec(db, SQL_DEFAULT, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_config_default: Failed to execute statement: %s\n", sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_DEFAULT, error); return true; +error: + return false; } bool diff --git a/src/database/open.c b/src/database/open.c index 2e10b1946a615f943e12f772026568fc2d5d3d46..50e848d2f5e44ce493d87cba0db1cba75038f54a 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -78,11 +78,7 @@ database_new(sqlite3 **db) return false; } - if (sqlite3_exec(*db, SQL_MEM_SCHEM, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_open: Failed to initialize :memory: database\n"); - goto err_not_init; - } - + SQLITE_EXEC(*db, SQL_MEM_SCHEM, err_not_init); return true; err_not_init: *db = NULL; @@ -96,14 +92,9 @@ __attach(sqlite3 *db, const char *name, const char *path) size_t len = strlen(path) + strlen(name) + (sizeof(SQL_ATTACH_TEMPLATE) / sizeof(char)); char *SQL_ATTACH = (char *) calloc(len, sizeof(char)); bool ret = false; - snprintf(SQL_ATTACH, len - 1, SQL_ATTACH_TEMPLATE, path, name); - - if (SQLITE_OK != sqlite3_exec(db, SQL_ATTACH, 0, 0, 0)) { - fprintf(stderr, " * Failed to attach database named %s with path %s: %s\n", - name, path, sqlite3_errmsg(db)); - goto err_no_attach; - } + snprintf(SQL_ATTACH, len - 1, SQL_ATTACH_TEMPLATE, path, name); + SQLITE_EXEC(db, SQL_ATTACH, err_no_attach); fprintf(stderr, " * Attached database '%s' with path '%s'\n", name, path); ret = true; err_no_attach: @@ -118,14 +109,9 @@ __detach(sqlite3 *db, const char *name) size_t len = strlen(name) + (sizeof(SQL_DETACH_TEMPLATE) / sizeof(char)); char *SQL_DETACH = (char *) calloc(len, sizeof(char)); bool ret = false; - snprintf(SQL_DETACH, len - 1, SQL_DETACH_TEMPLATE, name); - - if (SQLITE_OK != sqlite3_exec(db, SQL_DETACH, 0, 0, 0)) { - fprintf(stderr, " * Failed to detach database named %s: %s\n", - name, sqlite3_errmsg(db)); - goto err_no_detach; - } + snprintf(SQL_DETACH, len - 1, SQL_DETACH_TEMPLATE, name); + SQLITE_EXEC(db, SQL_DETACH, err_no_detach); fprintf(stderr, " * Detached database '%s'\n", name); ret = true; err_no_detach: diff --git a/src/database/queue.c b/src/database/queue.c index b552143b0bea0c4724da03774ad957b8341ba22e..37e7125f03f3c465cbbbd5ee5543eeb720392ba3 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -400,12 +400,7 @@ database_queue_next(sqlite3 *db, char filepath[PATH_MAX]) goto error; } - if (sqlite3_exec(db, SQL_UPDATE, NULL, NULL, NULL) != SQLITE_OK) { - fprintf(stderr, "database_queue_next: Failed to set current kara: %s\n", - sqlite3_errmsg(db)); - goto error; - } - + SQLITE_EXEC(db, SQL_UPDATE, error); status = true; error: sqlite3_finalize(stmt); @@ -416,14 +411,10 @@ bool database_queue_toggle_pause(sqlite3 *db) { static const char *SQL_STMT = "UPDATE queue_state SET paused = 1 - paused"; - - if (sqlite3_exec(db, SQL_STMT, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_toggle_pause: Failed to exec the statement: %s\n", - sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_STMT, error); return true; +error: + return false; } bool @@ -469,12 +460,7 @@ database_queue_prev(sqlite3 *db, char filepath[PATH_MAX]) goto error; } - if (sqlite3_exec(db, SQL_UPDATE, NULL, NULL, NULL) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_prev: Failed to set current kara: %s\n", - sqlite3_errmsg(db)); - goto error; - } - + SQLITE_EXEC(db, SQL_UPDATE, error); status = true; error: sqlite3_finalize(stmt); @@ -488,14 +474,10 @@ database_queue_clear(sqlite3 *db) "DELETE FROM queue;" "DELETE FROM sqlite_sequence WHERE name = 'queue';" "UPDATE queue_state SET current = NULL;"; - - if (sqlite3_exec(db, SQL_STMT, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_clear: Failed to exec the statement: %s\n", - sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_STMT, error); return true; +error: + return false; } bool @@ -503,14 +485,10 @@ database_queue_crop(sqlite3 *db) { static const char *SQL_STMT = "DELETE FROM queue WHERE queue.kara_id <> (SELECT current FROM queue_state LIMIT 1);"; - - if (sqlite3_exec(db, SQL_STMT, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_crop: Failed to exec the statement: %s\n", - sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_STMT, error); return true; +error: + return false; } bool @@ -588,14 +566,10 @@ bool database_queue_stop(sqlite3 *db) { static const char *SQL_STMT = "UPDATE queue_state SET current = NULL;"; - - if (sqlite3_exec(db, SQL_STMT, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_stop: Failed to exec the statement: %s\n", - sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_STMT, error); return true; +error: + return false; } bool @@ -614,14 +588,10 @@ database_queue_set_current_index(sqlite3 *db, int idx) return false; } - if (sqlite3_exec(db, SQL_GET, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_set_current_index: Failed to set queue index to %d: %s\n", - idx, - sqlite3_errmsg(db)); - return false; - } - + SQLITE_EXEC(db, SQL_GET, error); return true; +error: + return false; } bool @@ -667,12 +637,10 @@ database_queue_set_paused(sqlite3 *db, bool paused) else SQL = "UPDATE queue_state SET paused = 0;"; - if (sqlite3_exec(db, SQL, 0, 0, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_set_paused: failed to execute sqlite statement: %s\n", - sqlite3_errmsg(db)); - return false; - } + SQLITE_EXEC(db, SQL, error); return true; +error: + return false; } bool @@ -727,17 +695,11 @@ database_queue_shuffle(sqlite3 *db) " ELSE NULL" " END;" "COMMIT;"; - int code; - - code = sqlite3_exec(db, SQL, 0, 0, 0); - - if (code != SQLITE_OK) { - fprintf(stderr, " ! database_queue_shuffle: Failed to shuffle, expected SQLITE_OK(%d) but got %d: %s\n", - SQLITE_DONE, code, sqlite3_errmsg(db)); - return false; - } + SQLITE_EXEC(db, SQL, error); return true; +error: + return false; } bool @@ -812,7 +774,6 @@ database_queue_list_from(sqlite3 *db, unsigned int count, void *args, sqlite3_stmt *stmt; snprintf(SQL_STMT, stmt_len, SQL_TEMPLATE, count); - SQLITE_PREPARE(db, stmt, SQL_STMT, error); for (;;) { diff --git a/src/database/update.c b/src/database/update.c index 17a46a12372b1e9887452d7f3d0e680e002b9a25..da52f2041a39e911427823b68ce88825351ca304 100644 --- a/src/database/update.c +++ b/src/database/update.c @@ -123,7 +123,7 @@ database_update_add(sqlite3 *db, const char *kara_path, struct kara_metadata *md goto error; } - if (sqlite3_step(stmt)!= SQLITE_DONE) { + if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! database_add_kara: expected sqlite_done after execution of stmt " "statement for kara %s: %s\n", kara_path, sqlite3_errmsg(db)); goto error;