search3: minor optim
This commit is contained in:
@@ -867,14 +867,11 @@ namespace lms::db
|
||||
for (const std::string& bindArg : where.getBindArgs())
|
||||
query.bind(bindArg);
|
||||
|
||||
auto queryRes{ query.resultList() };
|
||||
|
||||
std::map<ClusterTypeId, std::vector<Cluster::pointer>> clustersByType;
|
||||
for (const Wt::Dbo::ptr<Cluster>& cluster : queryRes)
|
||||
{
|
||||
utils::forEachQueryResult(query, [&](const Wt::Dbo::ptr<Cluster>& cluster) {
|
||||
if (clustersByType[cluster->getType()->getId()].size() < size)
|
||||
clustersByType[cluster->getType()->getId()].push_back(cluster);
|
||||
}
|
||||
});
|
||||
|
||||
std::vector<std::vector<Cluster::pointer>> res;
|
||||
for (const auto& [clusterTypeId, clusters] : clustersByType)
|
||||
@@ -882,4 +879,23 @@ namespace lms::db
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
std::vector<ObjectPtr<Cluster>> Release::getClusters(ClusterTypeId clusterTypeId, std::size_t maxCount) const
|
||||
{
|
||||
assert(session());
|
||||
|
||||
auto query{ session()->query<Wt::Dbo::ptr<Cluster>>("SELECT c FROM cluster c INNER JOIN track_cluster t_c ON t_c.cluster_id = c.id INNER JOIN track t ON t.id = t_c.track_id")
|
||||
.where("t.release_id = ?").bind(getId())
|
||||
.where("c.cluster_type_id = ?").bind(clusterTypeId.toString())
|
||||
.groupBy("c.id")
|
||||
.orderBy("COUNT(c.id) DESC")
|
||||
.limit(static_cast<int>(maxCount)) };
|
||||
|
||||
std::vector<ObjectPtr<Cluster>> res;
|
||||
utils::forEachQueryResult(query, [&](const Wt::Dbo::ptr<Cluster>& cluster) {
|
||||
res.push_back(cluster);
|
||||
});
|
||||
|
||||
return res;
|
||||
}
|
||||
} // namespace lms::db
|
||||
|
||||
@@ -258,6 +258,7 @@ namespace lms::db
|
||||
// Each clusters are grouped by cluster type, sorted by the number of occurence (max to min)
|
||||
// size is the max number of cluster per cluster type
|
||||
std::vector<std::vector<ObjectPtr<Cluster>>> getClusterGroups(const std::vector<ClusterTypeId>& clusterTypeIds, std::size_t size) const;
|
||||
std::vector<ObjectPtr<Cluster>> getClusters(ClusterTypeId clusterTypeId, std::size_t maxCount) const;
|
||||
|
||||
// Utility functions (if all tracks have the same values, which is legit to not be the case)
|
||||
core::PartialDateTime getDate() const;
|
||||
|
||||
Reference in New Issue
Block a user