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>
163 lines
4.5 KiB
Go
163 lines
4.5 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.31.1
|
|
// source: library_settings.sql
|
|
|
|
package dbq
|
|
|
|
import (
|
|
"context"
|
|
)
|
|
|
|
const countTracksUnder = `-- name: CountTracksUnder :one
|
|
SELECT count(*) FROM tracks WHERE starts_with(file_path, $1::text || '/')
|
|
`
|
|
|
|
func (q *Queries) CountTracksUnder(ctx context.Context, root string) (int64, error) {
|
|
row := q.db.QueryRow(ctx, countTracksUnder, root)
|
|
var count int64
|
|
err := row.Scan(&count)
|
|
return count, err
|
|
}
|
|
|
|
const getLibrarySettings = `-- name: GetLibrarySettings :one
|
|
SELECT id, scan_paths, updated_at FROM library_settings WHERE id = true
|
|
`
|
|
|
|
func (q *Queries) GetLibrarySettings(ctx context.Context) (LibrarySetting, error) {
|
|
row := q.db.QueryRow(ctx, getLibrarySettings)
|
|
var i LibrarySetting
|
|
err := row.Scan(&i.ID, &i.ScanPaths, &i.UpdatedAt)
|
|
return i, err
|
|
}
|
|
|
|
const rerootAlbumCoverPaths = `-- name: RerootAlbumCoverPaths :execrows
|
|
UPDATE albums
|
|
SET cover_art_path = $1::text || substr(cover_art_path, length($2::text) + 1)
|
|
WHERE starts_with(cover_art_path, $2::text || '/')
|
|
`
|
|
|
|
type RerootAlbumCoverPathsParams struct {
|
|
NewRoot string
|
|
OldRoot string
|
|
}
|
|
|
|
func (q *Queries) RerootAlbumCoverPaths(ctx context.Context, arg RerootAlbumCoverPathsParams) (int64, error) {
|
|
result, err := q.db.Exec(ctx, rerootAlbumCoverPaths, arg.NewRoot, arg.OldRoot)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected(), nil
|
|
}
|
|
|
|
const rerootGrabDestinations = `-- name: RerootGrabDestinations :execrows
|
|
UPDATE grabs
|
|
SET destination = $1::text || substr(destination, length($2::text) + 1)
|
|
WHERE destination = $2::text
|
|
OR starts_with(destination, $2::text || '/')
|
|
`
|
|
|
|
type RerootGrabDestinationsParams struct {
|
|
NewRoot string
|
|
OldRoot string
|
|
}
|
|
|
|
func (q *Queries) RerootGrabDestinations(ctx context.Context, arg RerootGrabDestinationsParams) (int64, error) {
|
|
result, err := q.db.Exec(ctx, rerootGrabDestinations, arg.NewRoot, arg.OldRoot)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected(), nil
|
|
}
|
|
|
|
const rerootImportRoot = `-- name: RerootImportRoot :execrows
|
|
UPDATE acquisition_settings
|
|
SET import_root = $1::text
|
|
WHERE import_root = $2::text
|
|
`
|
|
|
|
type RerootImportRootParams struct {
|
|
NewRoot string
|
|
OldRoot string
|
|
}
|
|
|
|
func (q *Queries) RerootImportRoot(ctx context.Context, arg RerootImportRootParams) (int64, error) {
|
|
result, err := q.db.Exec(ctx, rerootImportRoot, arg.NewRoot, arg.OldRoot)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected(), nil
|
|
}
|
|
|
|
const rerootTrackPaths = `-- name: RerootTrackPaths :execrows
|
|
|
|
UPDATE tracks
|
|
SET file_path = $1::text || substr(file_path, length($2::text) + 1)
|
|
WHERE starts_with(file_path, $2::text || '/')
|
|
`
|
|
|
|
type RerootTrackPathsParams struct {
|
|
NewRoot string
|
|
OldRoot string
|
|
}
|
|
|
|
// A library folder that moved: every path under old_root is rewritten
|
|
// to the same place under new_root, so the tracks keep their ids and with them
|
|
// their plays, likes and playlists. updated_at is left alone on purpose: the
|
|
// scan compares it with each file's mtime, and the files have not changed.
|
|
func (q *Queries) RerootTrackPaths(ctx context.Context, arg RerootTrackPathsParams) (int64, error) {
|
|
result, err := q.db.Exec(ctx, rerootTrackPaths, arg.NewRoot, arg.OldRoot)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return result.RowsAffected(), nil
|
|
}
|
|
|
|
const sampleTrackPathsUnder = `-- name: SampleTrackPathsUnder :many
|
|
SELECT file_path FROM tracks
|
|
WHERE starts_with(file_path, $1::text || '/') AND missing_since IS NULL
|
|
ORDER BY random()
|
|
LIMIT $2::int
|
|
`
|
|
|
|
type SampleTrackPathsUnderParams struct {
|
|
Root string
|
|
N int32
|
|
}
|
|
|
|
// A few present tracks under a folder, to check a move before rewriting it.
|
|
func (q *Queries) SampleTrackPathsUnder(ctx context.Context, arg SampleTrackPathsUnderParams) ([]string, error) {
|
|
rows, err := q.db.Query(ctx, sampleTrackPathsUnder, arg.Root, arg.N)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
var items []string
|
|
for rows.Next() {
|
|
var file_path string
|
|
if err := rows.Scan(&file_path); err != nil {
|
|
return nil, err
|
|
}
|
|
items = append(items, file_path)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return nil, err
|
|
}
|
|
return items, nil
|
|
}
|
|
|
|
const updateLibraryScanPaths = `-- name: UpdateLibraryScanPaths :one
|
|
UPDATE library_settings
|
|
SET scan_paths = $1::text[],
|
|
updated_at = now()
|
|
WHERE id = true
|
|
RETURNING id, scan_paths, updated_at
|
|
`
|
|
|
|
func (q *Queries) UpdateLibraryScanPaths(ctx context.Context, scanPaths []string) (LibrarySetting, error) {
|
|
row := q.db.QueryRow(ctx, updateLibraryScanPaths, scanPaths)
|
|
var i LibrarySetting
|
|
err := row.Scan(&i.ID, &i.ScanPaths, &i.UpdatedAt)
|
|
return i, err
|
|
}
|