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;