-- name: CreateReleaseGroup :one INSERT INTO release_groups (name) VALUES (?) RETURNING *; -- name: CreateReleaseGroupFull :one INSERT INTO release_groups ( name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs ) VALUES (?, ?, ?, ?, ?, ?) RETURNING *; -- name: GetReleaseGroup :one SELECT * FROM release_groups WHERE id = ? LIMIT 1; -- name: GetReleaseGroupByNameAndArtist :one SELECT * FROM release_groups WHERE name = ? AND album_artist_credit_id = ? LIMIT 1; -- name: UpsertReleaseGroup :one INSERT INTO release_groups (name, album_artist_credit_id, year) VALUES (?, ?, ?) ON CONFLICT(name, album_artist_credit_id) DO UPDATE SET album_artist_credit_id = COALESCE(excluded.album_artist_credit_id, release_groups.album_artist_credit_id), year = COALESCE(excluded.year, release_groups.year) RETURNING *; -- name: SetReleaseGroupOriginalYear :exec -- Set the release group's original-release-year (release-group's -- first-release-date from MusicBrainz). Called from autotag apply -- when the user confirms a candidate; the file-tag year stays in -- the year column. UPDATE release_groups SET original_year = ? WHERE id = ?; -- name: UpdateReleaseGroup :exec UPDATE release_groups SET name = ? WHERE id = ?; -- name: UpdateReleaseGroupCoverArt :exec UPDATE release_groups SET cover_art_id = ? WHERE id = ?; -- name: DeleteReleaseGroup :exec DELETE FROM release_groups WHERE id = ?; -- name: DeleteAllReleaseGroups :exec DELETE FROM release_groups; -- name: GetAllReleaseGroups :many SELECT * FROM release_groups ORDER BY name; -- name: GetAllAlbumsWithDetails :many SELECT rg.id, rg.name, -- year prefers original release year (MB first-release-date) -- over the file-tag year so the UI surfaces the album's -- original year by default. release_year keeps the file-tag -- year accessible. COALESCE(rg.original_year, rg.year) AS year, COALESCE(rg.year, 0) AS release_year, rg.mbid, COALESCE(ac.text, fallback_ac.text, '') as artist_name, -- primary (first-credited) album artist's MBID, for linking the -- artist name to its detail page. Empty when the album has no -- MB-tagged album-artist credit. CAST(COALESCE(( SELECT a.mbid FROM artist_credit_artist aca_p JOIN artists a ON a.id = aca_p.artist_id WHERE aca_p.credit_id = rg.album_artist_credit_id ORDER BY aca_p.id LIMIT 1 ), '') AS TEXT) as artist_mbid, COALESCE(ca.file_path, '') as cover_art_path FROM release_groups rg LEFT JOIN artist_credit ac ON rg.album_artist_credit_id = ac.id LEFT JOIN cover_art ca ON rg.cover_art_id = ca.id LEFT JOIN ( SELECT rgr.release_group_id, ac2.text FROM release_group_recordings rgr JOIN recordings rec ON rec.id = rgr.recording_id JOIN artist_credit ac2 ON ac2.id = rec.artist_credit_id GROUP BY rgr.release_group_id ) fallback_ac ON fallback_ac.release_group_id = rg.id ORDER BY rg.name; -- name: GetAllAlbumsWithDetailsByLibrary :many SELECT rg.id, rg.name, -- year prefers original release year (MB first-release-date) -- over the file-tag year so the UI surfaces the album's -- original year by default. release_year keeps the file-tag -- year accessible. COALESCE(rg.original_year, rg.year) AS year, COALESCE(rg.year, 0) AS release_year, rg.mbid, COALESCE(ac.text, fallback_ac.text, '') as artist_name, -- primary (first-credited) album artist's MBID, for linking the -- artist name to its detail page. Empty when the album has no -- MB-tagged album-artist credit. CAST(COALESCE(( SELECT a.mbid FROM artist_credit_artist aca_p JOIN artists a ON a.id = aca_p.artist_id WHERE aca_p.credit_id = rg.album_artist_credit_id ORDER BY aca_p.id LIMIT 1 ), '') AS TEXT) as artist_mbid, COALESCE(ca.file_path, '') as cover_art_path FROM release_groups rg LEFT JOIN artist_credit ac ON rg.album_artist_credit_id = ac.id LEFT JOIN cover_art ca ON rg.cover_art_id = ca.id LEFT JOIN ( SELECT rgr.release_group_id, ac2.text FROM release_group_recordings rgr JOIN recordings rec ON rec.id = rgr.recording_id JOIN artist_credit ac2 ON ac2.id = rec.artist_credit_id GROUP BY rgr.release_group_id ) fallback_ac ON fallback_ac.release_group_id = rg.id WHERE rg.id IN ( SELECT DISTINCT rgr2.release_group_id FROM release_group_recordings rgr2 JOIN recordings r2 ON r2.id = rgr2.recording_id JOIN audio_files af2 ON af2.recording_id = r2.id WHERE af2.library_id = ? ) ORDER BY rg.name; -- name: GetAlbumsByArtist :many SELECT rg.id, rg.name, COALESCE(rg.original_year, rg.year) AS year, COALESCE(rg.year, 0) AS release_year, COALESCE(ac.text, fallback_ac.text, '') as artist_name, -- primary (first-credited) album artist's MBID, for linking the -- artist name to its detail page. Empty when the album has no -- MB-tagged album-artist credit. CAST(COALESCE(( SELECT a.mbid FROM artist_credit_artist aca_p JOIN artists a ON a.id = aca_p.artist_id WHERE aca_p.credit_id = rg.album_artist_credit_id ORDER BY aca_p.id LIMIT 1 ), '') AS TEXT) as artist_mbid, COALESCE(ca.file_path, '') as cover_art_path FROM release_groups rg JOIN artist_credit ac ON rg.album_artist_credit_id = ac.id JOIN artist_credit_artist aca ON aca.credit_id = ac.id LEFT JOIN cover_art ca ON rg.cover_art_id = ca.id LEFT JOIN ( SELECT rgr.release_group_id, ac2.text FROM release_group_recordings rgr JOIN recordings rec ON rec.id = rgr.recording_id JOIN artist_credit ac2 ON ac2.id = rec.artist_credit_id GROUP BY rgr.release_group_id ) fallback_ac ON fallback_ac.release_group_id = rg.id WHERE aca.artist_id = ? ORDER BY rg.name; -- name: CountReleaseGroupRecordings :one SELECT COUNT(*) FROM release_group_recordings WHERE release_group_id = ?; -- name: GetAlbumsByArtistByLibrary :many SELECT rg.id, rg.name, COALESCE(rg.original_year, rg.year) AS year, COALESCE(rg.year, 0) AS release_year, COALESCE(ac.text, fallback_ac.text, '') as artist_name, -- primary (first-credited) album artist's MBID, for linking the -- artist name to its detail page. Empty when the album has no -- MB-tagged album-artist credit. CAST(COALESCE(( SELECT a.mbid FROM artist_credit_artist aca_p JOIN artists a ON a.id = aca_p.artist_id WHERE aca_p.credit_id = rg.album_artist_credit_id ORDER BY aca_p.id LIMIT 1 ), '') AS TEXT) as artist_mbid, COALESCE(ca.file_path, '') as cover_art_path FROM release_groups rg JOIN artist_credit ac ON rg.album_artist_credit_id = ac.id JOIN artist_credit_artist aca ON aca.credit_id = ac.id LEFT JOIN cover_art ca ON rg.cover_art_id = ca.id LEFT JOIN ( SELECT rgr.release_group_id, ac2.text FROM release_group_recordings rgr JOIN recordings rec ON rec.id = rgr.recording_id JOIN artist_credit ac2 ON ac2.id = rec.artist_credit_id GROUP BY rgr.release_group_id ) fallback_ac ON fallback_ac.release_group_id = rg.id WHERE aca.artist_id = ? AND rg.id IN ( SELECT DISTINCT rgr2.release_group_id FROM release_group_recordings rgr2 JOIN recordings r2 ON r2.id = rgr2.recording_id JOIN audio_files af2 ON af2.recording_id = r2.id WHERE af2.library_id = ? ) ORDER BY rg.name;