Added a way to filter on releases that belong to the same group
This commit is contained in:
@@ -205,6 +205,9 @@ namespace lms::db
|
|||||||
query.where(oss.str());
|
query.where(oss.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (params.releaseGroupMBID)
|
||||||
|
query.where("group_mbid = ?").bind(params.releaseGroupMBID->getAsString());
|
||||||
|
|
||||||
switch (params.sortMethod)
|
switch (params.sortMethod)
|
||||||
{
|
{
|
||||||
case ReleaseSortMethod::None:
|
case ReleaseSortMethod::None:
|
||||||
|
|||||||
@@ -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_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_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_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_idx ON release(name)");
|
||||||
utils::executeCommand(_session, "CREATE INDEX IF NOT EXISTS release_name_nocase_idx ON release(name COLLATE NOCASE)");
|
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
|
ArtistId artist; // only releases that involved this user
|
||||||
core::EnumSet<TrackArtistLinkType> trackArtistLinkTypes; // and for these link types
|
core::EnumSet<TrackArtistLinkType> trackArtistLinkTypes; // and for these link types
|
||||||
core::EnumSet<TrackArtistLinkType> excludedTrackArtistLinkTypes; // but not 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 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)
|
DirectoryId parentDirectory; // if set, releases in this parent directory (cannot be set with directory)
|
||||||
|
|
||||||
@@ -222,6 +223,11 @@ namespace lms::db
|
|||||||
releaseType = _releaseType;
|
releaseType = _releaseType;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
FindParameters& setReleaseGroupMBID(const std::optional<core::UUID>& _releaseGroupMBID)
|
||||||
|
{
|
||||||
|
releaseGroupMBID = _releaseGroupMBID;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
FindParameters& setDirectory(DirectoryId _directory)
|
FindParameters& setDirectory(DirectoryId _directory)
|
||||||
{
|
{
|
||||||
directory = _directory;
|
directory = _directory;
|
||||||
|
|||||||
@@ -1360,4 +1360,30 @@ namespace lms::db::tests
|
|||||||
EXPECT_EQ(addedTime, track2.get()->getAddedTime());
|
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
|
} // namespace lms::db::tests
|
||||||
Reference in New Issue
Block a user