From 889096190a397e84e091ea786f5b4975fa66ab4e Mon Sep 17 00:00:00 2001 From: emeric Date: Mon, 5 Feb 2024 11:22:58 +0100 Subject: [PATCH] Do not use DISTINCT on track queries, as this is useless and slowdowns queries --- src/libs/database/impl/Track.cpp | 5 +- src/libs/database/include/database/Track.hpp | 2 - src/libs/database/test/Artist.cpp | 22 +++--- src/libs/database/test/Cluster.cpp | 78 +++++++++---------- src/libs/database/test/Release.cpp | 13 ++-- .../impl/PlaylistGeneratorService.cpp | 1 - src/lms/ui/PlayQueue.cpp | 1 - src/lms/ui/explore/PlayQueueController.cpp | 1 - src/lms/ui/explore/TrackListView.cpp | 1 - 9 files changed, 59 insertions(+), 65 deletions(-) diff --git a/src/libs/database/impl/Track.cpp b/src/libs/database/impl/Track.cpp index 0f9ae193..4a53b593 100644 --- a/src/libs/database/impl/Track.cpp +++ b/src/libs/database/impl/Track.cpp @@ -45,8 +45,7 @@ namespace Database { session.checkReadTransaction(); - std::string selectStatement{ params.distinct ? "SELECT DISTINCT" : "SELECT" }; - auto query{ session.getDboSession().query(selectStatement + " " + std::string{ itemToSelect } + " FROM track t") }; + auto query{ session.getDboSession().query("SELECT " + std::string{ itemToSelect } + " FROM track t") }; assert(params.keywords.empty() || params.name.empty()); for (std::string_view keyword : params.keywords) @@ -118,6 +117,8 @@ namespace Database } query.where(oss.str()); } + + query.groupBy("t.id"); } assert(!(params.nonRelease && params.release.isValid())); diff --git a/src/libs/database/include/database/Track.hpp b/src/libs/database/include/database/Track.hpp index 4237f528..4a815323 100644 --- a/src/libs/database/include/database/Track.hpp +++ b/src/libs/database/include/database/Track.hpp @@ -79,7 +79,6 @@ namespace Database { TrackListId trackList; // matching this trackList std::optional trackNumber; // matching this track number MediaLibraryId mediaLibrary; // If set, tracks in this library - bool distinct{ true }; FindParameters& setClusters(const std::vector& _clusters) { clusters = _clusters; return *this; } FindParameters& setKeywords(const std::vector& _keywords) { keywords = _keywords; return *this; } @@ -96,7 +95,6 @@ namespace Database { FindParameters& setTrackList(TrackListId _trackList) { trackList = _trackList; return *this; } FindParameters& setTrackNumber(int _trackNumber) { trackNumber = _trackNumber; return *this; } FindParameters& setMediaLibrary(MediaLibraryId _mediaLibrary) { mediaLibrary = _mediaLibrary; return *this; } - FindParameters& setDistinct(bool _distinct) { distinct = _distinct; return *this; } }; struct PathResult diff --git a/src/libs/database/test/Artist.cpp b/src/libs/database/test/Artist.cpp index 38ef7a94..3030706c 100644 --- a/src/libs/database/test/Artist.cpp +++ b/src/libs/database/test/Artist.cpp @@ -92,7 +92,7 @@ TEST_F(DatabaseFixture, Artist_singleTrack) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); } { @@ -108,7 +108,7 @@ TEST_F(DatabaseFixture, Artist_singleTrack) EXPECT_EQ(artistLink->getArtist()->getId(), artist.getId()); ASSERT_EQ(track->getArtists({ TrackArtistLinkType::Artist }).size(), 1); - EXPECT_TRUE(track->getArtists({ TrackArtistLinkType::ReleaseArtist }).empty()); + EXPECT_EQ(track->getArtists({ TrackArtistLinkType::ReleaseArtist }).size(), 0); EXPECT_EQ(track->getArtists({}).size(), 1); } @@ -120,7 +120,7 @@ TEST_F(DatabaseFixture, Artist_singleTrack) EXPECT_EQ(artists.front(), artist.getId()); ASSERT_EQ(track->getArtistIds({ TrackArtistLinkType::Artist }).size(), 1); - EXPECT_TRUE(track->getArtistIds({ TrackArtistLinkType::ReleaseArtist }).empty()); + EXPECT_EQ(track->getArtistIds({ TrackArtistLinkType::ReleaseArtist }).size(), 0); EXPECT_EQ(track->getArtistIds({}).size(), 1); } @@ -195,7 +195,7 @@ TEST_F(DatabaseFixture, Artist_singleTracktMultiRoles) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Artist::findOrphanIds(session, Range{}).results.empty()); + EXPECT_EQ(Artist::findOrphanIds(session, Range{}).results.size(), 0); } { @@ -260,7 +260,7 @@ TEST_F(DatabaseFixture, Artist_singleTrackMultiArtists) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); } { @@ -273,7 +273,7 @@ TEST_F(DatabaseFixture, Artist_singleTrackMultiArtists) EXPECT_EQ(track->getArtists({}).size(), 2); EXPECT_EQ(track->getArtists({ TrackArtistLinkType::Artist }).size(), 2); - EXPECT_TRUE(track->getArtists({ TrackArtistLinkType::ReleaseArtist }).empty()); + EXPECT_EQ(track->getArtists({ TrackArtistLinkType::ReleaseArtist }).size(), 0); EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}).results.size(), 2); EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setSortMethod(ArtistSortMethod::Random)).results.size(), 2); } @@ -317,7 +317,7 @@ TEST_F(DatabaseFixture, Artist_findByName) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Artist::findIds(session, Artist::FindParameters{}.setKeywords({ "N" })).results.empty()); + EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setKeywords({ "N" })).results.size(), 0); const auto artistsByAAA{ Artist::findIds(session, Artist::FindParameters {}.setKeywords({"A"})) }; ASSERT_EQ(artistsByAAA.results.size(), 1); @@ -327,7 +327,7 @@ TEST_F(DatabaseFixture, Artist_findByName) ASSERT_EQ(artistsByZZZ.results.size(), 1); EXPECT_EQ(artistsByZZZ.results.front(), artist.getId()); - EXPECT_TRUE(Artist::find(session, "NNN").empty()); + EXPECT_EQ(Artist::find(session, "NNN").size(), 0); EXPECT_EQ(Artist::find(session, "AAA").size(), 1); } } @@ -348,19 +348,19 @@ TEST_F(DatabaseFixture, Artist_findByNameEscaped) const auto artists{ Artist::find(session, R"(MyArtist%)") }; ASSERT_TRUE(artists.size() == 1); EXPECT_EQ(artists.front()->getId(), artist1.getId()); - EXPECT_TRUE(Artist::find(session, R"(MyArtistFoo)").empty()); + EXPECT_EQ(Artist::find(session, R"(MyArtistFoo)").size(), 0); } { const auto artists{ Artist::find(session, R"(%MyArtist)") }; ASSERT_TRUE(artists.size() == 1); EXPECT_EQ(artists.front()->getId(), artist2.getId()); - EXPECT_TRUE(Artist::find(session, R"(FooMyArtist)").empty()); + EXPECT_EQ(Artist::find(session, R"(FooMyArtist)").size(), 0); } { const auto artists{ Artist::find(session, R"(%_MyArtist)") }; ASSERT_TRUE(artists.size() == 1); ASSERT_EQ(artists.front()->getId(), artist3.getId()); - EXPECT_TRUE(Artist::find(session, R"(%CMyArtist)").empty()); + EXPECT_EQ(Artist::find(session, R"(%CMyArtist)").size(), 0); } } diff --git a/src/libs/database/test/Cluster.cpp b/src/libs/database/test/Cluster.cpp index dd940b24..1325fa92 100644 --- a/src/libs/database/test/Cluster.cpp +++ b/src/libs/database/test/Cluster.cpp @@ -69,7 +69,7 @@ TEST_F(DatabaseFixture, Cluster) EXPECT_EQ(clusterTypes.results.front(), clusterType.getId()); clusterTypes = ClusterType::findOrphanIds(session); - EXPECT_TRUE(clusterTypes.results.empty()); + EXPECT_EQ(clusterTypes.results.size(), 0); } } @@ -80,7 +80,7 @@ TEST_F(DatabaseFixture, Cluster) ASSERT_EQ(clusterTypes.results.size(), 1); EXPECT_EQ(clusterTypes.results.front(), clusterType.getId()); - ASSERT_TRUE(ClusterType::findUsed(session).results.empty()); + ASSERT_EQ(ClusterType::findUsed(session).results.size(), 0); } } @@ -91,7 +91,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrack) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); auto clusterTypes{ ClusterType::findOrphanIds(session) }; ASSERT_EQ(clusterTypes.results.size(), 1); EXPECT_EQ(clusterTypes.results.front(), clusterType.getId()); @@ -104,8 +104,8 @@ TEST_F(DatabaseFixture, Cluster_singleTrack) auto transaction{ session.createReadTransaction() }; auto clusters{ Cluster::findOrphanIds(session) }; EXPECT_EQ(clusters.results.size(), 2); - EXPECT_TRUE(track->getClusters().empty()); - EXPECT_TRUE(track->getClusterIds().empty()); + EXPECT_EQ(track->getClusters().size(), 0); + EXPECT_EQ(track->getClusterIds().size(), 0); EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 0); EXPECT_EQ(Cluster::computeTrackCount(session, cluster2.getId()), 0); } @@ -131,7 +131,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrack) ASSERT_EQ(clusters.results.size(), 1); EXPECT_EQ(clusters.results.front(), cluster2.getId()); - EXPECT_TRUE(ClusterType::findOrphanIds(session).results.empty()); + EXPECT_EQ(ClusterType::findOrphanIds(session).results.size(), 0); } { @@ -142,7 +142,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrack) EXPECT_EQ(tracks.results.front(), track.getId()); tracks = Track::findIds(session, Track::FindParameters{}.setClusters({ cluster2.getId() })); - EXPECT_TRUE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 0); } { @@ -172,7 +172,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrackWithSeveralClusters) auto transaction{ session.createReadTransaction() }; const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) }; - EXPECT_TRUE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 0); } { @@ -185,7 +185,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrackWithSeveralClusters) auto transaction{ session.createReadTransaction() }; const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) }; - EXPECT_TRUE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 0); EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1); EXPECT_EQ(Cluster::computeTrackCount(session, cluster2.getId()), 0); } @@ -200,7 +200,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrackWithSeveralClusters) auto transaction{ session.createReadTransaction() }; const auto tracks{ Track::findIds(session, Track::FindParameters{}.setClusters(clusterIds)) }; - ASSERT_FALSE(tracks.results.empty()); + ASSERT_EQ(tracks.results.size(), 1); EXPECT_EQ(tracks.results.front(), track.getId()); EXPECT_EQ(Cluster::computeTrackCount(session, cluster1.getId()), 1); EXPECT_EQ(Cluster::computeTrackCount(session, cluster2.getId()), 1); @@ -225,7 +225,7 @@ TEST_F(DatabaseFixture, Cluster_multiTracks) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); EXPECT_EQ(Cluster::computeTrackCount(session, cluster.getId()), tracks.size()); @@ -242,8 +242,8 @@ TEST_F(DatabaseFixture, ClusterType_singleTrack) { { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::find(session, Cluster::FindParameters{}).results.empty()); - EXPECT_TRUE(Cluster::find(session, Cluster::FindParameters{}.setClusterTypeName("Foo")).results.empty()); + EXPECT_EQ(Cluster::find(session, Cluster::FindParameters{}).results.size(), 0); + EXPECT_EQ(Cluster::find(session, Cluster::FindParameters{}.setClusterTypeName("Foo")).results.size(), 0); } ScopedClusterType clusterType{ session, "MyClusterType" }; @@ -275,7 +275,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrackSingleReleaseSingleCluster) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); } ScopedClusterType clusterType{ session, "MyClusterType" }; @@ -285,7 +285,7 @@ TEST_F(DatabaseFixture, Cluster_singleTrackSingleReleaseSingleCluster) { auto transaction{ session.createReadTransaction() }; ASSERT_EQ(Cluster::findOrphanIds(session).results.size(), 2); - EXPECT_TRUE(Release::find(session, Release::FindParameters{}.setClusters({ unusedCluster.getId() })).results.empty()); + EXPECT_EQ(Release::find(session, Release::FindParameters{}.setClusters({ unusedCluster.getId() })).results.size(), 0); EXPECT_EQ(Release::find(session, Release::FindParameters{}).results.size(), 1); EXPECT_EQ(Cluster::computeReleaseCount(session, cluster.getId()), 0); EXPECT_EQ(Cluster::computeReleaseCount(session, unusedCluster.getId()), 0); @@ -360,10 +360,10 @@ TEST_F(DatabaseFixture, SingleTrackSingleArtistMultiClusters) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(ClusterType::findOrphanIds(session).results.empty()); + EXPECT_EQ(ClusterType::findOrphanIds(session).results.size(), 0); EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 2); - EXPECT_TRUE(Release::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); + EXPECT_EQ(Release::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); } { @@ -379,8 +379,8 @@ TEST_F(DatabaseFixture, SingleTrackSingleArtistMultiClusters) ASSERT_EQ(artists.results.size(), 1); EXPECT_EQ(artists.results.front(), artist.getId()); - EXPECT_TRUE(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster2.getId() })).results.empty()); - EXPECT_TRUE(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster3.getId() })).results.empty()); + EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster2.getId() })).results.size(), 0); + EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster3.getId() })).results.size(), 0); cluster2.get().modify()->addTrack(track.get()); } @@ -400,7 +400,7 @@ TEST_F(DatabaseFixture, SingleTrackSingleArtistMultiClusters) ASSERT_EQ(artists.results.size(), 1); EXPECT_EQ(artists.results.front(), artist.getId()); - EXPECT_TRUE(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster3.getId() })).results.empty()); + EXPECT_EQ(Artist::findIds(session, Artist::FindParameters{}.setClusters({ cluster3.getId() })).results.size(), 0); } } @@ -421,9 +421,9 @@ TEST_F(DatabaseFixture, SingleTrackSingleArtistMultiRolesMultiClusters) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Release::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Release::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); } { @@ -461,8 +461,8 @@ TEST_F(DatabaseFixture, MultiTracksSingleArtistMultiClusters) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); } { @@ -572,10 +572,10 @@ TEST_F(DatabaseFixture, SingleTrackSingleReleaseSingleArtistSingleCluster) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Cluster::findOrphanIds(session).results.empty()); - EXPECT_TRUE(ClusterType::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Artist::findOrphanIds(session).results.empty()); - EXPECT_TRUE(Release::findOrphanIds(session).results.empty()); + EXPECT_EQ(Cluster::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(ClusterType::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Artist::findOrphanIds(session).results.size(), 0); + EXPECT_EQ(Release::findOrphanIds(session).results.size(), 0); } { @@ -706,7 +706,7 @@ TEST_F(DatabaseFixture, SingleTrackListMultipleTrackMultiClusters) EXPECT_TRUE(std::any_of(std::next(std::cbegin(tracks), 10), std::next(std::cbegin(tracks), 15), [similarTrack](const ScopedTrack& track) { return track.getId() == similarTrack->getId(); })); } - EXPECT_TRUE(trackList->getSimilarTracks(10, 10).empty()); + EXPECT_EQ(trackList->getSimilarTracks(10, 10).size(), 0); } } @@ -721,9 +721,9 @@ TEST_F(DatabaseFixture, MultipleTracksMultipleArtistsMultiClusters) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(artist1->findSimilarArtistIds().results.empty()); - EXPECT_TRUE(artist2->findSimilarArtistIds().results.empty()); - EXPECT_TRUE(artist3->findSimilarArtistIds().results.empty()); + EXPECT_EQ(artist1->findSimilarArtistIds().results.size(), 0); + EXPECT_EQ(artist2->findSimilarArtistIds().results.size(), 0); + EXPECT_EQ(artist3->findSimilarArtistIds().results.size(), 0); } std::list tracks; @@ -768,7 +768,7 @@ TEST_F(DatabaseFixture, MultipleTracksMultipleArtistsMultiClusters) { auto artists{ artist1->findSimilarArtistIds({TrackArtistLinkType::ReleaseArtist}) }; - EXPECT_EQ(artists.results.empty(), 1); + EXPECT_EQ(artists.results.size(), 1); } { @@ -779,7 +779,7 @@ TEST_F(DatabaseFixture, MultipleTracksMultipleArtistsMultiClusters) { auto artists{ artist1->findSimilarArtistIds({TrackArtistLinkType::Composer}) }; - EXPECT_TRUE(artists.results.empty()); + EXPECT_EQ(artists.results.size(), 0); } { @@ -802,9 +802,9 @@ TEST_F(DatabaseFixture, MultipleTracksMultipleReleasesMultiClusters) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(release1->getSimilarReleases().empty()); - EXPECT_TRUE(release2->getSimilarReleases().empty()); - EXPECT_TRUE(release3->getSimilarReleases().empty()); + EXPECT_EQ(release1->getSimilarReleases().size(), 0); + EXPECT_EQ(release2->getSimilarReleases().size(), 0); + EXPECT_EQ(release3->getSimilarReleases().size(), 0); } std::list tracks; diff --git a/src/libs/database/test/Release.cpp b/src/libs/database/test/Release.cpp index 5fd781e8..0096545b 100644 --- a/src/libs/database/test/Release.cpp +++ b/src/libs/database/test/Release.cpp @@ -89,7 +89,7 @@ TEST_F(DatabaseFixture, Release_singleTrack) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Release::findOrphanIds(session).results.empty()); + EXPECT_EQ(Release::findOrphanIds(session).results.size(), 0); const auto tracks{ Track::findIds(session, Track::FindParameters {}.setRelease(release.getId())) }; ASSERT_EQ(tracks.results.size(), 1); @@ -125,7 +125,7 @@ TEST_F(DatabaseFixture, Release_singleTrack) auto transaction{ session.createWriteTransaction() }; const auto tracks{ Track::findIds(session, Track::FindParameters {}.setRelease(release.getId())) }; - EXPECT_TRUE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 0); auto releases{ Release::findOrphanIds(session) }; ASSERT_EQ(releases.results.size(), 1); @@ -357,8 +357,8 @@ TEST_F(DatabaseFixture, MultiTracksSingleReleaseFirstTrack) { auto transaction{ session.createReadTransaction() }; - EXPECT_TRUE(Track::findIds(session, Track::FindParameters{}.setRelease(release1.getId())).results.empty()); - EXPECT_TRUE(Track::findIds(session, Track::FindParameters{}.setRelease(release2.getId())).results.empty()); + EXPECT_EQ(Track::findIds(session, Track::FindParameters{}.setRelease(release1.getId())).results.size(), 0); + EXPECT_EQ(Track::findIds(session, Track::FindParameters{}.setRelease(release2.getId())).results.size(), 0); } { @@ -383,13 +383,13 @@ TEST_F(DatabaseFixture, MultiTracksSingleReleaseFirstTrack) { const auto tracks{ Track::findIds(session, Track::FindParameters {}.setRelease(release1.getId()).setSortMethod(TrackSortMethod::Release)) }; - ASSERT_FALSE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 2); EXPECT_EQ(tracks.results.front(), track1A.getId()); } { const auto tracks{ Track::findIds(session, Track::FindParameters {}.setRelease(release2.getId()).setSortMethod(TrackSortMethod::Release)) }; - ASSERT_FALSE(tracks.results.empty()); + EXPECT_EQ(tracks.results.size(), 2); EXPECT_EQ(tracks.results.front(), track2B.getId()); } } @@ -422,7 +422,6 @@ TEST_F(DatabaseFixture, MultiTracksSingleReleaseDate) track2A.get().modify()->setRelease(release2.get()); track2B.get().modify()->setRelease(release2.get()); - track1A.get().modify()->setDate(release1Date); track1B.get().modify()->setDate(release1Date); track1A.get().modify()->setOriginalDate(release1OriginalDate); diff --git a/src/libs/services/recommendation/impl/PlaylistGeneratorService.cpp b/src/libs/services/recommendation/impl/PlaylistGeneratorService.cpp index 419d68d8..88a0f3bd 100644 --- a/src/libs/services/recommendation/impl/PlaylistGeneratorService.cpp +++ b/src/libs/services/recommendation/impl/PlaylistGeneratorService.cpp @@ -105,7 +105,6 @@ namespace Recommendation Track::FindParameters params; params.setTrackList(tracklistId); params.setSortMethod(TrackSortMethod::TrackList); - params.setDistinct(false); for (const TrackId trackId : Track::findIds(dbSession, params).results) tracks.push_back(trackId); diff --git a/src/lms/ui/PlayQueue.cpp b/src/lms/ui/PlayQueue.cpp index 803e2501..63eaf5ff 100644 --- a/src/lms/ui/PlayQueue.cpp +++ b/src/lms/ui/PlayQueue.cpp @@ -795,7 +795,6 @@ namespace UserInterface Track::FindParameters params; params.setTrackList(_queueId); - params.setDistinct(false); params.setSortMethod(TrackSortMethod::TrackList); Track::find(session, params, [&](const Track::pointer& track) diff --git a/src/lms/ui/explore/PlayQueueController.cpp b/src/lms/ui/explore/PlayQueueController.cpp index c29f7269..bf800d19 100644 --- a/src/lms/ui/explore/PlayQueueController.cpp +++ b/src/lms/ui/explore/PlayQueueController.cpp @@ -100,7 +100,6 @@ namespace UserInterface params.setClusters(clusters); params.setRange(Database::Range{ 0, maxTrackCount }); params.setSortMethod(TrackSortMethod::TrackList); - params.setDistinct(false); return Database::Track::findIds(session, params).results; } diff --git a/src/lms/ui/explore/TrackListView.cpp b/src/lms/ui/explore/TrackListView.cpp index e03ad8c1..8f783be0 100644 --- a/src/lms/ui/explore/TrackListView.cpp +++ b/src/lms/ui/explore/TrackListView.cpp @@ -187,7 +187,6 @@ namespace UserInterface params.setTrackList(_trackListId); params.setSortMethod(Database::TrackSortMethod::TrackList); params.setRange(Database::Range{ static_cast(_container->getCount()), _batchSize }); - params.setDistinct(false); Database::Track::find(LmsApp->getDbSession(), params, [this](const Track::pointer& track) {