Browse Source

Chunk if you have too many events

tags/v11.0RC2
Joas Schilling 7 years ago
parent
commit
62f31d67bd
No account linked to committer's email address
1 changed files with 17 additions and 11 deletions
  1. 17
    11
      apps/dav/lib/CalDAV/CalDavBackend.php

+ 17
- 11
apps/dav/lib/CalDAV/CalDavBackend.php View File

@@ -616,19 +616,25 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
* @return array
*/
function getMultipleCalendarObjects($calendarId, array $uris) {
if (empty($uris)) {
return [];
}

$chunks = array_chunk($uris, 100);
$result = [];

$query = $this->db->getQueryBuilder();
$query->select(['id', 'uri', 'lastmodified', 'etag', 'calendarid', 'size', 'calendardata', 'componenttype', 'classification'])
->from('calendarobjects')
->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
->andWhere($query->expr()->in('uri', $query->createParameter('uri')))
->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);

$stmt = $query->execute();
->from('calendarobjects')
->where($query->expr()->eq('calendarid', $query->createNamedParameter($calendarId)))
->andWhere($query->expr()->in('uri', $query->createParameter('uri')));

$result = [];
while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
foreach ($chunks as $uris) {
$query->setParameter('uri', $uris, IQueryBuilder::PARAM_STR_ARRAY);
$stmt = $query->execute();

$result[] = [
while($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$result[] = [
'id' => $row['id'],
'uri' => $row['uri'],
'lastmodified' => $row['lastmodified'],
@@ -638,8 +644,8 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
'calendardata' => $this->readBlob($row['calendardata']),
'component' => strtolower($row['componenttype']),
'classification' => (int)$row['classification']
];
];
}
}
return $result;
}

Loading…
Cancel
Save