From df22bed0724b3a0d04c9fefd0f5bb130945a6b4e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 12 Jul 2023 10:36:06 +1000 Subject: Include title in indexes to avoid a per-record disk read GOTTA GO FAST --- src/database/database.cpp | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'src/database/database.cpp') diff --git a/src/database/database.cpp b/src/database/database.cpp index 0d1c43e2..d0011abe 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -600,20 +600,12 @@ auto Database::ParseRecord(const leveldb::Slice& key, return {}; } - // If there was a track id included for this key, then this is a leaf record. - // Fetch the actual track data instead of relying on the information in the - // key. - std::optional track; - if (data->track) { - std::optional track_data = dbGetTrackData(*data->track); - TrackTags track_tags; - if (track_data && - tag_parser_->ReadAndParseTags(track_data->filepath(), &track_tags)) { - track.emplace(*track_data, track_tags); - } + std::optional title; + if (!val.empty()) { + title = val.ToString(); } - return IndexRecord(*data, track); + return IndexRecord(*data, title, data->track); } template <> @@ -663,17 +655,17 @@ auto Database::ParseRecord(const leveldb::Slice& key, return stream.str(); } -IndexRecord::IndexRecord(const IndexKey& key, std::optional track) - : key_(key), track_(track) {} +IndexRecord::IndexRecord(const IndexKey& key, std::optional title, std::optional track) + : key_(key), override_text_(title), track_(track) {} auto IndexRecord::text() const -> std::optional { - if (track_) { - return track_->TitleOrFilename(); + if (override_text_) { + return override_text_; } return key_.item; } -auto IndexRecord::track() const -> std::optional { +auto IndexRecord::track() const -> std::optional { return track_; } -- cgit v1.2.3