More query wrapped + fixed typo
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -47,7 +47,7 @@ namespace lms::api::subsonic
|
||||
|
||||
if (id3) {
|
||||
albumNode.setAttribute("name", release->getName());
|
||||
albumNode.setAttribute("songCount", release->getTracksCount());
|
||||
albumNode.setAttribute("songCount", release->getTrackCount());
|
||||
albumNode.setAttribute(
|
||||
"duration", std::chrono::duration_cast<std::chrono::seconds>(
|
||||
release->getDuration())
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace lms::api::subsonic
|
||||
Response::Node clusterNode;
|
||||
|
||||
clusterNode.setValue(cluster->getName());
|
||||
clusterNode.setAttribute("songCount", cluster->getTracksCount());
|
||||
clusterNode.setAttribute("songCount", cluster->getTrackCount());
|
||||
clusterNode.setAttribute("albumCount", cluster->getReleasesCount());
|
||||
|
||||
return clusterNode;
|
||||
|
||||
Reference in New Issue
Block a user