diff --git a/src/database/disk.sql b/src/database/disk.sql index 285457514f1585114e3412b91a7b73c46e9147fa..5ebe5772cd1e061d34a1e58bdad9f94b445d42ef 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 8cab8488045c254566baf24ab05c845ff6fff6b3..9df51114d8233b26dac02bf5fbfe44755c388d88 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 8863b827b0d3ac61f982c31ff1d42f0180c3d811..34ca0d4a72fb44501acf05d15c9f8aa2ad565471 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; }