From 39029b5cd96a9ddd0c93f810d603755824c910ab Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Tue, 20 Oct 2026 09:47:02 -0400 Subject: [PATCH] fix: clearing a wrong slot's MBID clears its source too, as tracks_mbid_source_pair requires (M498) Co-Authored-By: Claude Opus 5.5 --- internal/db/dbq/tracks.sql.go | 3 ++- internal/db/queries/tracks.sql | 3 ++- internal/library/duplicate_resolve_test.go | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/db/dbq/tracks.sql.go b/internal/db/dbq/tracks.sql.go index cec4f1c4..ea0716be 100644 --- a/internal/db/dbq/tracks.sql.go +++ b/internal/db/dbq/tracks.sql.go @@ -58,7 +58,7 @@ func (q *Queries) ClearStaleSuspectSourceTracks(ctx context.Context, pattern str const clearTrackMbids = `-- name: ClearTrackMbids :exec UPDATE tracks - SET mbid = NULL + SET mbid = NULL, mbid_source = NULL WHERE id = ANY($1::uuid[]) ` @@ -66,6 +66,7 @@ UPDATE tracks // wrong-slot removal). The MBID came from that file, so it names the song kept // elsewhere on the album, and missing-pair folding would fold the emptied slot // into it: twelve slots went that way on 2026-10-20 and were never wanted back. +// mbid_source goes with it (tracks_mbid_source_pair). func (q *Queries) ClearTrackMbids(ctx context.Context, ids []pgtype.UUID) error { _, err := q.db.Exec(ctx, clearTrackMbids, ids) return err diff --git a/internal/db/queries/tracks.sql b/internal/db/queries/tracks.sql index ca5f492a..e609adc2 100644 --- a/internal/db/queries/tracks.sql +++ b/internal/db/queries/tracks.sql @@ -221,8 +221,9 @@ UPDATE tracks -- wrong-slot removal). The MBID came from that file, so it names the song kept -- elsewhere on the album, and missing-pair folding would fold the emptied slot -- into it: twelve slots went that way on 2026-10-20 and were never wanted back. +-- mbid_source goes with it (tracks_mbid_source_pair). UPDATE tracks - SET mbid = NULL + SET mbid = NULL, mbid_source = NULL WHERE id = ANY(sqlc.arg(ids)::uuid[]); -- name: ClearTracksMissing :execrows diff --git a/internal/library/duplicate_resolve_test.go b/internal/library/duplicate_resolve_test.go index 926b2348..d594a583 100644 --- a/internal/library/duplicate_resolve_test.go +++ b/internal/library/duplicate_resolve_test.go @@ -383,7 +383,7 @@ func TestResolveDuplicates_RemovesACopyFromAnotherSongsSlot_Integration(t *testi seedTrackList(t, f.pool, f.album, map[string]int{"Void": 220500, "Reach": 281000}) // The wrong file is Void's recording, so it carries Void's MBID. if _, err := f.pool.Exec(context.Background(), - `UPDATE tracks SET mbid = 'rec-void' WHERE id = ANY($1)`, []pgtype.UUID{f.a.ID, f.b.ID}); err != nil { + `UPDATE tracks SET mbid = 'rec-void', mbid_source = 'tag' WHERE id = ANY($1)`, []pgtype.UUID{f.a.ID, f.b.ID}); err != nil { t.Fatal(err) } res, err := ResolveDuplicates(context.Background(), f.pool, nil, "", true)