Files
minstrel/internal/db/dbq/songs.sql.go
T
bvandeusenandClaude Opus 5.5 1d4ef1a23f docs: query comments say what each query selects and why, not how it came to be (#6277)
Rewrites the internal/db/queries comments to rule 32 and regenerates
dbq, whose doc comments and embedded SQL carry them. The bugs behind the
tiered mixes, the md5 order seed, the score bands and the round-robin
arms are restated as the constraint each one enforces; counts from one
library and stale cross-references are gone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 12:31:13 -04:00

157 lines
4.6 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.31.1
// source: songs.sql
package dbq
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const linkTracksAsSong = `-- name: LinkTracksAsSong :one
WITH keys AS (
SELECT DISTINCT song_key FROM tracks WHERE id = ANY($1::uuid[])
), target AS (
SELECT song_key FROM keys ORDER BY song_key LIMIT 1
), moved AS (
UPDATE tracks t
SET song_id = (SELECT song_key FROM target)
WHERE t.song_key IN (SELECT song_key FROM keys)
AND t.song_key <> (SELECT song_key FROM target)
RETURNING t.id
)
SELECT (SELECT song_key FROM target)::uuid AS song_key,
(SELECT count(*) FROM moved)::bigint AS moved
`
type LinkTracksAsSongRow struct {
SongKey pgtype.UUID
Moved int64
}
// Song links: copies of one song on different releases share a
// song_key (migration 0076).
// Links the tracks into one song, joining any songs they already belong to.
// The song keeps the lowest key among them, so linking the same set again
// changes nothing. Returns that key and how many tracks moved to it.
func (q *Queries) LinkTracksAsSong(ctx context.Context, trackIds []pgtype.UUID) (LinkTracksAsSongRow, error) {
row := q.db.QueryRow(ctx, linkTracksAsSong, trackIds)
var i LinkTracksAsSongRow
err := row.Scan(&i.SongKey, &i.Moved)
return i, err
}
const listTrackSongKeys = `-- name: ListTrackSongKeys :many
SELECT id, song_key, (source_verdict IS NOT DISTINCT FROM 'suspect')::boolean AS held_back
FROM tracks WHERE id = ANY($1::uuid[])
`
type ListTrackSongKeysRow struct {
ID pgtype.UUID
SongKey pgtype.UUID
HeldBack bool
}
// What the mix writer needs to place a track: its song, and whether it is a
// video rip held back from the mixes.
func (q *Queries) ListTrackSongKeys(ctx context.Context, ids []pgtype.UUID) ([]ListTrackSongKeysRow, error) {
rows, err := q.db.Query(ctx, listTrackSongKeys, ids)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ListTrackSongKeysRow
for rows.Next() {
var i ListTrackSongKeysRow
if err := rows.Scan(&i.ID, &i.SongKey, &i.HeldBack); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const mergeInheritSongLink = `-- name: MergeInheritSongLink :exec
UPDATE tracks s
SET song_id = l.song_key
FROM tracks l
WHERE s.id = $1::uuid
AND l.id = $2::uuid
AND s.song_id IS NULL
AND EXISTS (SELECT 1 FROM tracks o
WHERE o.song_key = l.song_key AND o.id <> l.id AND o.id <> s.id)
`
type MergeInheritSongLinkParams struct {
SurvivorID pgtype.UUID
LoserID pgtype.UUID
}
// A merge keeps the removed copy's song link: when the copy being removed was
// linked to copies on other releases and the survivor was not, the survivor
// joins that song. The copy whose id names the song has no song_id of its
// own, so "linked" is another copy sharing its key, not a song_id.
func (q *Queries) MergeInheritSongLink(ctx context.Context, arg MergeInheritSongLinkParams) error {
_, err := q.db.Exec(ctx, mergeInheritSongLink, arg.SurvivorID, arg.LoserID)
return err
}
const shareSongLikes = `-- name: ShareSongLikes :many
INSERT INTO general_likes (user_id, track_id, liked_at)
SELECT l.user_id, t.id, min(l.liked_at)
FROM general_likes l
JOIN tracks lt ON lt.id = l.track_id
JOIN tracks t ON t.song_key = lt.song_key
WHERE lt.song_key = $1::uuid
GROUP BY l.user_id, t.id
ON CONFLICT (user_id, track_id) DO NOTHING
RETURNING user_id, track_id
`
type ShareSongLikesRow struct {
UserID pgtype.UUID
TrackID pgtype.UUID
}
// A like on any copy of the song becomes a like on every copy, dated the
// earliest. Returns the likes added, for the sync log.
func (q *Queries) ShareSongLikes(ctx context.Context, songKey pgtype.UUID) ([]ShareSongLikesRow, error) {
rows, err := q.db.Query(ctx, shareSongLikes, songKey)
if err != nil {
return nil, err
}
defer rows.Close()
var items []ShareSongLikesRow
for rows.Next() {
var i ShareSongLikesRow
if err := rows.Scan(&i.UserID, &i.TrackID); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const unlinkDuplicateGroupSongs = `-- name: UnlinkDuplicateGroupSongs :exec
UPDATE tracks SET song_id = NULL
WHERE song_id IS NOT NULL
AND id IN (SELECT track_id FROM duplicate_group_members WHERE group_id = $1)
`
// "Not the same song": the group's copies stop sharing a song. Likes already
// shared stay where they are.
func (q *Queries) UnlinkDuplicateGroupSongs(ctx context.Context, groupID pgtype.UUID) error {
_, err := q.db.Exec(ctx, unlinkDuplicateGroupSongs, groupID)
return err
}