More query wrapped + fixed typo

This commit is contained in:
emeric
2024-04-02 23:04:54 +02:00
parent e2f68356fa
commit 50ecfb1378
8 changed files with 39 additions and 11 deletions
+2 -1
View File
@@ -26,6 +26,7 @@
#include "database/Session.hpp"
#include "database/Track.hpp"
#include "IdTypeTraits.hpp"
#include "StringViewTraits.hpp"
#include "SqlQuery.hpp"
#include "Utils.hpp"
@@ -202,7 +203,7 @@ namespace lms::db
{
session.checkReadTransaction();
return utils::fetchQuerySingleResult(session.getDboSession()->find<ClusterType>().where("name = ?").bind(std::string{ name }));
return utils::fetchQuerySingleResult(session.getDboSession()->find<ClusterType>().where("name = ?").bind(name));
}
ClusterType::pointer ClusterType::find(Session& session, ClusterTypeId id)
+6 -4
View File
@@ -530,15 +530,17 @@ namespace lms::db
return getArtists().size() > 1;
}
std::size_t Release::getTracksCount() const
std::size_t Release::getTrackCount() const
{
return _tracks.size();
assert(session());
return utils::fetchQuerySingleResult(session()->query<int>("SELECT COUNT(t.id) FROM track t INNER JOIN release r ON r.id = t.release_id")
.where("r.id = ?").bind(getId()));
}
std::vector<ObjectPtr<ReleaseType>> Release::getReleaseTypes() const
std::vector<ReleaseType::pointer> Release::getReleaseTypes() const
{
// TODO remove?
return std::vector<ObjectPtr<ReleaseType>>(_releaseTypes.begin(), _releaseTypes.end());
return utils::fetchQueryResults<ReleaseType::pointer>(_releaseTypes.find());
}
std::vector<std::string> Release::getReleaseTypeNames() const
+2 -2
View File
@@ -316,7 +316,7 @@ namespace lms::db
std::vector<Cluster::pointer> Track::getClusters() const
{
return std::vector<Cluster::pointer>(_clusters.begin(), _clusters.end());
return utils::fetchQueryResults<Cluster::pointer>(_clusters.find());
}
std::vector<ClusterId> Track::getClusterIds() const
@@ -490,7 +490,7 @@ namespace lms::db
std::vector<TrackArtistLink::pointer> Track::getArtistLinks() const
{
return std::vector<TrackArtistLink::pointer>(_trackArtistLinks.begin(), _trackArtistLinks.end());
return utils::fetchQueryResults<TrackArtistLink::pointer>(_trackArtistLinks.find());
}
std::vector<std::vector<Cluster::pointer>> Track::getClusterGroups(const std::vector<ClusterTypeId>& clusterTypeIds, std::size_t size) const
@@ -75,7 +75,7 @@ namespace lms::db
// Accessors
std::string_view getName() const { return _name; }
ObjectPtr<ClusterType> getType() const { return _clusterType; }
std::size_t getTracksCount() const { return _trackCount; }
std::size_t getTrackCount() const { return _trackCount; }
RangeResults<TrackId> getTracks(std::optional<Range> range = std::nullopt) const;
std::size_t getReleasesCount() const { return _releaseCount; };
@@ -154,7 +154,7 @@ namespace lms::db
std::chrono::milliseconds getDuration() const;
Wt::WDateTime getLastWritten() const;
std::string_view getArtistDisplayName() const { return _artistDisplayName; }
std::size_t getTracksCount() const;
std::size_t getTrackCount() const;
std::vector<ObjectPtr<ReleaseType>> getReleaseTypes() const;
std::vector<std::string> getReleaseTypeNames() const;
+25
View File
@@ -910,4 +910,29 @@ namespace lms::db::tests
}
checkExpectedBitrate(192); // 0 should not be taken into account
}
TEST_F(DatabaseFixture, Release_trackCount)
{
ScopedRelease release1{ session, "MyRelease1" };
ScopedRelease release2{ session, "MyRelease2" };
ScopedRelease release3{ session, "MyRelease2" };
ScopedTrack track1{ session, "MyTrack1" };
ScopedTrack track2{ session, "MyTrack2" };
ScopedTrack track3{ session, "MyTrack3" };
{
auto transaction{ session.createWriteTransaction() };
track1.get().modify()->setRelease(release1.get());
track2.get().modify()->setRelease(release1.get());
track3.get().modify()->setRelease(release2.get());
}
{
auto transaction{ session.createReadTransaction() };
EXPECT_EQ(release1->getTrackCount(), 2);
EXPECT_EQ(release2->getTrackCount(), 1);
EXPECT_EQ(release3->getTrackCount(), 0);
}
}
}