diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2020-05-22 14:19:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-22 14:19:28 +0200 |
commit | fd805a03883a21cc5642b57b1cda334d58a01191 (patch) | |
tree | 2c416c5d69bcda73ac715564c8d409227a229402 | |
parent | 3b519f776a10bd77c79b410f6f7cafc573854dad (diff) | |
parent | 5ebb53593c88966454879ce4aedbe4c337efaf40 (diff) | |
download | nextcloud-server-fd805a03883a21cc5642b57b1cda334d58a01191.tar.gz nextcloud-server-fd805a03883a21cc5642b57b1cda334d58a01191.zip |
Merge pull request #20776 from nextcloud/enh/limit_group_queries
Improve group queries
-rw-r--r-- | lib/private/Group/Database.php | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/lib/private/Group/Database.php b/lib/private/Group/Database.php index 1202ba09b13..ec8f7ea6f53 100644 --- a/lib/private/Group/Database.php +++ b/lib/private/Group/Database.php @@ -118,7 +118,10 @@ class Database extends ABackend implements } // Add to cache - $this->groupCache[$gid] = $gid; + $this->groupCache[$gid] = [ + 'gid' => $gid, + 'displayname' => $gid + ]; return $result === 1; } @@ -244,15 +247,19 @@ class Database extends ABackend implements // No magic! $qb = $this->dbConn->getQueryBuilder(); - $cursor = $qb->select('gid') - ->from('group_user') + $cursor = $qb->select('gu.gid', 'g.displayname') + ->from('group_user', 'gu') + ->leftJoin('gu', 'groups', 'g', $qb->expr()->eq('gu.gid', 'g.gid')) ->where($qb->expr()->eq('uid', $qb->createNamedParameter($uid))) ->execute(); $groups = []; while ($row = $cursor->fetch()) { $groups[] = $row['gid']; - $this->groupCache[$row['gid']] = $row['gid']; + $this->groupCache[$row['gid']] = [ + 'gid' => $row['gid'], + 'displayname' => $row['displayname'], + ]; } $cursor->closeCursor(); @@ -309,7 +316,7 @@ class Database extends ABackend implements } $qb = $this->dbConn->getQueryBuilder(); - $cursor = $qb->select('gid') + $cursor = $qb->select('gid', 'displayname') ->from('groups') ->where($qb->expr()->eq('gid', $qb->createNamedParameter($gid))) ->execute(); @@ -317,7 +324,10 @@ class Database extends ABackend implements $cursor->closeCursor(); if ($result !== false) { - $this->groupCache[$gid] = $gid; + $this->groupCache[$gid] = [ + 'gid' => $gid, + 'displayname' => $result['displayname'], + ]; return true; } return false; @@ -430,6 +440,10 @@ class Database extends ABackend implements } public function getDisplayName(string $gid): string { + if (isset($this->groupCache[$gid])) { + return $this->groupCache[$gid]['displayname']; + } + $this->fixDI(); $query = $this->dbConn->getQueryBuilder(); |