Speed up searches when one cluster filter is active
This commit is contained in:
@@ -99,7 +99,8 @@ createQuery(Session& session, const Artist::FindParameters& params)
|
||||
|| params.writtenAfter.isValid()
|
||||
|| params.linkType
|
||||
|| params.track.isValid()
|
||||
|| params.release.isValid())
|
||||
|| params.release.isValid()
|
||||
|| params.clusters.size() == 1)
|
||||
{
|
||||
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");
|
||||
@@ -140,7 +141,12 @@ createQuery(Session& session, const Artist::FindParameters& params)
|
||||
.where("s_a.sync_state <> ?").bind(SyncState::PendingRemove);
|
||||
}
|
||||
|
||||
if (!params.clusters.empty())
|
||||
if(params.clusters.size() == 1)
|
||||
{
|
||||
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
||||
.where("t_c.cluster_id = ?").bind(params.clusters.front());
|
||||
}
|
||||
else if (params.clusters.size() > 1)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
oss << "a.id IN (SELECT DISTINCT a.id FROM artist a"
|
||||
|
||||
@@ -45,7 +45,8 @@ namespace Database
|
||||
|| params.sortMethod == ReleaseSortMethod::OriginalDateDesc
|
||||
|| params.writtenAfter.isValid()
|
||||
|| params.dateRange
|
||||
|| params.artist.isValid())
|
||||
|| params.artist.isValid()
|
||||
|| params.clusters.size() == 1)
|
||||
{
|
||||
query.join("track t ON t.release_id = r.id");
|
||||
}
|
||||
@@ -120,7 +121,12 @@ namespace Database
|
||||
}
|
||||
}
|
||||
|
||||
if (!params.clusters.empty())
|
||||
if (params.clusters.size() == 1)
|
||||
{
|
||||
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
||||
.where("t_c.cluster_id = ?").bind(params.clusters.front());
|
||||
}
|
||||
else if (params.clusters.size() > 1)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
oss << "r.id IN (SELECT DISTINCT r.id FROM release r"
|
||||
|
||||
@@ -64,7 +64,13 @@ namespace Database
|
||||
.where("s_t.sync_state <> ?").bind(SyncState::PendingRemove);
|
||||
}
|
||||
|
||||
if (!params.clusters.empty())
|
||||
if (params.clusters.size() == 1)
|
||||
{
|
||||
// optim
|
||||
query.join("track_cluster t_c ON t_c.track_id = t.id")
|
||||
.where("t_c.cluster_id = ?").bind(params.clusters.front());
|
||||
}
|
||||
else if (params.clusters.size() > 1)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
|
||||
|
||||
@@ -79,7 +79,6 @@ namespace UserInterface
|
||||
|
||||
case Mode::Search:
|
||||
{
|
||||
// do not sort results as we search in both name and sort names, sorting may be very long
|
||||
Artist::FindParameters params;
|
||||
params.setClusters(getFilters().getClusterIds());
|
||||
params.setKeywords(getSearchKeywords());
|
||||
|
||||
@@ -83,7 +83,6 @@ namespace UserInterface
|
||||
Release::FindParameters params;
|
||||
params.setClusters(getFilters().getClusterIds());
|
||||
params.setKeywords(getSearchKeywords());
|
||||
params.setSortMethod(ReleaseSortMethod::Name);
|
||||
params.setRange(range);
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user