summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2016-09-14 16:29:58 +0200
committerJoas Schilling <coding@schilljs.com>2016-09-29 14:33:44 +0200
commit5b8c7768b1dca001f78c1fb7251c29e781677136 (patch)
treea1bf8f9e2049473717237c7f7e547dd7d37e83d7 /apps
parent33c39f7b270b0b5f398fd75a0290851cd1e9d4b8 (diff)
downloadnextcloud-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.php26
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;
}