From 7fdc43174f53a1fc99af3d682b5517fae78e0b53 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 8 May 2020 15:51:15 +0200 Subject: [PATCH] Tryfix get stickers --- src/database/disk.sql | 2 +- src/database/find.c | 16 ++++++++-------- src/database/stickers.c | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/database/disk.sql b/src/database/disk.sql index 28545751..5ebe5772 100644 --- a/src/database/disk.sql +++ b/src/database/disk.sql @@ -104,7 +104,7 @@ CREATE TABLE IF NOT EXISTS 'stickers' , name TEXT NOT NULL UNIQUE ); -CREATE TABLE IF NOT EXISTS 'stickers.song' +CREATE TABLE IF NOT EXISTS 'stickers.kara' ( id INTEGER REFERENCES kara ON DELETE CASCADE , sticker INTEGER REFERENCES stickers ON DELETE CASCADE , value INTEGER NOT NULL diff --git a/src/database/find.c b/src/database/find.c index 8cab8488..9df51114 100644 --- a/src/database/find.c +++ b/src/database/find.c @@ -37,27 +37,27 @@ database_search_sticker_init(volatile sqlite3 *db, struct lkt_search *ret) { /* No bound checks in strcats, should be fine. Possible SQL injection, depend on the `type`. */ static const char *SQL_all_types = - "SELECT name, sts.id, value FROM 'stickers' LEFT OUTER JOIN " - "( SELECT id, sticker, value FROM 'stickers.song'" + "SELECT name, sts.id, value FROM 'stickers' JOIN " + "( SELECT id, sticker, value FROM 'stickers.kara'" " UNION" " SELECT id, sticker, value FROM 'stickers.plt'" ") AS sts" "ON sts.sticker = 'stickers'.id"; static const char *SQL_one_type = - "SELECT name, 'stickers.%s'.id, value " - "FROM 'stickers.%s' AS sts" - "LEFT OUTER JOIN 'stickers' " + "SELECT name, sts.id, value " + "FROM 'stickers.%s' AS sts " + "JOIN 'stickers' " "ON 'stickers'.id = sts.sticker"; char SQL[LKT_MAX_SQLITE_STATEMENT]; if (ret->st_type == NULL) memcpy(SQL, SQL_all_types, strlen(SQL_all_types) + 1); else - sprintf(SQL, SQL_one_type, ret->st_type, ret->st_type); + sprintf(SQL, SQL_one_type, ret->st_type); if (ret->st_uri != 0) - sprintf(SQL, " AND sts.id = %d", ret->st_uri); + sprintf(SQL + strlen(SQL), " AND sts.id = %d", ret->st_uri); if (ret->st_op != 0) - sprintf(SQL, " AND sts.value %s %d", + sprintf(SQL + strlen(SQL), " AND sts.value %s %d", ret->st_op == '>' ? ">=" : ret->st_op == '<' ? "<=" : "=", ret->st_value); strcat(SQL, ret->name ? " AND name = ?;" : ";"); diff --git a/src/database/stickers.c b/src/database/stickers.c index 8863b827..34ca0d4a 100644 --- a/src/database/stickers.c +++ b/src/database/stickers.c @@ -58,9 +58,9 @@ database_sticker_set(volatile sqlite3 *db, const char *type, const char *name, i * 3 -> the name of the sticker */ - if (!strcasecmp(type, "song")) + if (!strcasecmp(type, "kara")) SQL = - "INSERT OR REPLACE INTO 'stickers.song' (id, sticker, value) " + "INSERT OR REPLACE INTO 'stickers.kara' (id, sticker, value) " "SELECT ?, 'stickers'.id, ? " "FROM 'stickers'" "WHERE 'stickers'.id = ?;\n"; @@ -94,7 +94,7 @@ database_sticker_delete_specify(volatile sqlite3 *db, const char *type, int uri, int ret = false; /* Base query. */ - if (strcasecmp("plt", type) && strcasecmp("song", type)) { + if (strcasecmp("plt", type) && strcasecmp("kara", type)) { LOG_ERROR_SCT("DB", "Type '%s' is invalid", type); return false; } -- GitLab