diff --git a/backend/database/search.go b/backend/database/search.go index ad49655..baa83c1 100644 --- a/backend/database/search.go +++ b/backend/database/search.go @@ -33,25 +33,13 @@ func (d *DB) SearchFTS( rows, err := d.db.QueryContext(d.Ctx, ` SELECT - af.file_path, - af.length_milliseconds, - COALESCE(r.name, ''), - COALESCE(ac.text, ''), - COALESCE(rg.name, '') + tm.file_path, + tm.length_milliseconds, + tm.title, + tm.artist_name, + tm.album FROM search_index si - JOIN audio_files af ON af.id = si.rowid - LEFT JOIN recordings r - ON af.recording_id = r.id - LEFT JOIN artist_credit ac - ON r.artist_credit_id = ac.id - LEFT JOIN ( - SELECT recording_id, - MIN(release_group_id) AS release_group_id - FROM release_group_recordings - GROUP BY recording_id - ) rgr ON r.id = rgr.recording_id - LEFT JOIN release_groups rg - ON rgr.release_group_id = rg.id + JOIN track_metadata tm ON tm.id = si.rowid WHERE search_index MATCH ? ORDER BY rank LIMIT ? @@ -91,25 +79,13 @@ func (d *DB) SearchFTSByFilename( rows, err := d.db.QueryContext(d.Ctx, ` SELECT - af.file_path, - af.length_milliseconds, - COALESCE(r.name, ''), - COALESCE(ac.text, ''), - COALESCE(rg.name, '') + tm.file_path, + tm.length_milliseconds, + tm.title, + tm.artist_name, + tm.album FROM search_index si - JOIN audio_files af ON af.id = si.rowid - LEFT JOIN recordings r - ON af.recording_id = r.id - LEFT JOIN artist_credit ac - ON r.artist_credit_id = ac.id - LEFT JOIN ( - SELECT recording_id, - MIN(release_group_id) AS release_group_id - FROM release_group_recordings - GROUP BY recording_id - ) rgr ON r.id = rgr.recording_id - LEFT JOIN release_groups rg - ON rgr.release_group_id = rg.id + JOIN track_metadata tm ON tm.id = si.rowid WHERE search_index MATCH ? ORDER BY rank LIMIT ? @@ -167,24 +143,8 @@ func (d *DB) RebuildSearchIndex() error { _, err := d.db.ExecContext(d.Ctx, ` INSERT INTO search_index(rowid, file_path, title, artist, album) - SELECT - af.id, - af.file_path, - COALESCE(r.name, ''), - COALESCE(ac.text, ''), - COALESCE(rg.name, '') - FROM audio_files af - LEFT JOIN recordings r ON af.recording_id = r.id - LEFT JOIN artist_credit ac - ON r.artist_credit_id = ac.id - LEFT JOIN ( - SELECT recording_id, - MIN(release_group_id) AS release_group_id - FROM release_group_recordings - GROUP BY recording_id - ) rgr ON r.id = rgr.recording_id - LEFT JOIN release_groups rg - ON rgr.release_group_id = rg.id + SELECT id, file_path, title, artist_name, album + FROM track_metadata `) if err != nil { return fmt.Errorf( @@ -231,44 +191,24 @@ func (d *DB) SearchFTSTracks( rows, err := d.db.QueryContext(d.Ctx, ` SELECT - af.file_path, - af.length_milliseconds, - COALESCE(r.name, '') AS title, - COALESCE(ac.text, '') AS artist_name, - r.track_number, - r.disc_number, - COALESCE(rg.name, '') AS album, - CAST(COALESCE( - (SELECT GROUP_CONCAT(g.name, '||') - FROM recording_genres rg_sub - JOIN genres g ON rg_sub.genre_id = g.id - WHERE rg_sub.recording_id = r.id), - '' - ) AS TEXT) AS genre, - COALESCE(r.year, 0) AS year, - COALESCE(r.composer, '') AS composer, - COALESCE(ft.extension, '') AS file_type, - af.sample_rate, - af.bit_depth, - af.channels, - af.bitrate, - af.file_size + tm.file_path, + tm.length_milliseconds, + tm.title, + tm.artist_name, + tm.track_number, + tm.disc_number, + tm.album, + tm.genre, + tm.year, + tm.composer, + tm.file_type, + tm.sample_rate, + tm.bit_depth, + tm.channels, + tm.bitrate, + tm.file_size FROM search_index si - JOIN audio_files af ON af.id = si.rowid - LEFT JOIN recordings r - ON af.recording_id = r.id - LEFT JOIN artist_credit ac - ON r.artist_credit_id = ac.id - LEFT JOIN ( - SELECT recording_id, - MIN(release_group_id) AS release_group_id - FROM release_group_recordings - GROUP BY recording_id - ) rgr ON r.id = rgr.recording_id - LEFT JOIN release_groups rg - ON rgr.release_group_id = rg.id - LEFT JOIN file_types ft - ON af.file_type_id = ft.id + JOIN track_metadata tm ON tm.id = si.rowid WHERE search_index MATCH ? ORDER BY rank LIMIT ?