Sebastian Krupinski 1 week ago
committed by GitHub
parent
commit
7ecd66089d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 37
      apps/dav/lib/CalDAV/CalDavBackend.php
  2. 5
      apps/dav/lib/Listener/AddMissingIndicesListener.php
  3. 1
      apps/dav/lib/Migration/Version1006Date20180628111625.php

37
apps/dav/lib/CalDAV/CalDavBackend.php

@ -1788,11 +1788,38 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
$query->andWhere($query->expr()->eq('componenttype', $query->createNamedParameter($componentType)));
}
if ($timeRange && $timeRange['start']) {
$query->andWhere($query->expr()->gt('lastoccurence', $query->createNamedParameter($timeRange['start']->getTimeStamp())));
}
if ($timeRange && $timeRange['end']) {
$query->andWhere($query->expr()->lt('firstoccurence', $query->createNamedParameter($timeRange['end']->getTimeStamp())));
// time range
if ($timeRange) {
// case 1: event starts and ends within range
// case 2: event starts before range and ends within range
// case 3: event starts within range and ends after range
// case 4: event starts before range and ends after range
$rangerStart = $timeRange['start']->getTimeStamp();
$rangerEnd = $timeRange['end']->getTimeStamp();
$query->andWhere($query->expr()->orX(
// case 1
$query->expr()->andX(
$query->expr()->gte('firstoccurence', $query->createNamedParameter($rangerStart)),
$query->expr()->lte('lastoccurence', $query->createNamedParameter($rangerEnd)),
),
// case 2
$query->expr()->andX(
$query->expr()->lt('firstoccurence', $query->createNamedParameter($rangerStart)),
$query->expr()->gte('lastoccurence', $query->createNamedParameter($rangerStart)),
$query->expr()->lte('lastoccurence', $query->createNamedParameter($rangerEnd))
),
// case 3
$query->expr()->andX(
$query->expr()->gte('firstoccurence', $query->createNamedParameter($rangerStart)),
$query->expr()->lte('firstoccurence', $query->createNamedParameter($rangerEnd)),
$query->expr()->gt('lastoccurence', $query->createNamedParameter($rangerEnd))
),
// case 4
$query->expr()->andX(
$query->expr()->lt('firstoccurence', $query->createNamedParameter($rangerStart)),
$query->expr()->gt('lastoccurence', $query->createNamedParameter($rangerEnd))
)
));
}
$stmt = $query->executeQuery();

5
apps/dav/lib/Listener/AddMissingIndicesListener.php

@ -35,6 +35,11 @@ class AddMissingIndicesListener implements IEventListener {
'calobjects_by_uid_index',
['calendarid', 'calendartype', 'uid']
);
$event->addMissingIndex(
'calendarobjects',
'calobjects_by_time_index',
['calendarid', 'calendartype', 'firstoccurence', 'lastoccurence']
);
}
}

1
apps/dav/lib/Migration/Version1006Date20180628111625.php

@ -50,6 +50,7 @@ class Version1006Date20180628111625 extends SimpleMigrationStep {
}
$calendarObjectsTable->addUniqueIndex(['calendarid', 'calendartype', 'uri'], 'calobjects_index');
$calendarObjectsTable->addUniqueIndex(['calendarid', 'calendartype', 'uid'], 'calobjects_by_uid_index');
$calendarObjectsTable->addIndex(['calendarid', 'calendartype', 'firstoccurence', 'lastoccurence'], 'calobjects_by_time_index');
}
if ($schema->hasTable('calendarobjects_props')) {

Loading…
Cancel
Save