From 64fb1bb77b9d0330e2d579d32c126d928350c361 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 10 Apr 2020 11:24:28 +0200 Subject: [PATCH] Even less lines of code --- inc/lektor/macro.h | 34 ++++++++++++++++------- src/database/config.c | 42 +++++++---------------------- src/database/find.c | 10 +------ src/database/open.c | 7 +---- src/database/playlist.c | 57 ++++++++------------------------------- src/database/queue.c | 60 ++++++++++------------------------------- src/database/user.c | 16 +++-------- 7 files changed, 64 insertions(+), 162 deletions(-) diff --git a/inc/lektor/macro.h b/inc/lektor/macro.h index 5cea0a50..c51ee074 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 9dba7580..0b33b151 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 63e490b6..07422970 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 5d70fae2..662e6aa7 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 f29575b9..7750a1b9 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 b6b61ec9..cf046b87 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 6d5399ab..c7bf11ec 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", -- GitLab