[db] Add column for auth key to speakers table (incl methods for saving/retrieving)

This commit is contained in:
ejurgensen 2017-06-18 01:29:40 +02:00
parent 0642171de0
commit 0e9bca9e3d
5 changed files with 100 additions and 2 deletions

View File

@ -3893,6 +3893,73 @@ db_speaker_get(uint64_t id, int *selected, int *volume)
#undef Q_TMPL
}
int
db_speaker_auth_save(uint64_t id, const char *authkey)
{
#define Q_TMPL "UPDATE speakers SET authkey = '%q' WHERE id = %" PRIi64 ";"
char *query;
query = sqlite3_mprintf(Q_TMPL, authkey, id);
return db_query_run(query, 1, 0);
#undef Q_TMPL
}
char *
db_speaker_auth_get(uint64_t id)
{
#define Q_TMPL "SELECT authkey FROM speakers WHERE id = %" PRIi64 ";"
sqlite3_stmt *stmt;
char *query;
char *out;
int ret;
out = NULL;
query = sqlite3_mprintf(Q_TMPL, id);
if (!query)
{
DPRINTF(E_LOG, L_DB, "Out of memory for query string\n");
return NULL;
}
DPRINTF(E_DBG, L_DB, "Running query '%s'\n", query);
ret = db_blocking_prepare_v2(query, -1, &stmt, NULL);
if (ret != SQLITE_OK)
{
DPRINTF(E_LOG, L_DB, "Could not prepare statement: %s\n", sqlite3_errmsg(hdl));
goto out;
}
ret = db_blocking_step(stmt);
if (ret != SQLITE_ROW)
{
if (ret != SQLITE_DONE)
DPRINTF(E_LOG, L_DB, "Could not step: %s\n", sqlite3_errmsg(hdl));
sqlite3_finalize(stmt);
goto out;
}
out = (char *)sqlite3_column_text(stmt, 0);
if (out)
out = strdup(out);
#ifdef DB_PROFILE
while (db_blocking_step(stmt) == SQLITE_ROW)
; /* EMPTY */
#endif
sqlite3_finalize(stmt);
out:
sqlite3_free(query);
return out;
#undef Q_TMPL
}
void
db_speaker_clear_all(void)
{

View File

@ -682,6 +682,12 @@ db_speaker_save(uint64_t id, int selected, int volume, const char *name);
int
db_speaker_get(uint64_t id, int *selected, int *volume);
int
db_speaker_auth_save(uint64_t id, const char *authkey);
char *
db_speaker_auth_get(uint64_t id);
void
db_speaker_clear_all(void);

View File

@ -140,7 +140,8 @@
" id INTEGER PRIMARY KEY NOT NULL," \
" selected INTEGER NOT NULL," \
" volume INTEGER NOT NULL," \
" name VARCHAR(255) DEFAULT NULL" \
" name VARCHAR(255) DEFAULT NULL," \
" authkey VARCHAR(2048) DEFAULT NULL" \
");"
#define T_INOTIFY \

View File

@ -26,7 +26,7 @@
* is a major upgrade. In other words minor version upgrades permit downgrading
* forked-daapd after the database was upgraded. */
#define SCHEMA_VERSION_MAJOR 19
#define SCHEMA_VERSION_MINOR 03
#define SCHEMA_VERSION_MINOR 04
int
db_init_indices(sqlite3 *hdl);

View File

@ -1547,6 +1547,23 @@ static const struct db_upgrade_query db_upgrade_v1903_queries[] =
};
#define U_V1904_ALTER_SPEAKERS_ADD_AUTHKEY \
"ALTER TABLE speakers ADD COLUMN authkey VARCHAR(2048) DEFAULT NULL;"
#define U_V1904_SCVER_MAJOR \
"UPDATE admin SET value = '19' WHERE key = 'schema_version_major';"
#define U_V1904_SCVER_MINOR \
"UPDATE admin SET value = '04' WHERE key = 'schema_version_minor';"
static const struct db_upgrade_query db_upgrade_v1904_queries[] =
{
{ U_V1904_ALTER_SPEAKERS_ADD_AUTHKEY, "alter table speakers add column authkey" },
{ U_V1904_SCVER_MAJOR, "set schema_version_major to 19" },
{ U_V1904_SCVER_MINOR, "set schema_version_minor to 04" },
};
int
db_upgrade(sqlite3 *hdl, int db_ver)
{
@ -1678,6 +1695,13 @@ db_upgrade(sqlite3 *hdl, int db_ver)
if (ret < 0)
return -1;
/* FALLTHROUGH */
case 1903:
ret = db_generic_upgrade(hdl, db_upgrade_v1904_queries, sizeof(db_upgrade_v1904_queries) / sizeof(db_upgrade_v1904_queries[0]));
if (ret < 0)
return -1;
break;
default: