Simplified queries

This commit is contained in:
emeric
2024-04-18 09:06:27 +02:00
parent a5b7e7e5f3
commit c63f9fa51c
+18 -11
View File
@@ -50,16 +50,29 @@ namespace lms::db
|| params.clusters.size() == 1 || params.clusters.size() == 1
|| params.mediaLibrary.isValid()) || params.mediaLibrary.isValid())
{ {
query.join("track t ON t.id = t_a_l.track_id");
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id"); query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
} }
if (params.linkType) if (params.sortMethod == ArtistSortMethod::LastWritten
query.where("t_a_l.type = ?").bind(*params.linkType); || params.writtenAfter.isValid()
|| params.release.isValid()
|| params.mediaLibrary.isValid())
{
query.join("track t ON t.id = t_a_l.track_id");
if (params.writtenAfter.isValid()) if (params.writtenAfter.isValid())
query.where("t.file_last_write > ?").bind(params.writtenAfter); query.where("t.file_last_write > ?").bind(params.writtenAfter);
if (params.release.isValid())
query.where("t.release_id = ?").bind(params.release);
if (params.mediaLibrary.isValid())
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
}
if (params.linkType)
query.where("+t_a_l.type = ?").bind(*params.linkType); // Exclude this since the query planner does not do a good job when db is not analyzed
if (!params.keywords.empty()) if (!params.keywords.empty())
{ {
std::vector<std::string> clauses; std::vector<std::string> clauses;
@@ -91,7 +104,7 @@ namespace lms::db
if (params.clusters.size() == 1) if (params.clusters.size() == 1)
{ {
query.join("track_cluster t_c ON t_c.track_id = t.id") query.join("track_cluster t_c ON t_c.track_id = t_a_l.track_id")
.where("t_c.cluster_id = ?").bind(params.clusters.front()); .where("t_c.cluster_id = ?").bind(params.clusters.front());
} }
else if (params.clusters.size() > 1) else if (params.clusters.size() > 1)
@@ -114,13 +127,7 @@ namespace lms::db
} }
if (params.track.isValid()) if (params.track.isValid())
query.where("t.id = ?").bind(params.track); query.where("t_a_l.track_id = ?").bind(params.track);
if (params.release.isValid())
query.where("t.release_id = ?").bind(params.release);
if (params.mediaLibrary.isValid())
query.where("t.media_library_id = ?").bind(params.mediaLibrary);
switch (params.sortMethod) switch (params.sortMethod)
{ {