Simplified a query
This commit is contained in:
@@ -43,7 +43,7 @@ namespace lms::db
|
||||
|| params.track.isValid()
|
||||
|| params.release.isValid()
|
||||
|| params.trackList.isValid()
|
||||
|| !params.imageTypes.empty()
|
||||
|| params.imageType.has_value()
|
||||
|| params.sortMethod == TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc
|
||||
|| params.sortMethod == TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc)
|
||||
{
|
||||
@@ -90,19 +90,8 @@ namespace lms::db
|
||||
query.where("t_l_e.tracklist_id = ?").bind(params.trackList);
|
||||
}
|
||||
|
||||
if (!params.imageTypes.empty())
|
||||
{
|
||||
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);
|
||||
}
|
||||
if (params.imageType.has_value())
|
||||
query.where("t_e_i_l.type = ?").bind(params.imageType.value());
|
||||
}
|
||||
|
||||
switch (params.sortMethod)
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace lms::db
|
||||
ReleaseId release;
|
||||
std::optional<int> discNumber;
|
||||
TrackListId trackList;
|
||||
core::EnumSet<ImageType> imageTypes;
|
||||
std::optional<ImageType> imageType;
|
||||
TrackEmbeddedImageSortMethod sortMethod{ TrackEmbeddedImageSortMethod::None };
|
||||
|
||||
FindParameters& setRange(std::optional<Range> _range)
|
||||
@@ -89,9 +89,9 @@ namespace lms::db
|
||||
trackList = _trackList;
|
||||
return *this;
|
||||
}
|
||||
FindParameters& setImageTypes(core::EnumSet<ImageType> _imageTypes)
|
||||
FindParameters& setImageType(std::optional<ImageType> _imageType)
|
||||
{
|
||||
imageTypes = _imageTypes;
|
||||
imageType = _imageType;
|
||||
return *this;
|
||||
}
|
||||
FindParameters& setSortMethod(TrackEmbeddedImageSortMethod _sortMethod)
|
||||
|
||||
@@ -198,7 +198,7 @@ namespace lms::db::tests
|
||||
|
||||
TrackEmbeddedImage::FindParameters params;
|
||||
params.setRelease(release.getId());
|
||||
params.setImageTypes({ ImageType::Media });
|
||||
params.setImageType(ImageType::Media);
|
||||
params.setSortMethod(TrackEmbeddedImageSortMethod::SizeDesc);
|
||||
|
||||
std::vector<TrackEmbeddedImageId> visitedIds;
|
||||
@@ -214,7 +214,7 @@ namespace lms::db::tests
|
||||
|
||||
TrackEmbeddedImage::FindParameters params;
|
||||
params.setRelease(release.getId());
|
||||
params.setImageTypes({ ImageType::Media });
|
||||
params.setImageType(ImageType::Media);
|
||||
params.setSortMethod(TrackEmbeddedImageSortMethod::TrackNumberThenSizeDesc);
|
||||
|
||||
std::vector<TrackEmbeddedImageId> visitedIds;
|
||||
@@ -230,7 +230,7 @@ namespace lms::db::tests
|
||||
|
||||
TrackEmbeddedImage::FindParameters params;
|
||||
params.setRelease(release.getId());
|
||||
params.setImageTypes({ ImageType::Media });
|
||||
params.setImageType(ImageType::Media);
|
||||
params.setSortMethod(TrackEmbeddedImageSortMethod::DiscNumberThenTrackNumberThenSizeDesc);
|
||||
|
||||
std::vector<TrackEmbeddedImageId> visitedIds;
|
||||
@@ -240,6 +240,19 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(visitedIds[1], image3.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)
|
||||
|
||||
Reference in New Issue
Block a user