Merge pull request #23220 from nextcloud/backport/23215/stable20

[stable20] Only run the query to get the account data once
This commit is contained in:
Roeland Jago Douma 2020-10-06 14:46:06 +02:00 committed by GitHub
commit ca32ee1a65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 5 deletions

View File

@ -134,19 +134,21 @@ class AccountManager implements IAccountManager {
public function getUser(IUser $user) { public function getUser(IUser $user) {
$uid = $user->getUID(); $uid = $user->getUID();
$query = $this->connection->getQueryBuilder(); $query = $this->connection->getQueryBuilder();
$query->select('data')->from($this->table) $query->select('data')
->from($this->table)
->where($query->expr()->eq('uid', $query->createParameter('uid'))) ->where($query->expr()->eq('uid', $query->createParameter('uid')))
->setParameter('uid', $uid); ->setParameter('uid', $uid);
$query->execute(); $result = $query->execute();
$result = $query->execute()->fetchAll(); $accountData = $result->fetchAll();
$result->closeCursor();
if (empty($result)) { if (empty($accountData)) {
$userData = $this->buildDefaultUserRecord($user); $userData = $this->buildDefaultUserRecord($user);
$this->insertNewUser($user, $userData); $this->insertNewUser($user, $userData);
return $userData; return $userData;
} }
$userDataArray = json_decode($result[0]['data'], true); $userDataArray = json_decode($accountData[0]['data'], true);
$jsonError = json_last_error(); $jsonError = json_last_error();
if ($userDataArray === null || $userDataArray === [] || $jsonError !== JSON_ERROR_NONE) { if ($userDataArray === null || $userDataArray === [] || $jsonError !== JSON_ERROR_NONE) {
$this->logger->critical("User data of $uid contained invalid JSON (error $jsonError), hence falling back to a default user record"); $this->logger->critical("User data of $uid contained invalid JSON (error $jsonError), hence falling back to a default user record");