// Deletes all entries that have an outdated timestamp dbmtime. Also cleans up // entries in Artist and Album table that are not referenced anymore in the // Track-table. // // Returns the number of deleted rows and an error. func deleteDanglingEntries(db *database.Database) (int64, error) { r, err := db.Execute("DELETE FROM Track WHERE dbmtime <> ?", db.Mtime()) deletedTracks, _ := r.RowsAffected() if err != nil { return deletedTracks, err } if _, err := db.Execute("DELETE FROM Album WHERE ID IN " + "(SELECT Album.ID FROM Album LEFT JOIN Track ON " + "Album.ID = Track.album_id WHERE Track.album_id " + "IS NULL);"); err != nil { return deletedTracks, err } if _, err := db.Execute("DELETE FROM Artist WHERE ID IN " + "(SELECT Artist.ID FROM Artist LEFT JOIN Album ON " + "Artist.ID = Album.artist_id WHERE Album.artist_id " + "IS NULL);"); err != nil { return deletedTracks, err } return deletedTracks, nil }