[Database] Remove orphaned objects. Added helpers to access releases and artists

This commit is contained in:
emeric
2015-08-03 12:56:23 +02:00
parent c1a4451fbd
commit 672aee9347
7 changed files with 64 additions and 24 deletions
+12
View File
@@ -84,6 +84,18 @@ Artist::getByFilter(Wt::Dbo::Session& session, SearchFilter filter, int offset,
return std::vector<pointer>(res.begin(), res.end());
}
std::vector<Wt::Dbo::ptr<Release> >
Artist::getReleases()
{
assert(self());
assert(self()->id() != Wt::Dbo::dbo_traits<Artist>::invalidId() );
assert(session());
Wt::Dbo::collection< Wt::Dbo::ptr<Release> > res = session()->query<Wt::Dbo::ptr<Release> >("SELECT r FROM release r INNER JOIN artist a ON t.artist_id = a.id INNER JOIN track t ON t.release_id = r.id").where("a.id = ?").bind(id());
return std::vector< Wt::Dbo::ptr<Release> > (res.begin(), res.end());
}
Wt::Dbo::Query<Artist::pointer>
Artist::getQuery(Wt::Dbo::Session& session, SearchFilter filter)
{
+5 -1
View File
@@ -33,8 +33,9 @@ namespace Database
class Track;
class Genre;
class Release;
class Artist
class Artist : public Wt::Dbo::Dbo<Artist>
{
public:
@@ -58,6 +59,9 @@ class Artist
std::string getName(void) const { return _name; }
std::string getMBID(void) const { return _MBID; }
// Get the releases that have at least one track for this artist
std::vector<Wt::Dbo::ptr<Release> > getReleases();
void setMBID(std::string mbid) { _MBID = mbid; }
// Create
+13 -1
View File
@@ -71,7 +71,7 @@ Release::getAll(Wt::Dbo::Session& session, int offset, int size)
std::vector<Release::pointer>
Release::getAllOrphans(Wt::Dbo::Session& session)
{
Wt::Dbo::collection<Release::pointer> res = session.query< Wt::Dbo::ptr<Release> >("select a from artist a LEFT OUTER JOIN Track t ON a.id = t.artist_id WHERE t.id IS NULL");
Wt::Dbo::collection<Release::pointer> res = session.query< Wt::Dbo::ptr<Release> >("select r from release r LEFT OUTER JOIN Track t ON r.id = t.release_id WHERE t.id IS NULL");
return std::vector<pointer>(res.begin(), res.end());
}
@@ -129,4 +129,16 @@ Release::getByFilter(Wt::Dbo::Session& session, SearchFilter filter, int offset,
return std::vector<pointer>(res.begin(), res.end());
}
std::vector< Wt::Dbo::ptr<Artist> >
Release::getArtists()
{
assert(self());
assert(self()->id() != Wt::Dbo::dbo_traits<Release>::invalidId() );
assert(session());
Wt::Dbo::collection< Wt::Dbo::ptr<Artist> > res = session()->query<Wt::Dbo::ptr<Artist> >("SELECT a FROM artist a INNER JOIN release r ON r.id = t.release_id INNER JOIN track t ON t.release_id = r.id").where("r.id = ?").bind(id());
return std::vector< Wt::Dbo::ptr<Artist> > (res.begin(), res.end());
}
} // namespace Database
+4 -1
View File
@@ -29,8 +29,9 @@ namespace Database
{
class Track;
class Release;
class Release
class Release : public Wt::Dbo::Dbo<Release>
{
public:
@@ -64,6 +65,8 @@ class Release
std::string getMBID() const { return _MBID; }
bool isNone(void) const;
boost::posix_time::time_duration getDuration(void) const;
std::vector<Wt::Dbo::ptr<Artist> > getArtists(); // Get the artists of this release
std::vector<Wt::Dbo::ptr<Track> > getTracks(); // Get the tracks of this release
void setMBID(std::string mbid) { _MBID = mbid; }
+3 -4
View File
@@ -152,11 +152,10 @@ Genre::Genre(const std::string& name)
{
}
std::vector<Genre::pointer>
Genre::getAll(Wt::Dbo::Session& session, int offset, int size)
Wt::Dbo::collection<Genre::pointer>
Genre::getAll(Wt::Dbo::Session& session)
{
Wt::Dbo::collection<pointer> res = session.find<Genre>().offset(offset).limit(size);
return std::vector<Genre::pointer>(res.begin(), res.end());
return session.find<Genre>();
}
Genre::pointer
+1 -1
View File
@@ -52,7 +52,7 @@ class Genre
static pointer getByName(Wt::Dbo::Session& session, const std::string& name);
static pointer getNone(Wt::Dbo::Session& session);
static std::vector<pointer> getByFilter(Wt::Dbo::Session& session, SearchFilter filter, int offset = -1, int size = -1);
static std::vector<pointer> getAll(Wt::Dbo::Session& session, int offset = -1, int size = -1);
static Wt::Dbo::collection<pointer> getAll(Wt::Dbo::Session& session);
// MVC models for the user interface
// Genre ID, name, track count