Don't try to load user profile images in PhabricatorPeopleQuery if no users have any

Summary:
Fixes T3810. In PhabricatorPeopleQuery, we issue an unnecessary query like this:

  SELECT f.* FROM file f WHERE (f.phid IN ('')) ORDER BY f.id DESC

...if we're loading a user without a profile picture. Filter the file PHIDs before loading them to prevent this.

This doesn't change anything, but saves us a spurious/silly query.

Also makes `PhabricatorPeopleProfileController` use `needProfileImage()`, moving us closer to getting rid of `loadProfileImageURI()` eventually.

Test Plan: Looked at profiles of users with and without profile pictures. Checked query log in DarkConsole.

Reviewers: chad, btrahan

Reviewed By: chad

CC: aran

Maniphest Tasks: T3810

Differential Revision: https://secure.phabricator.com/D6913
This commit is contained in:
epriestley
2013-09-08 09:43:27 -07:00
parent 194245ed62
commit d1225e782b
2 changed files with 12 additions and 5 deletions

View File

@@ -19,6 +19,7 @@ final class PhabricatorPeopleProfileController
$user = id(new PhabricatorPeopleQuery()) $user = id(new PhabricatorPeopleQuery())
->setViewer($viewer) ->setViewer($viewer)
->withUsernames(array($this->username)) ->withUsernames(array($this->username))
->needProfileImage(true)
->executeOne(); ->executeOne();
if (!$user) { if (!$user) {
return new Aphront404Response(); return new Aphront404Response();

View File

@@ -133,11 +133,17 @@ final class PhabricatorPeopleQuery
} }
if ($this->needProfileImage) { if ($this->needProfileImage) {
$user_profile_file_phids = mpull($users, 'getProfileImagePHID');
$user_profile_file_phids = array_filter($user_profile_file_phids);
if ($user_profile_file_phids) {
$files = id(new PhabricatorFileQuery()) $files = id(new PhabricatorFileQuery())
->setViewer($this->getViewer()) ->setViewer($this->getViewer())
->withPHIDs(mpull($users, 'getProfileImagePHID')) ->withPHIDs($user_profile_file_phids)
->execute(); ->execute();
$files = mpull($files, null, 'getPHID'); $files = mpull($files, null, 'getPHID');
} else {
$files = array();
}
foreach ($users as $user) { foreach ($users as $user) {
$image_phid = $user->getProfileImagePHID(); $image_phid = $user->getProfileImagePHID();
if (isset($files[$image_phid])) { if (isset($files[$image_phid])) {