1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 08:52:39 +01:00

performance optimazion for edge queries with getDestinationPHIDs

Summary: Ref T6656 performance optimazion for edge queries with getDestinationPHIDs

Test Plan: accessed reports and several pages containing tasks with edges (projects...)

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: Korvin, epriestley

Maniphest Tasks: T6656

Differential Revision: https://secure.phabricator.com/D10916
This commit is contained in:
Fabian Stelzer 2014-12-02 05:51:46 -08:00 committed by epriestley
parent a8be733e5f
commit d923f68aad

View file

@ -260,20 +260,21 @@ final class PhabricatorEdgeQuery extends PhabricatorQuery {
'You must execute() a query before you you can getDestinationPHIDs().');
}
$src_phids = array_fill_keys($src_phids, true);
$types = array_fill_keys($types, true);
$result_phids = array();
foreach ($this->resultSet as $src => $edges_by_type) {
if ($src_phids && empty($src_phids[$src])) {
continue;
$set = $this->resultSet;
if ($src_phids) {
$set = array_select_keys($set, $src_phids);
}
foreach ($set as $src => $edges_by_type) {
if ($types) {
$edges_by_type = array_select_keys($edges_by_type, $types);
}
foreach ($edges_by_type as $type => $edges_by_dst) {
if ($types && empty($types[$type])) {
continue;
}
foreach ($edges_by_dst as $dst => $edge) {
$result_phids[$dst] = true;
foreach ($edges_by_type as $edges) {
foreach ($edges as $edge_phid => $edge) {
$result_phids[$edge_phid] = true;
}
}
}