Removed useless group by
This commit is contained in:
@@ -51,7 +51,6 @@ namespace lms::db
|
|||||||
session.checkReadTransaction();
|
session.checkReadTransaction();
|
||||||
|
|
||||||
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM cluster c") };
|
auto query{ session.getDboSession()->query<ResultType>("SELECT " + std::string{ itemToSelect } + " FROM cluster c") };
|
||||||
query.groupBy("c.id");
|
|
||||||
|
|
||||||
if (params.track.isValid() || params.release.isValid())
|
if (params.track.isValid() || params.release.isValid())
|
||||||
query.join("track_cluster t_c ON t_c.cluster_id = c.id");
|
query.join("track_cluster t_c ON t_c.cluster_id = c.id");
|
||||||
@@ -83,6 +82,8 @@ namespace lms::db
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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");
|
query.groupBy("c.id");
|
||||||
|
|
||||||
return query;
|
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
|
} // namespace lms::db::tests
|
||||||
@@ -275,4 +275,35 @@ namespace lms::db::tests
|
|||||||
EXPECT_EQ(links[0]->getTrack()->getId(), track2.getId());
|
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
|
} // namespace lms::db::tests
|
||||||
Reference in New Issue
Block a user