From 0876281a2746e199fb3044e02d1b56aee56d5cdb Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Fri, 10 Apr 2020 17:49:28 +0200
Subject: [PATCH] First version of the database delete sticker function

---
 inc/lektor/database.h   |  2 ++
 src/database/stickers.c | 53 +++++++++++++++++++++++++++++++++++++----
 2 files changed, 51 insertions(+), 4 deletions(-)

diff --git a/inc/lektor/database.h b/inc/lektor/database.h
index d5632e3c..e26b78f1 100644
--- a/inc/lektor/database.h
+++ b/inc/lektor/database.h
@@ -131,6 +131,8 @@ typedef bool (*database_sticker_callback_t)(void *args, const char *sticker, con
 
 bool database_sticker_create(sqlite3 *db, const char *name);
 bool database_sticker_delete(sqlite3 *db, const char *name);
+bool database_sticker_delete_specify(sqlite3 *sb, const char *type, int uri,
+                                     const char *name /* Can be null */);
 bool database_sticker_list(sqlite3 *db, const char *type, void *args, database_sticker_callback_t call);
 bool database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, int value);
 bool database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, void *args,
diff --git a/src/database/stickers.c b/src/database/stickers.c
index 1c0a4ab7..b0abae8e 100644
--- a/src/database/stickers.c
+++ b/src/database/stickers.c
@@ -150,7 +150,7 @@ database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, i
             "SELECT ?, 'stickers'.id, ? "
             "FROM 'stickers'"
             "WHERE 'stickers'.id = ?;\n";
-    else if (!strcasecmp(type, "song"))
+    else if (!strcasecmp(type, "plt"))
         SQL =
             "INSERT OR REPLACE INTO 'stickers.plt' (id, sticker, value) "
             "SELECT ?, 'stickers'.id, ? "
@@ -193,12 +193,12 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v
             "JOIN 'stickers.song'"
             " ON 'stickers'.id = 'stickers.song'.sticker"
             " AND 'stickers'.name = ?;\n";
-    else if (!strcasecmp(type, "song"))
+    else if (!strcasecmp(type, "plt"))
         SQL =
             "SELECT value "
             "FROM 'stickers' "
-            "JOIN 'stickers.song'"
-            " ON 'stickers'.id = 'stickers.song'.sticker"
+            "JOIN 'stickers.plt'"
+            " ON 'stickers'.id = 'stickers.plt'.sticker"
             " AND 'stickers'.name = ?;\n";
     else {
         fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type);
@@ -230,3 +230,48 @@ error:
     sqlite3_finalize(stmt);
     return ret;
 }
+
+bool
+database_sticker_delete_specify(sqlite3 *db, const char *type, int uri, const char *name)
+{
+    const char *SQL = NULL;
+    sqlite3_stmt *stmt;
+    int ret = false;
+
+    /* Tout pouris, refaire ça (FIXME). */
+    if (!strcasecmp(type, "song")) {
+        if (!name)
+            SQL = "DELETE FROM 'stickers.song' WHERE id = ?;";
+        else
+            SQL =
+                "DELETE FROM 'stickers.song' "
+                "WHERE 'stickers.song'.id = ? "
+                "AND sticker = (SELECT id FROM 'stickers' WHERE name = ? LIMIT 1);";
+    } else if (!strcasecmp(type, "plt")) {
+        if (!name)
+            SQL = "DELETE FROM 'stickers.plt' WHERE id = ?;";
+        else
+            SQL =
+                "DELETE FROM 'stickers.plt' "
+                "WHERE 'stickers.plt'.id = ? "
+                "AND sticker = (SELECT id FROM 'stickers' WHERE name = ? LIMIT 1);";
+    } else {
+        fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type);
+        return false;
+    }
+
+    SQLITE_PREPARE(db, stmt, SQL, error);
+    SQLITE_BIND_INT(db, stmt, 1, uri, error);
+
+    if (name)
+        SQLITE_BIND_TEXT(db, stmt, 2, name, error);
+
+    if (! (ret = (sqlite3_step(stmt) == SQLITE_OK))) {
+        fprintf(stderr, " . database_sticker_delete_specify: Failed to delete sticker\n");
+        goto error;
+    }
+    ret = true;
+error:
+    sqlite3_finalize(stmt);
+    return ret;
+}
-- 
GitLab