Removed useless group by

This commit is contained in:
emeric
2026-06-14 14:19:19 +02:00
parent 845c437364
commit 77f9b033ed
3 changed files with 68 additions and 2 deletions
+3 -2
View File
@@ -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;
}
+34
View File
@@ -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