Simplified a query

This commit is contained in:
emeric
2025-07-06 16:23:47 +02:00
parent 7b67b5c08b
commit 4fcdf2003c
5 changed files with 27 additions and 25 deletions
+3 -14
View File
@@ -43,7 +43,7 @@ namespace lms::db
|| params.track.isValid() || params.track.isValid()
|| params.release.isValid() || params.release.isValid()
|| params.trackList.isValid() || params.trackList.isValid()
|| !params.imageTypes.empty() || params.imageType.has_value()
|| params.sortMethod == TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc || params.sortMethod == TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc
|| params.sortMethod == TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc) || params.sortMethod == TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc)
{ {
@@ -90,19 +90,8 @@ namespace lms::db
query.where("t_l_e.tracklist_id = ?").bind(params.trackList); query.where("t_l_e.tracklist_id = ?").bind(params.trackList);
} }
if (!params.imageTypes.empty()) if (params.imageType.has_value())
{ query.where("t_e_i_l.type = ?").bind(params.imageType.value());
std::string clause{ "t_e_i_l.type IN (" };
for (const auto& type : params.imageTypes)
{
if (clause.back() != '(')
clause += ",";
clause += "?";
query.bind(type);
}
clause += ")";
query.where(clause);
}
} }
switch (params.sortMethod) switch (params.sortMethod)
@@ -54,7 +54,7 @@ namespace lms::db
ReleaseId release; ReleaseId release;
std::optional<int> discNumber; std::optional<int> discNumber;
TrackListId trackList; TrackListId trackList;
core::EnumSet<ImageType> imageTypes; std::optional<ImageType> imageType;
TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None }; TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None };
FindParameters& setRange(std::optional<Range> _range) FindParameters& setRange(std::optional<Range> _range)
@@ -89,9 +89,9 @@ namespace lms::db
trackList = _trackList; trackList = _trackList;
return *this; return *this;
} }
FindParameters& setImageTypes(core::EnumSet<ImageType> _imageTypes) FindParameters& setImageType(std::optional<ImageType> _imageType)
{ {
imageTypes = _imageTypes; imageType = _imageType;
return *this; return *this;
} }
FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod) FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod)
+16 -3
View File
@@ -198,7 +198,7 @@ namespace lms::db::tests
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setRelease(release.getId()); params.setRelease(release.getId());
params.setImageTypes({ ImageType::Media }); params.setImageType(ImageType::Media);
params.setSortMethod(TrackEmbeddedImageSortMethod::SizeDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::SizeDesc);
std::vector<TrackEmbeddedImageId> visitedIds; std::vector<TrackEmbeddedImageId> visitedIds;
@@ -214,7 +214,7 @@ namespace lms::db::tests
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setRelease(release.getId()); params.setRelease(release.getId());
params.setImageTypes({ ImageType::Media }); params.setImageType(ImageType::Media);
params.setSortMethod(TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc);
std::vector<TrackEmbeddedImageId> visitedIds; std::vector<TrackEmbeddedImageId> visitedIds;
@@ -230,7 +230,7 @@ namespace lms::db::tests
TrackEmbeddedImage::FindParameters params; TrackEmbeddedImage::FindParameters params;
params.setRelease(release.getId()); params.setRelease(release.getId());
params.setImageTypes({ ImageType::Media }); params.setImageType(ImageType::Media);
params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc);
std::vector<TrackEmbeddedImageId> visitedIds; std::vector<TrackEmbeddedImageId> visitedIds;
@@ -240,6 +240,19 @@ namespace lms::db::tests
EXPECT_EQ(visitedIds[1], image3.getId()); EXPECT_EQ(visitedIds[1], image3.getId());
EXPECT_EQ(visitedIds[2], image2.getId()); EXPECT_EQ(visitedIds[2], image2.getId());
} }
{
auto transaction{ session.createReadTransaction() };
TrackEmbeddedImage::FindParameters params;
params.setRelease(release.getId());
params.setImageType(ImageType::BackCover);
params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc);
std::vector<TrackEmbeddedImageId> visitedIds;
TrackEmbeddedImage::find(session, params, [&](const TrackEmbeddedImage::pointer& image) { visitedIds.push_back(image->getId()); });
ASSERT_EQ(visitedIds.size(), 0);
}
} }
TEST_F(DatabaseFixture, TrackEmbeddedImage_findByParams_artist) TEST_F(DatabaseFixture, TrackEmbeddedImage_findByParams_artist)
@@ -140,7 +140,7 @@ namespace lms::scanner
{ {
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setRelease(release->getId()); params.setRelease(release->getId());
params.setImageTypes({ db::ImageType::FrontCover }); params.setImageType(db::ImageType::FrontCover);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
@@ -154,7 +154,7 @@ namespace lms::scanner
{ {
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setRelease(release->getId()); params.setRelease(release->getId());
params.setImageTypes({ db::ImageType::Media }); params.setImageType(db::ImageType::Media);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
@@ -63,7 +63,7 @@ namespace lms::scanner
{ {
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setTrack(track->getId()); params.setTrack(track->getId());
params.setImageTypes({ db::ImageType::FrontCover }); params.setImageType(db::ImageType::FrontCover);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); });
@@ -90,7 +90,7 @@ namespace lms::scanner
{ {
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setTrack(track->getId()); params.setTrack(track->getId());
params.setImageTypes({ db::ImageType::Media }); params.setImageType(db::ImageType::Media);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::SizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); });
@@ -109,7 +109,7 @@ namespace lms::scanner
db::TrackEmbeddedImage::FindParameters params; db::TrackEmbeddedImage::FindParameters params;
params.setRelease(releaseId); params.setRelease(releaseId);
params.setDiscNumber(discNumber); params.setDiscNumber(discNumber);
params.setImageTypes({ db::ImageType::Media }); params.setImageType(db::ImageType::Media);
params.setSortMethod(db::TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc); params.setSortMethod(db::TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc);
params.setRange(db::Range{ .offset = 0, .size = 1 }); params.setRange(db::Range{ .offset = 0, .size = 1 });
db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); }); db::TrackEmbeddedImage::find(session, params, [&](const db::TrackEmbeddedImage::pointer& image) { res = db::Artwork::find(session, image->getId()); });