Added a way to filter on releases that belong to the same group

This commit is contained in:
emeric
2025-02-17 18:39:15 +01:00
parent a3dfc082ea
commit f96f0d6377
4 changed files with 37 additions and 1 deletions
+3
View File
@@ -205,6 +205,9 @@ namespace lms::db
query.where(oss.str());
}
if (params.releaseGroupMBID)
query.where("group_mbid = ?").bind(params.releaseGroupMBID->getAsString());
switch (params.sortMethod)
{
case ReleaseSortMethod::None:
+1
View File
@@ -235,6 +235,7 @@ namespace lms::db
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_id_idx ON release(id)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_image_idx ON release(image_id)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_group_mbid_idx ON release(group_mbid)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_mbid_idx ON release(mbid)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_name_idx ON release(name)");
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_name_nocase_idx ON release(name COLLATE NOCASE)");
@@ -165,7 +165,8 @@ namespace lms::db
ArtistId artist; // only releases that involved this user
core::EnumSet<TrackArtistLinkType> trackArtistLinkTypes; // and for these link types
core::EnumSet<TrackArtistLinkType> excludedTrackArtistLinkTypes; // but not for these link types
std::string releaseType; // If set, albums that has this release type
std::string releaseType; // If set, releases that has this release type
std::optional<core::UUID> releaseGroupMBID; // If set, releases that belong to this release group
DirectoryId directory; // if set, releases in this directory (cannot be set with parent directory)
DirectoryId parentDirectory; // if set, releases in this parent directory (cannot be set with directory)
@@ -222,6 +223,11 @@ namespace lms::db
releaseType = _releaseType;
return *this;
}
FindParameters& setReleaseGroupMBID(const std::optional<core::UUID>& _releaseGroupMBID)
{
releaseGroupMBID = _releaseGroupMBID;
return *this;
}
FindParameters& setDirectory(DirectoryId _directory)
{
directory = _directory;
+26
View File
@@ -1360,4 +1360,30 @@ namespace lms::db::tests
EXPECT_EQ(addedTime, track2.get()->getAddedTime());
}
}
TEST_F(DatabaseFixture, Release_groupMBID)
{
ScopedRelease release{ session, "relA" };
const std::optional<core::UUID> groupMBID{ core::UUID::fromString("1ad8f716-2fd6-4d09-8ada-39525947217c") };
{
auto transaction{ session.createReadTransaction() };
const auto releases{ Release::find(session, Release::FindParameters{}.setReleaseGroupMBID(groupMBID)) };
EXPECT_EQ(releases.results.size(), 0);
}
{
auto transaction{ session.createWriteTransaction() };
release.get().modify()->setGroupMBID(groupMBID);
}
{
auto transaction{ session.createReadTransaction() };
const auto releases{ Release::find(session, Release::FindParameters{}.setReleaseGroupMBID(groupMBID)) };
EXPECT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0]->getId(), release->getId());
}
}
} // namespace lms::db::tests