Merge pull request #324 from chme/db3

Remove rebuilding the persistent-ids on startup
This commit is contained in:
ejurgensen 2016-12-18 11:20:10 +01:00 committed by GitHub
commit 40d34ed4ad
3 changed files with 46 additions and 33 deletions

View File

@ -2024,18 +2024,6 @@ db_files_get_count_bymatch(char *path)
#undef Q_TMPL
}
void
db_files_update_songartistid(void)
{
db_query_run("UPDATE files SET songartistid = daap_songalbumid(LOWER(album_artist), '');", 0, 1);
}
void
db_files_update_songalbumid(void)
{
db_query_run("UPDATE files SET songalbumid = daap_songalbumid(LOWER(album_artist), LOWER(album));", 0, 1);
}
void
db_file_inc_playcount(int id)
{
@ -3386,6 +3374,44 @@ db_groups_clear(void)
return db_query_run("DELETE FROM groups;", 0, 1);
}
/*
* Remove album and artist entries in the groups table that are not longer referenced from the files table
*/
int
db_groups_cleanup()
{
#define Q_TMPL_ALBUM "DELETE FROM groups WHERE type = 1 AND NOT persistentid IN (SELECT songalbumid from files WHERE disabled = 0);"
#define Q_TMPL_ARTIST "DELETE FROM groups WHERE type = 2 AND NOT persistentid IN (SELECT songartistid from files WHERE disabled = 0);"
int ret;
db_transaction_begin();
ret = db_query_run(Q_TMPL_ALBUM, 0, 0);
if (ret < 0)
{
db_transaction_rollback();
return -1;
}
DPRINTF(E_DBG, L_DB, "Removed album group-entries: %d\n", sqlite3_changes(hdl));
ret = db_query_run(Q_TMPL_ARTIST, 0, 0);
if (ret < 0)
{
db_transaction_rollback();
return -1;
}
DPRINTF(E_DBG, L_DB, "Removed artist group-entries: %d\n", sqlite3_changes(hdl));
db_transaction_end();
return 0;
#undef Q_TMPL_ALBUM
#undef Q_TMPL_ARTIST
}
static enum group_type
db_group_type_bypersistentid(int64_t persistentid)
{

View File

@ -498,12 +498,6 @@ db_files_get_album_count(void);
int
db_files_get_count_bymatch(char *path);
void
db_files_update_songartistid(void);
void
db_files_update_songalbumid(void);
void
db_file_inc_playcount(int id);
@ -617,6 +611,9 @@ db_pl_enable_bycookie(uint32_t cookie, char *path);
int
db_groups_clear(void);
int
db_groups_cleanup();
int
db_group_persistentid_byid(int id, int64_t *persistentid);

View File

@ -1221,13 +1221,18 @@ bulk_scan(int flags)
}
else
{
db_transaction_begin();
/* Protect spotify from the imminent purge if rescanning */
db_file_ping_bymatch("spotify:", 0);
db_pl_ping_bymatch("spotify:", 0);
DPRINTF(E_DBG, L_SCAN, "Purging old database content\n");
db_purge_cruft(start);
db_groups_cleanup();
db_queue_cleanup();
db_transaction_end();
cache_artwork_purge_cruft(start);
DPRINTF(E_LOG, L_SCAN, "Bulk library scan completed in %.f sec\n", difftime(end, start));
@ -1278,14 +1283,6 @@ filescanner(void *arg)
pthread_exit(NULL);
}
ret = db_groups_clear();
if (ret < 0)
{
DPRINTF(E_LOG, L_SCAN, "Error: could not clear old groups from DB\n");
pthread_exit(NULL);
}
// Only clear the queue if enabled (default) in config
clear_queue_on_stop_disabled = cfg_getbool(cfg_getsec(cfg, "mpd"), "clear_queue_on_stop_disable");
if (!clear_queue_on_stop_disabled)
@ -1299,13 +1296,6 @@ filescanner(void *arg)
}
}
/* Recompute all songartistids and songalbumids, in case the SQLite DB got transferred
* to a different host; the hash is not portable.
* It will also rebuild the groups we just cleared.
*/
db_files_update_songartistid();
db_files_update_songalbumid();
if (cfg_getbool(cfg_getsec(cfg, "library"), "filescan_disable"))
bulk_scan(F_SCAN_BULK | F_SCAN_FAST);
else