diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h index 5cea0a50bd2172957af9beab44d3e069c59f4d14..c51ee07444f8ee40a81031bb5e1688f809100628 100644 --- a/inc/lektor/macro.h +++ b/inc/lektor/macro.h @@ -1,17 +1,31 @@ #pragma once -#define SQLITE_PREPARE(db, stmt, SQL, goto_label) \ - 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_PREPARE(db, stmt, SQL, goto_label) \ + 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 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 SQLITE_BIND_TEXT(db, stmt, pos, text, error) \ + if (sqlite3_bind_text(stmt, pos, text, -1, 0) != SQLITE_OK) { \ + fprintf(stderr, " ! %s: Failed to bind text %s at position" \ + "%d: %s\n", __func__, text, pos, sqlite3_errmsg(db)); \ + goto error; \ + } + +#define SQLITE_BIND_INT(db, stmt, pos, integer, error) \ + if (sqlite3_bind_int(stmt, pos, integer) != SQLITE_OK) { \ + fprintf(stderr, " ! %s: Failed to bind int %d at position %d:" \ + "%s\n", __func__, integer, pos, sqlite3_errmsg(db)); \ + goto error; \ } #define LKT_MAX_SQLITE_STATEMENT 1024 diff --git a/src/database/config.c b/src/database/config.c index 9dba758018efca89ae3a429041cd9b9783181e36..0b33b1517b43da01d74db8d6481fc8b5f62ccbe0 100644 --- a/src/database/config.c +++ b/src/database/config.c @@ -19,14 +19,9 @@ database_config_set(sqlite3 *db, const char *section, const char *key, const cha int code; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 3, value, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_config_set: Failed to bind: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, section, error); + SQLITE_BIND_TEXT(db, stmt, 2, key, error); + SQLITE_BIND_TEXT(db, stmt, 3, value, error); code = sqlite3_step(stmt); @@ -54,13 +49,8 @@ database_config_get_text(sqlite3 *db, const char *section, const char *key, char char *row; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_config_get_text: Failed to bind: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, section, error); + SQLITE_BIND_TEXT(db, stmt, 2, key, error); if (sqlite3_step(stmt) != SQLITE_ROW) { fprintf(stderr, " ! database_config_get_text: Failed to insert or replace: %s\n", @@ -88,13 +78,8 @@ database_config_exists(sqlite3 *db, const char *section, const char *key) bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_config_exists: Failed to bind: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, section, error); + SQLITE_BIND_TEXT(db, stmt, 2, key, error); if (sqlite3_step(stmt) != SQLITE_ROW) { fprintf(stderr, " ! database_config_exists: No rows: %s\n", @@ -119,13 +104,8 @@ database_config_get_int(sqlite3 *db, const char *section, const char *key, int * bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, section, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, key, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_config_get_int: Failed to bind: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, section, error); + SQLITE_BIND_TEXT(db, stmt, 2, key, error); if (sqlite3_step(stmt) != SQLITE_ROW) { fprintf(stderr, " ! database_config_get_int: Failed to insert or replace: %s\n", @@ -157,9 +137,7 @@ database_config_queue(sqlite3 *db, const char *option, int value) snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TMP, option); SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, value) != SQLITE_OK) - goto error; + SQLITE_BIND_INT(db, stmt, 1, value, error); code = sqlite3_step(stmt); diff --git a/src/database/find.c b/src/database/find.c index 63e490b646dda30b620c2a1c535d5e55a62538b6..074229701f3f8f1c5a7ed6d62c3f444548c32023 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -15,8 +15,6 @@ database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret) return false; } - *ret = NULL; - static const char *SQL_STMT_TEMPLATE = "SELECT " " kara.id AS id, " @@ -27,13 +25,7 @@ database_search_init(sqlite3 *db, char *col_name, char *rgx, sqlite3_stmt **ret) snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT_TEMPLATE, col_name); SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, *ret, SQL_STMT, error); - - if (sqlite3_bind_text(*ret, 1, rgx, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_search_init: Failed to bind regex on column %s: %s\n", - col_name, sqlite3_errmsg(db)); - goto error; - } - + SQLITE_BIND_TEXT(db, *ret, 1, rgx, error); return true; error: sqlite3_finalize(*ret); diff --git a/src/database/open.c b/src/database/open.c index 5d70fae207aaedbf02a321ee7fdf132ff1e8143a..662e6aa704229dde7fbaf2f814cb03856baa6c3b 100644 --- a/src/database/open.c +++ b/src/database/open.c @@ -125,12 +125,7 @@ __is_attached(sqlite3 *db, const char *name) bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (SQLITE_OK != sqlite3_bind_text(stmt, 1, name, -1, 0)) { - fprintf(stderr, " . __is_attached: Failed to bind name: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); if (sqlite3_step(stmt) == SQLITE_ROW) ret = true; diff --git a/src/database/playlist.c b/src/database/playlist.c index f29575b9c9a7d7ff3de28dd52eea5b39e859a10e..7750a1b9796afe75563bb9e0ed8f9cd268a41078 100644 --- a/src/database/playlist.c +++ b/src/database/playlist.c @@ -18,11 +18,7 @@ database_plt_create(sqlite3 *db, const char *name) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_create: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! database_plt_create: expected SQLITE_DONE in step: %s\n", @@ -46,11 +42,7 @@ database_plt_remove(sqlite3 *db, const char *name) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_remove: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! database_plt_remove: expected SQLITE_DONE in step: %s\n", @@ -73,12 +65,8 @@ database_plt_remove_pos(sqlite3 *db, const char *name, int pos) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK || - sqlite3_bind_int(stmt, 2, pos) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_remove_pos: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); + SQLITE_BIND_INT(db, stmt, 2, pos, error); if (sqlite3_step(stmt) != SQLITE_OK) { fprintf(stderr, " ! database_plt_remove_pos: expected SQLITE_DONE in step: %s\n", @@ -101,11 +89,7 @@ database_plt_clear(sqlite3 *db, const char *name) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_clear: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); if (sqlite3_step(stmt) != SQLITE_OK) { fprintf(stderr, " ! database_plt_clear: expected SQLITE_DONE in step: %s\n", @@ -128,12 +112,8 @@ database_plt_rename(sqlite3 *db, const char *old_name, const char *new_name) bool sta = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, new_name, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, old_name, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_rename: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, new_name, error); + SQLITE_BIND_TEXT(db, stmt, 2, old_name, error); if (sqlite3_step(stmt) != SQLITE_OK) { fprintf(stderr, " ! database_plt_rename: expected SQLITE_DONE in step: %s\n", @@ -193,9 +173,7 @@ database_plt_import(sqlite3 *db, const char *name) "INSERT OR IGNORE INTO kara_playlist (kara_id, playlist_id)" " SELECT %s.content.kara_id, ( SELECT id FROM playlist WHERE name = %s LIMIT 1 )" " FROM %s.content;\n"; - char SQL_STMT[LKT_MAX_SQLITE_STATEMENT]; - int code, ret = false; - sqlite3_stmt *stmt; + char SQL_STMT[LKT_MAX_SQLITE_STATEMENT], ret = false; if (is_sql_str_invalid(name)) { fprintf(stderr, " . database_plt_import: Name of playlist '%s' is invalid\n", @@ -211,18 +189,9 @@ database_plt_import(sqlite3 *db, const char *name) snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL_SCHEM, name, name, name); SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; - SQLITE_PREPARE(db, stmt, SQL_STMT, error); - code = sqlite3_step(stmt); - - if (code != SQLITE_DONE && code != SQLITE_OK) { - fprintf(stderr, " . database_plt_import: Failed to import database: %s\n", - sqlite3_errmsg(db)); - goto error; - } - + SQLITE_EXEC(db, SQL_STMT, error); ret = true; error: - sqlite3_finalize(stmt); return ret; } @@ -264,12 +233,8 @@ database_plt_add_uri(sqlite3 *db, const char *name, struct lkt_uri_t *uri) snprintf(SQL_STMT, LKT_MAX_SQLITE_STATEMENT - 1, SQL, column); SQL_STMT[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, name, -1, 0) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, uri->value, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_plt_add_uri: failed to bind playlist name: %s\n", sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, name, error); + SQLITE_BIND_TEXT(db, stmt, 2, (char *) uri->value, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! database_plt_add_uri: expected SQLITE_DONE in step: %s\n", diff --git a/src/database/queue.c b/src/database/queue.c index b6b61ec9e3b81e4ec872638a8476666f0d7666df..cf046b87260327bf240f98f29eff36f9e1c18f8c 100644 --- a/src/database/queue.c +++ b/src/database/queue.c @@ -107,13 +107,8 @@ queue_add_with_col_like_str(sqlite3 *db, const char *col, const char *val, int p snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT, col); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL, error); - - if (sqlite3_bind_int(stmt, 1, priority) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, val, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! queue_add_with_col_like_str: Failed to bind text: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, priority, error); + SQLITE_BIND_TEXT(db, stmt, 2, val, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! queue_add_with_col_like_str: Failed to insert: %s\n", @@ -165,13 +160,8 @@ queue_insert_with_col_like_str(sqlite3 *db, const char *col, const char *val, in snprintf(SQL, LKT_MAX_SQLITE_STATEMENT - 1, SQL_STMT, col); SQL[LKT_MAX_SQLITE_STATEMENT - 1] = 0; SQLITE_PREPARE(db, stmt, SQL, error); - - if (sqlite3_bind_int(stmt, 1, pos) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, val, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! queue_insert_with_col_like_str: Failed to bind text: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, pos, error); + SQLITE_BIND_TEXT(db, stmt, 2, val, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! queue_insert_with_col_like_str: Failed to insert: %s\n", @@ -212,13 +202,8 @@ database_queue_add_plt(sqlite3 *db, const char *plt_name, int priority) sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, priority) != SQLITE_OK || - sqlite3_bind_text(stmt, 2, plt_name, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_add_plt: Failed to bind text: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, priority, error); + SQLITE_BIND_TEXT(db, stmt, 2, plt_name, error); if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, " ! database_queue_add_plt: Failed to insert: %s\n", @@ -306,10 +291,8 @@ database_queue_add_id(sqlite3 *db, int id, int priority) sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, id) != SQLITE_OK || - sqlite3_bind_int(stmt, 2, priority) != SQLITE_OK) - goto error; + SQLITE_BIND_INT(db, stmt, 1, id, error); + SQLITE_BIND_INT(db, stmt, 2, priority, error); if (sqlite3_step(stmt) != SQLITE_DONE) goto error; @@ -513,14 +496,9 @@ database_queue_move(sqlite3 *db, int from, int to) int code; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, to) != SQLITE_OK || - sqlite3_bind_int(stmt, 2, to) != SQLITE_OK || - sqlite3_bind_int(stmt, 3, from) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_move: Failed to bind ints: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, to, error); + SQLITE_BIND_INT(db, stmt, 2, to, error); + SQLITE_BIND_INT(db, stmt, 3, from, error); code = sqlite3_step(stmt); @@ -546,12 +524,7 @@ database_queue_play(sqlite3 *db, int pos) sqlite3_stmt *stmt = NULL; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, pos) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_play: Failed to bind start position: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, pos, error); code = sqlite3_step(stmt); @@ -723,13 +696,8 @@ database_queue_list_abs(sqlite3 *db, unsigned int from, unsigned int to, void *a sqlite3_stmt *stmt; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_int(stmt, 1, from) != SQLITE_OK - || sqlite3_bind_int(stmt, 2, to) != SQLITE_OK) { - fprintf(stderr, " ! database_queue_list: Failed to bind argument: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_INT(db, stmt, 1, from, error); + SQLITE_BIND_INT(db, stmt, 2, to, error); for (;;) { code = sqlite3_step(stmt); diff --git a/src/database/user.c b/src/database/user.c index 6d5399ab66a028dc9f57b2a2c7c82f42aa4cc36a..c7bf11ecfb67a3feca5fac056757a9c57670c2f0 100644 --- a/src/database/user.c +++ b/src/database/user.c @@ -12,12 +12,7 @@ database_user_authentificate(sqlite3 *db, const char *password) bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, password, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_user_authentificate: Failed to bind password: %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, password, error); if (sqlite3_step(stmt) != SQLITE_ROW) { fprintf(stderr, " ! database_user_authentificate: No user found\n"); @@ -41,13 +36,8 @@ database_user_add(sqlite3 *db, const char *username, const char *password) bool ret = false; SQLITE_PREPARE(db, stmt, SQL_STMT, error); - - if (sqlite3_bind_text(stmt, 1, username, -1, 0) != SQLITE_OK && - sqlite3_bind_text(stmt, 2, password, -1, 0) != SQLITE_OK) { - fprintf(stderr, " ! database_user_add: Failed to bind : %s\n", - sqlite3_errmsg(db)); - goto error; - } + SQLITE_BIND_TEXT(db, stmt, 1, username, error); + SQLITE_BIND_TEXT(db, stmt, 2, password, error); if (sqlite3_step(stmt) != SQLITE_OK) { fprintf(stderr, " ! database_user_add: Failed to add user %s: %s\n",