Removed useless group by
This commit is contained in:
@@ -51,7 +51,6 @@ namespace lms::db
|
||||
session.checkReadTransaction();
|
||||
|
||||
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM cluster c") };
|
||||
query.groupBy("c.id");
|
||||
|
||||
if (params.track.isValid() || params.release.isValid())
|
||||
query.join("track_cluster t_c ON t_c.cluster_id = c.id");
|
||||
@@ -83,7 +82,9 @@ namespace lms::db
|
||||
break;
|
||||
}
|
||||
|
||||
query.groupBy("c.id");
|
||||
// track_cluster has a UNIQUE constraint on (track_id, cluster_id), so no duplicates can occur when filtering by track
|
||||
if (!params.track.isValid())
|
||||
query.groupBy("c.id");
|
||||
|
||||
return query;
|
||||
}
|
||||
|
||||
@@ -723,4 +723,38 @@ namespace lms::db::tests
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Cluster_findByTrackAndTypeName)
|
||||
{
|
||||
ScopedTrack track{ session };
|
||||
ScopedClusterType genreType{ session, "GENRE" };
|
||||
ScopedClusterType moodType{ session, "MOOD" };
|
||||
ScopedCluster genre1{ session, genreType.lockAndGet(), "Rock" };
|
||||
ScopedCluster genre2{ session, genreType.lockAndGet(), "Pop" };
|
||||
ScopedCluster mood{ session, moodType.lockAndGet(), "Happy" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
genre1.get().modify()->addTrack(track.get());
|
||||
genre2.get().modify()->addTrack(track.get());
|
||||
mood.get().modify()->addTrack(track.get());
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
const auto genres{ Cluster::find(session, Cluster::FindParameters{}.setTrack(track.getId()).setClusterTypeName("GENRE")) };
|
||||
ASSERT_EQ(genres.results.size(), 2);
|
||||
|
||||
const auto moods{ Cluster::find(session, Cluster::FindParameters{}.setTrack(track.getId()).setClusterTypeName("MOOD")) };
|
||||
ASSERT_EQ(moods.results.size(), 1);
|
||||
EXPECT_EQ(moods.results.front()->getId(), mood.getId());
|
||||
|
||||
const auto all{ Cluster::find(session, Cluster::FindParameters{}.setTrack(track.getId())) };
|
||||
EXPECT_EQ(all.results.size(), 3);
|
||||
|
||||
const auto none{ Cluster::find(session, Cluster::FindParameters{}.setTrack(track.getId()).setClusterTypeName("GROUPING")) };
|
||||
EXPECT_EQ(none.results.size(), 0);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace lms::db::tests
|
||||
@@ -275,4 +275,35 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(links[0]->getTrack()->getId(), track2.getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Track_getArtists_typeFilterAndOrder)
|
||||
{
|
||||
ScopedTrack track{ session };
|
||||
ScopedArtist artist1{ session, "Artist1" };
|
||||
ScopedArtist artist2{ session, "Artist2" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
session.create<TrackArtistLink>(track.get(), artist1.get(), TrackArtistLinkType::Artist, false);
|
||||
session.create<TrackArtistLink>(track.get(), artist2.get(), TrackArtistLinkType::Artist, false);
|
||||
session.create<TrackArtistLink>(track.get(), artist1.get(), TrackArtistLinkType::Mixer, false);
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
const auto artistLinks{ track->getArtists({ TrackArtistLinkType::Artist }) };
|
||||
ASSERT_EQ(artistLinks.size(), 2);
|
||||
EXPECT_EQ(artistLinks[0]->getId(), artist1.getId());
|
||||
EXPECT_EQ(artistLinks[1]->getId(), artist2.getId());
|
||||
|
||||
const auto mixerLinks{ track->getArtists({ TrackArtistLinkType::Mixer }) };
|
||||
ASSERT_EQ(mixerLinks.size(), 1);
|
||||
EXPECT_EQ(mixerLinks[0]->getId(), artist1.getId());
|
||||
|
||||
const auto noFilter{ track->getArtists({}) };
|
||||
EXPECT_EQ(noFilter.size(), 2);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace lms::db::tests
|
||||
Reference in New Issue
Block a user