fix(quick-10): update release_groups schema and queries for composite uniqueness
- Change UNIQUE(name) to UNIQUE(name, album_artist_credit_id) in schema - Update UpsertReleaseGroup ON CONFLICT to match composite key - Rename GetReleaseGroupByName to GetReleaseGroupByNameAndArtist with two params - Regenerate sqlc code
This commit is contained in:
@@ -12,14 +12,14 @@ RETURNING *;
|
|||||||
SELECT * FROM release_groups
|
SELECT * FROM release_groups
|
||||||
WHERE id = ? LIMIT 1;
|
WHERE id = ? LIMIT 1;
|
||||||
|
|
||||||
-- name: GetReleaseGroupByName :one
|
-- name: GetReleaseGroupByNameAndArtist :one
|
||||||
SELECT * FROM release_groups
|
SELECT * FROM release_groups
|
||||||
WHERE name = ? LIMIT 1;
|
WHERE name = ? AND album_artist_credit_id = ? LIMIT 1;
|
||||||
|
|
||||||
-- name: UpsertReleaseGroup :one
|
-- name: UpsertReleaseGroup :one
|
||||||
INSERT INTO release_groups (name, album_artist_credit_id, year)
|
INSERT INTO release_groups (name, album_artist_credit_id, year)
|
||||||
VALUES (?, ?, ?)
|
VALUES (?, ?, ?)
|
||||||
ON CONFLICT(name) DO UPDATE SET
|
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),
|
album_artist_credit_id = COALESCE(excluded.album_artist_credit_id, release_groups.album_artist_credit_id),
|
||||||
year = COALESCE(excluded.year, release_groups.year)
|
year = COALESCE(excluded.year, release_groups.year)
|
||||||
RETURNING *;
|
RETURNING *;
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
CREATE TABLE IF NOT EXISTS release_groups (
|
CREATE TABLE IF NOT EXISTS release_groups (
|
||||||
id INTEGER PRIMARY KEY,
|
id INTEGER PRIMARY KEY,
|
||||||
name TEXT NOT NULL UNIQUE,
|
name TEXT NOT NULL,
|
||||||
cover_art_id INTEGER,
|
cover_art_id INTEGER,
|
||||||
album_artist_credit_id INTEGER,
|
album_artist_credit_id INTEGER,
|
||||||
year INTEGER,
|
year INTEGER,
|
||||||
total_tracks INTEGER,
|
total_tracks INTEGER,
|
||||||
total_discs INTEGER,
|
total_discs INTEGER,
|
||||||
FOREIGN KEY(cover_art_id) REFERENCES cover_art(id),
|
FOREIGN KEY(cover_art_id) REFERENCES cover_art(id),
|
||||||
FOREIGN KEY(album_artist_credit_id) REFERENCES artist_credit(id)
|
FOREIGN KEY(album_artist_credit_id) REFERENCES artist_credit(id),
|
||||||
|
UNIQUE(name, album_artist_credit_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS idx_release_groups_cover_art_id
|
CREATE INDEX IF NOT EXISTS idx_release_groups_cover_art_id
|
||||||
|
|||||||
@@ -259,13 +259,18 @@ func (q *Queries) GetReleaseGroup(ctx context.Context, id int64) (ReleaseGroup,
|
|||||||
return i, err
|
return i, err
|
||||||
}
|
}
|
||||||
|
|
||||||
const getReleaseGroupByName = `-- name: GetReleaseGroupByName :one
|
const getReleaseGroupByNameAndArtist = `-- name: GetReleaseGroupByNameAndArtist :one
|
||||||
SELECT id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs FROM release_groups
|
SELECT id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs FROM release_groups
|
||||||
WHERE name = ? LIMIT 1
|
WHERE name = ? AND album_artist_credit_id = ? LIMIT 1
|
||||||
`
|
`
|
||||||
|
|
||||||
func (q *Queries) GetReleaseGroupByName(ctx context.Context, name string) (ReleaseGroup, error) {
|
type GetReleaseGroupByNameAndArtistParams struct {
|
||||||
row := q.db.QueryRowContext(ctx, getReleaseGroupByName, name)
|
Name string
|
||||||
|
AlbumArtistCreditID sql.NullInt64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *Queries) GetReleaseGroupByNameAndArtist(ctx context.Context, arg GetReleaseGroupByNameAndArtistParams) (ReleaseGroup, error) {
|
||||||
|
row := q.db.QueryRowContext(ctx, getReleaseGroupByNameAndArtist, arg.Name, arg.AlbumArtistCreditID)
|
||||||
var i ReleaseGroup
|
var i ReleaseGroup
|
||||||
err := row.Scan(
|
err := row.Scan(
|
||||||
&i.ID,
|
&i.ID,
|
||||||
@@ -314,7 +319,7 @@ func (q *Queries) UpdateReleaseGroupCoverArt(ctx context.Context, arg UpdateRele
|
|||||||
const upsertReleaseGroup = `-- name: UpsertReleaseGroup :one
|
const upsertReleaseGroup = `-- name: UpsertReleaseGroup :one
|
||||||
INSERT INTO release_groups (name, album_artist_credit_id, year)
|
INSERT INTO release_groups (name, album_artist_credit_id, year)
|
||||||
VALUES (?, ?, ?)
|
VALUES (?, ?, ?)
|
||||||
ON CONFLICT(name) DO UPDATE SET
|
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),
|
album_artist_credit_id = COALESCE(excluded.album_artist_credit_id, release_groups.album_artist_credit_id),
|
||||||
year = COALESCE(excluded.year, release_groups.year)
|
year = COALESCE(excluded.year, release_groups.year)
|
||||||
RETURNING id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs
|
RETURNING id, name, cover_art_id, album_artist_credit_id, year, total_tracks, total_discs
|
||||||
|
|||||||
Reference in New Issue
Block a user