diff --git a/src/libs/database/impl/Release.cpp b/src/libs/database/impl/Release.cpp index ff37fe94..bb3fea1e 100644 --- a/src/libs/database/impl/Release.cpp +++ b/src/libs/database/impl/Release.cpp @@ -335,7 +335,7 @@ namespace lms::db { session.checkReadTransaction(); - return utils::fetchQuerySingleResult(createQuery(session, "COUNT(r.id)", params)); + return utils::fetchQuerySingleResult(createQuery(session, "COUNT(DISTINCT r.id)", params)); } std::size_t Release::getDiscCount() const diff --git a/src/libs/database/test/Release.cpp b/src/libs/database/test/Release.cpp index eb17c6fb..9771c878 100644 --- a/src/libs/database/test/Release.cpp +++ b/src/libs/database/test/Release.cpp @@ -639,22 +639,36 @@ namespace lms::db::tests auto releases{ Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist })) }; EXPECT_EQ(releases.results.size(), 0); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist })), 0); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId())), 0); releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist2.getId(), { TrackArtistLinkType::Artist })); EXPECT_EQ(releases.results.size(), 0); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist2.getId(), { TrackArtistLinkType::Artist })), 0); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist2.getId())), 0); } { auto transaction{ session.createWriteTransaction() }; TrackArtistLink::create(session, track.get(), artist.get(), TrackArtistLinkType::Artist); + TrackArtistLink::create(session, track.get(), artist.get(), TrackArtistLinkType::Producer); + } + + { + auto transaction{ session.createReadTransaction() }; + + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}), 1); auto releases{ Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist })) }; ASSERT_EQ(releases.results.size(), 1); EXPECT_EQ(releases.results.front(), release.getId()); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist })), 1); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Remixer })), 0); releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist, TrackArtistLinkType::Mixer })); EXPECT_EQ(releases.results.size(), 1); EXPECT_EQ(releases.results.front(), release.getId()); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Artist, TrackArtistLinkType::Mixer })), 1); releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist2.getId(), { TrackArtistLinkType::Artist })); EXPECT_EQ(releases.results.size(), 0); @@ -669,6 +683,7 @@ namespace lms::db::tests releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId())); ASSERT_EQ(releases.results.size(), 1); EXPECT_EQ(releases.results.front(), release.getId()); + EXPECT_EQ(Release::getCount(session, Release::FindParameters{}.setArtist(artist.getId())), 1); releases = Release::findIds(session, Release::FindParameters{}.setArtist(artist.getId(), { TrackArtistLinkType::Composer })); EXPECT_EQ(releases.results.size(), 0);