A track credited to more than one artist has exactly one navigable artist in this app and the rest are punctuation. `primaryArtist()` string-parses the credit, strips a " feat. " clause and discards the guest; it deliberately does not split on "&", "with" or "," because those live inside real artist names. Measured on a real 26,069-file library plus an 80+80 MusicBrainz sample: 13% of recordings are multi-artist upstream, while only 0.86% of files carry any structured multi-artist tag — mp3 carries zero files with multiple MUSICBRAINZ_ARTISTID across 19,840. Of 1,286 files saying "feat.", 90% have nothing structured behind it, and a sample of 80 such files was multi-artist in MB 80 times out of 80. CLAUDE.md justified plan 013's removal of the credit tables with "3 credits of 2,823 listed more than one artist". That measured our own *writer* — cachedLinkArtist was called once per credit, so a collaboration could never have been recorded. Dropping the join table was still right on cost; the evidence for "multi-artist is rare" was not. A credit is ordered parts and the credit string is derived from them, so join phrases are assembly instructions, not disassembly ones. Nothing here reconstructs a credit by searching a name inside a credit string: the stored text may come from tags while the parts come from the catalog, and those disagree for ~1 in 3 multi-artist credits. Where it comes from, after two dead ends: the canonical dump CI already streams has no join phrases and no as-credited names, and the JSON dumps cover 153,691 recordings of ~35M with *zero* overlap against a real library. So mbdump.tar.bz2 — 7.1 GB, ~13.7 min in pure-Go bzip2, whose members are alphabetical, which is what lets one pass resolve an entity's credit without buffering 35M recordings. - artist_credit_part / artist_credit_ref, multi-artist credits only: a single-artist credit is already explore_index's own artist_name. - Column layouts verified against the real 20260815 export; ErrDumpShape makes a wrong guess a failed build, not a wrong catalog. - The pass runs on every mode, not just a build. The job picks its mode from the index's own state, and a complete import means "refresh", which never enters the importer — so credits could otherwise only arrive via a rebuild that re-downloads ~205 GB. It reports whether it populated anything, which is what flips `changed` and republishes. - The importer asks whether an artifact carries the tables, on the writer where `core` is attached, so the artifact already published still imports. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfVYUVExXsx1nSWrXN8mAh
412 lines
8.1 KiB
Go
412 lines
8.1 KiB
Go
// Code generated by sqlc. DO NOT EDIT.
|
|
// versions:
|
|
// sqlc v1.30.0
|
|
|
|
package sqlcgen
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
type Album struct {
|
|
ID int64
|
|
Name string
|
|
ArtistCredit string
|
|
ArtistID sql.NullInt64
|
|
Mbid sql.NullString
|
|
Year sql.NullInt64
|
|
OriginalYear sql.NullInt64
|
|
CoverArtID sql.NullInt64
|
|
PendingReleaseMbid sql.NullString
|
|
}
|
|
|
|
type Artist struct {
|
|
ID int64
|
|
Name string
|
|
Mbid sql.NullString
|
|
}
|
|
|
|
type ArtistCreditPart struct {
|
|
CreditID int64
|
|
Position int64
|
|
ArtistMbid []byte
|
|
CreditedName string
|
|
JoinPhrase string
|
|
}
|
|
|
|
type ArtistCreditRef struct {
|
|
Mbid []byte
|
|
CreditID int64
|
|
}
|
|
|
|
type ArtistEnrichment struct {
|
|
ArtistMbid string
|
|
BrowsedAt sql.NullTime
|
|
SimilarAt sql.NullTime
|
|
}
|
|
|
|
type ArtistImage struct {
|
|
ID int64
|
|
ArtistMbid string
|
|
Source string
|
|
SourceUrl string
|
|
FilePath string
|
|
IsPrimary int64
|
|
SortOrder int64
|
|
Width sql.NullInt64
|
|
Height sql.NullInt64
|
|
FileSize sql.NullInt64
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type ArtistMetadatum struct {
|
|
Mbid string
|
|
Source string
|
|
Data []byte
|
|
FetchedAt time.Time
|
|
}
|
|
|
|
type AudioFile struct {
|
|
ID int64
|
|
FilePath string
|
|
LibraryID int64
|
|
FileTypeID int64
|
|
LengthMilliseconds int64
|
|
SampleRate int64
|
|
BitDepth int64
|
|
Channels int64
|
|
Bitrate int64
|
|
FileSize int64
|
|
Title string
|
|
ArtistCredit string
|
|
ArtistID sql.NullInt64
|
|
AlbumID sql.NullInt64
|
|
TrackNumber sql.NullInt64
|
|
DiscNumber sql.NullInt64
|
|
TotalTracks sql.NullInt64
|
|
Year sql.NullInt64
|
|
Composer string
|
|
Comment string
|
|
RecordingMbid sql.NullString
|
|
Basename string
|
|
GroupKey string
|
|
ModifiedAt int64
|
|
PlayCount int64
|
|
LastPlayed sql.NullTime
|
|
TagStatus string
|
|
}
|
|
|
|
type CoverArt struct {
|
|
ID int64
|
|
IsEmbedded bool
|
|
FilePath string
|
|
MimeType string
|
|
}
|
|
|
|
type DownloadDownload struct {
|
|
ID string
|
|
LibraryID int64
|
|
Source string
|
|
RequestID sql.NullInt64
|
|
ReleaseMbid sql.NullString
|
|
ReleaseGroupMbid sql.NullString
|
|
RecordingMbid sql.NullString
|
|
Artist string
|
|
Album string
|
|
Query string
|
|
Expected string
|
|
State string
|
|
Error string
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type DownloadItem struct {
|
|
ID string
|
|
DownloadID string
|
|
ProviderID int64
|
|
TransportID sql.NullInt64
|
|
ExternalID string
|
|
Candidate string
|
|
State string
|
|
StagingDir string
|
|
BytesDone int64
|
|
BytesTotal int64
|
|
ImportedPaths string
|
|
Error string
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type DownloadProvider struct {
|
|
ID int64
|
|
Kind string
|
|
Name string
|
|
Enabled int64
|
|
Priority int64
|
|
Settings string
|
|
CreatedAt time.Time
|
|
}
|
|
|
|
type DownloadRequest struct {
|
|
ID int64
|
|
Mbid string
|
|
Entity string
|
|
LibraryID int64
|
|
Artist string
|
|
Title string
|
|
Scope string
|
|
Secondary int64
|
|
State string
|
|
ParentID sql.NullInt64
|
|
Attempts int64
|
|
LastError string
|
|
LastTriedAt sql.NullTime
|
|
NextTryAt sql.NullTime
|
|
ExternalIds string
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type ExcludedPath struct {
|
|
ID int64
|
|
LibraryID int64
|
|
FilePath string
|
|
ExcludedAt time.Time
|
|
}
|
|
|
|
type ExploreChampionFt struct {
|
|
Title string
|
|
ArtistName string
|
|
Aliases string
|
|
}
|
|
|
|
type ExploreIndex struct {
|
|
ID int64
|
|
EntityType int64
|
|
Mbid []byte
|
|
Title string
|
|
ArtistName string
|
|
ArtistMbid []byte
|
|
Aliases string
|
|
Popularity int64
|
|
ListenerCount int64
|
|
Duration int64
|
|
CaaReleaseMbid []byte
|
|
ReleaseName string
|
|
PrimaryType string
|
|
SecondaryTypes string
|
|
ReleaseDate string
|
|
TotalTracks int64
|
|
ArtistType string
|
|
Country string
|
|
Disambiguation string
|
|
SortName string
|
|
InLibrary int64
|
|
IsSimilar int64
|
|
LocalArtistID sql.NullInt64
|
|
LocalReleaseGroupID sql.NullInt64
|
|
LocalRecordingID sql.NullInt64
|
|
DiscogFetched int64
|
|
}
|
|
|
|
type ExploreIndexFt struct {
|
|
Title string
|
|
ArtistName string
|
|
Aliases string
|
|
}
|
|
|
|
type ExploreIndexMetum struct {
|
|
Key string
|
|
Value string
|
|
}
|
|
|
|
type FileGenre struct {
|
|
AudioFileID int64
|
|
GenreID int64
|
|
}
|
|
|
|
type FileType struct {
|
|
ID int64
|
|
Extension string
|
|
}
|
|
|
|
type Genre struct {
|
|
ID int64
|
|
Name string
|
|
}
|
|
|
|
type HttpCache struct {
|
|
UrlKey string
|
|
Response []byte
|
|
ExpiresAt time.Time
|
|
EntityMbid string
|
|
EntityType string
|
|
}
|
|
|
|
type JobState struct {
|
|
ID string
|
|
Kind string
|
|
Title string
|
|
Subtitle string
|
|
PausedAt string
|
|
}
|
|
|
|
type Library struct {
|
|
ID int64
|
|
Name string
|
|
Path string
|
|
CreatedAt time.Time
|
|
AutotagWarningAcked int64
|
|
}
|
|
|
|
type Lyric struct {
|
|
AudioFileID int64
|
|
Text string
|
|
Source string
|
|
RecordingMbid sql.NullString
|
|
FetchedAt time.Time
|
|
}
|
|
|
|
type LyricsIndex struct {
|
|
Lyrics string
|
|
}
|
|
|
|
type PlayHistory struct {
|
|
ID int64
|
|
AudioFileID int64
|
|
PlayedAt time.Time
|
|
}
|
|
|
|
type PlayerState struct {
|
|
ID int64
|
|
Volume int64
|
|
Muted bool
|
|
LastTrackPath string
|
|
LastPositionSeconds int64
|
|
}
|
|
|
|
type Playlist struct {
|
|
ID int64
|
|
Name string
|
|
IsSmart int64
|
|
SmartRules sql.NullString
|
|
SmartSnapshotAt sql.NullTime
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
}
|
|
|
|
type PlaylistTrack struct {
|
|
ID int64
|
|
PlaylistID int64
|
|
AudioFileID sql.NullInt64
|
|
Position int64
|
|
PhantomTitle sql.NullString
|
|
PhantomArtist sql.NullString
|
|
PhantomAlbum sql.NullString
|
|
PhantomDurationMs sql.NullInt64
|
|
PhantomGenre sql.NullString
|
|
PhantomCoverArtPath sql.NullString
|
|
PhantomFilePath sql.NullString
|
|
}
|
|
|
|
type Queue struct {
|
|
ID int64
|
|
SourcePlaylistID sql.NullInt64
|
|
CurrentPosition int64
|
|
ShuffleMode bool
|
|
RepeatMode string
|
|
ShuffleOrder sql.NullString
|
|
SourceType string
|
|
SourceID int64
|
|
SourceLabel string
|
|
}
|
|
|
|
type QueueTrack struct {
|
|
ID int64
|
|
AudioFileID int64
|
|
Position int64
|
|
}
|
|
|
|
type ReleaseToRg struct {
|
|
ReleaseMbid string
|
|
RgMbid string
|
|
}
|
|
|
|
type SearchClick struct {
|
|
Query string
|
|
EntityMbid string
|
|
EntityType string
|
|
ClickCount int64
|
|
LastClicked time.Time
|
|
}
|
|
|
|
type SearchIndex struct {
|
|
FilePath string
|
|
Title string
|
|
Artist string
|
|
Album string
|
|
}
|
|
|
|
type SimilarArtistMap struct {
|
|
SourceArtistMbid string
|
|
SimilarArtistMbid string
|
|
SimilarArtistName string
|
|
Score int64
|
|
}
|
|
|
|
type TaggingCandidate struct {
|
|
GroupKey string
|
|
Candidates string
|
|
ComputedAt time.Time
|
|
}
|
|
|
|
type TaggingItem struct {
|
|
GroupKey string
|
|
LibraryID int64
|
|
TrackCount int64
|
|
AlbumName string
|
|
AlbumArtist string
|
|
DiscNumber int64
|
|
BestMatchReleaseMbid sql.NullString
|
|
Score sql.NullFloat64
|
|
LastCheckedAt sql.NullTime
|
|
Status string
|
|
ClearedAt sql.NullTime
|
|
CreatedAt time.Time
|
|
Synthetic int64
|
|
ParentGroupKey string
|
|
AlbumArtistConflict int64
|
|
}
|
|
|
|
type TrackMetadatum struct {
|
|
ID int64
|
|
FilePath string
|
|
LengthMilliseconds int64
|
|
Title string
|
|
ArtistName string
|
|
TrackNumber sql.NullInt64
|
|
DiscNumber sql.NullInt64
|
|
Album string
|
|
Genre string
|
|
Year int64
|
|
ReleaseYear int64
|
|
Composer string
|
|
FileType string
|
|
SampleRate int64
|
|
BitDepth int64
|
|
Channels int64
|
|
Bitrate int64
|
|
FileSize int64
|
|
LibraryID int64
|
|
PlayCount int64
|
|
LastPlayed sql.NullTime
|
|
CoverArtPath string
|
|
ArtistMbid string
|
|
ReleaseGroupMbid string
|
|
RecordingMbid string
|
|
AlbumID sql.NullInt64
|
|
ArtistID sql.NullInt64
|
|
}
|