Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 0876281a rédigé par Kubat's avatar Kubat
Parcourir les fichiers

First version of the database delete sticker function

parent 917f5990
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!54Resolve "Stickers"
...@@ -131,6 +131,8 @@ typedef bool (*database_sticker_callback_t)(void *args, const char *sticker, con ...@@ -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_create(sqlite3 *db, const char *name);
bool database_sticker_delete(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_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_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, bool database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, void *args,
......
...@@ -150,7 +150,7 @@ database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, i ...@@ -150,7 +150,7 @@ database_sticker_set(sqlite3 *db, const char *type, const char *name, int uri, i
"SELECT ?, 'stickers'.id, ? " "SELECT ?, 'stickers'.id, ? "
"FROM 'stickers'" "FROM 'stickers'"
"WHERE 'stickers'.id = ?;\n"; "WHERE 'stickers'.id = ?;\n";
else if (!strcasecmp(type, "song")) else if (!strcasecmp(type, "plt"))
SQL = SQL =
"INSERT OR REPLACE INTO 'stickers.plt' (id, sticker, value) " "INSERT OR REPLACE INTO 'stickers.plt' (id, sticker, value) "
"SELECT ?, 'stickers'.id, ? " "SELECT ?, 'stickers'.id, ? "
...@@ -193,12 +193,12 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v ...@@ -193,12 +193,12 @@ database_sticker_get(sqlite3 *db, const char *type, const char *name, int uri, v
"JOIN 'stickers.song'" "JOIN 'stickers.song'"
" ON 'stickers'.id = 'stickers.song'.sticker" " ON 'stickers'.id = 'stickers.song'.sticker"
" AND 'stickers'.name = ?;\n"; " AND 'stickers'.name = ?;\n";
else if (!strcasecmp(type, "song")) else if (!strcasecmp(type, "plt"))
SQL = SQL =
"SELECT value " "SELECT value "
"FROM 'stickers' " "FROM 'stickers' "
"JOIN 'stickers.song'" "JOIN 'stickers.plt'"
" ON 'stickers'.id = 'stickers.song'.sticker" " ON 'stickers'.id = 'stickers.plt'.sticker"
" AND 'stickers'.name = ?;\n"; " AND 'stickers'.name = ?;\n";
else { else {
fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type); fprintf(stderr, " . database_sticker_get: Type '%s' is invalid\n", type);
...@@ -230,3 +230,48 @@ error: ...@@ -230,3 +230,48 @@ error:
sqlite3_finalize(stmt); sqlite3_finalize(stmt);
return ret; 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;
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter