Tried to factorize some db code

This commit is contained in:
emeric
2022-06-10 21:43:28 +02:00
parent a5c5185640
commit 27dfaf999a
15 changed files with 167 additions and 208 deletions
+34 -1
View File
@@ -43,7 +43,7 @@ createQuery(Session& session, const Track::FindParameters& params)
{
session.checkSharedLocked();
auto query {session.getDboSession().query<TrackId>("SELECT t.id from track t")};
auto query {session.getDboSession().query<TrackId>("SELECT DISTINCT t.id from track t")};
for (std::string_view keyword : params.keywords)
query.where("t.name LIKE ? ESCAPE '" ESCAPE_CHAR_STR "'").bind("%" + escapeLikeKeyword(keyword) + "%");
@@ -79,6 +79,33 @@ createQuery(Session& session, const Track::FindParameters& params)
query.where(oss.str());
}
if (params.artist.isValid())
{
query.join("artist a ON a.id = t_a_l.artist_id")
.join("track_artist_link t_a_l ON t_a_l.track_id = t.id")
.where("a.id = ?").bind(params.artist);
if (!params.trackArtistLinkTypes.empty())
{
std::ostringstream oss;
bool first {true};
for (TrackArtistLinkType linkType : params.trackArtistLinkTypes)
{
if (!first)
oss << " OR ";
oss << "t_a_l.type = ?";
query.bind(linkType);
first = false;
}
query.where(oss.str());
}
}
if (params.nonRelease)
query.where("t.release_id IS NULL");
switch (params.sortMethod)
{
case TrackSortMethod::None:
@@ -93,6 +120,12 @@ createQuery(Session& session, const Track::FindParameters& params)
assert(params.starringUser.isValid());
query.orderBy("s_t.date_time DESC");
break;
case TrackSortMethod::Name:
query.orderBy("t.name COLLATE NOCASE");
break;
case TrackSortMethod::DateDescAndRelease:
query.orderBy("t.date DESC,t.release_id,t.disc_number,t.track_number");
break;
}
return query;