diff options
author | Joas Schilling <coding@schilljs.com> | 2016-09-14 16:29:58 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2016-09-29 14:33:44 +0200 |
commit | 5b8c7768b1dca001f78c1fb7251c29e781677136 (patch) | |
tree | a1bf8f9e2049473717237c7f7e547dd7d37e83d7 /apps | |
parent | 33c39f7b270b0b5f398fd75a0290851cd1e9d4b8 (diff) | |
download | nextcloud-server-5b8c7768b1dca001f78c1fb7251c29e781677136.tar.gz nextcloud-server-5b8c7768b1dca001f78c1fb7251c29e781677136.zip |
Chunk if you have too many contacts
Diffstat (limited to 'apps')
-rw-r--r-- | apps/dav/lib/CardDAV/CardDavBackend.php | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/apps/dav/lib/CardDAV/CardDavBackend.php b/apps/dav/lib/CardDAV/CardDavBackend.php index f8552f1323e..ac0b5849f8a 100644 --- a/apps/dav/lib/CardDAV/CardDavBackend.php +++ b/apps/dav/lib/CardDAV/CardDavBackend.php @@ -439,23 +439,29 @@ class CardDavBackend implements BackendInterface, SyncSupport { * @return array */ function getMultipleCards($addressBookId, array $uris) { + if (empty($uris)) { + return []; + } + + $chunks = array_chunk($uris, 100); + $cards = []; + $query = $this->db->getQueryBuilder(); $query->select(['id', 'uri', 'lastmodified', 'etag', 'size', 'carddata']) ->from('cards') ->where($query->expr()->eq('addressbookid', $query->createNamedParameter($addressBookId))) - ->andWhere($query->expr()->in('uri', $query->createParameter('uri'))) - ->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY); + ->andWhere($query->expr()->in('uri', $query->createParameter('uri'))); - $cards = []; + foreach ($chunks as $uris) { + $query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY); + $result = $query->execute(); - $result = $query->execute(); - while($row = $result->fetch()) { - $row['etag'] = '"' . $row['etag'] . '"'; - $row['carddata'] = $this->readBlob($row['carddata']); - $cards[] = $row; + while($row = $result->fetch()) { + $row['etag'] = '"' . $row['etag'] . '"'; + $row['carddata'] = $this->readBlob($row['carddata']); + $cards[] = $row; + } } - $result->closeCursor(); - return $cards; } |