int64_t library_directory(const char* path, int64_t parent) { static const char *sql = "INSERT INTO directories (path, parentid) VALUES(?, ?)"; sqlite3_stmt *query; int64_t result; result = field_rowid("directories", "path", path); /* Result is nonzero (found or error) or parent < 0. */ if (result != 0 || parent < 0) { return result; } if (!prepare_query(sql, &query)) { return -1; } sqlite3_bind_text(query, 1, path, -1, NULL); sqlite3_bind_int64(query, 2, parent); result = execute_scalar(query); return result ? result : sqlite3_last_insert_rowid(db_handle()); }
T operator()(Connection const& conn) const { std::stringstream ss; ss << "SELECT "; last_insert_id_hook<Connection>(ss); ss << ';'; return (T)(execute_scalar(conn, ss.str())); }
int64_t library_randomid() { sqlite3_stmt *query; if (!prepare_query("SELECT rowid FROM tracks ORDER BY RANDOM() LIMIT 1", &query)) { return 0; } return execute_scalar(query); }
int64_t library_tracks_total() { sqlite3_stmt *query; if (!prepare_query("SELECT COUNT(rowid) FROM tracks", &query)) { return 0; } return execute_scalar(query); }
int library_directory_tracks_count(int64_t directory) { static const char *sql = "SELECT COUNT(tracks.rowid) FROM directories JOIN files ON files.directoryid = directories.rowid JOIN tracks ON tracks.fileid = files.rowid WHERE directories.rowid = ?"; sqlite3_stmt *query; if (!prepare_query(sql, &query)) { return -1; } sqlite3_bind_int64(query, 1, directory); return execute_scalar(query); }
time_t library_directory_mtime(int64_t directory) { static const char *sql = "SELECT mtime FROM directories WHERE rowid = ?"; sqlite3_stmt *query; if (!prepare_query(sql, &query)) { return -1; } sqlite3_bind_int64(query, 1, directory); return execute_scalar(query); }
int64_t library_album_by_directory(int64_t directory) { static const char *sql = "SELECT tracks.albumid FROM directories JOIN files ON files.directoryid = directories.rowid JOIN tracks ON tracks.fileid = files.rowid WHERE directories.rowid = ? GROUP BY tracks.albumid ORDER BY COUNT(tracks.albumid) DESC LIMIT 1"; sqlite3_stmt *query; if (!prepare_query(sql, &query)) { return 0; } sqlite3_bind_int64(query, 1, directory); return execute_scalar(query); }
int64_t library_album_image(int64_t album) { static const char *sql = "SELECT imageid FROM albums WHERE rowid = ?"; sqlite3_stmt *query; if (!prepare_query(sql, &query)) { return 0; } sqlite3_bind_int64(query, 1, album); return execute_scalar(query); }
static int64_t field_rowid(const char *table, const char *field, const char *value) { sqlite3_stmt *query; int64_t result; char *sql = malloc(strlen(table) + strlen(field) + 32); sprintf(sql, "SELECT rowid FROM %s WHERE %s = ?", table, field); if (!prepare_query(sql, &query)) { result = -1; } else { sqlite3_bind_text(query, 1, value, -1, NULL); result = execute_scalar(query); } free(sql); return result; }
static int64_t field_rowid_create(const char *table, const char *field, const char *value) { sqlite3_stmt *query; int64_t result; char *sql; result = field_rowid(table, field, value); if (result > 0) { return result; } sql = malloc(strlen(table) + strlen(field) + 32); sprintf(sql, "INSERT INTO %s (%s) VALUES (?)", table, field); if (!prepare_query(sql, &query)) { result = -1; } else { sqlite3_bind_text(query, 1, value, -1, NULL); result = execute_scalar(query); } free(sql); return sqlite3_last_insert_rowid(db_handle()); }