165 lines
5.5 KiB
SQL
165 lines
5.5 KiB
SQL
-- 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,
|
|
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,
|
|
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,
|
|
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,
|
|
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;
|