mirror of
https://github.com/nextcloud/server.git
synced 2026-03-19 17:13:56 -04:00
Fix causal reads in CalDAV backend
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
This commit is contained in:
parent
f888f99b0a
commit
e6d8da4cdc
1 changed files with 29 additions and 20 deletions
|
|
@ -64,6 +64,7 @@ use OCA\DAV\Events\CalendarUpdatedEvent;
|
|||
use OCA\DAV\Events\SubscriptionCreatedEvent;
|
||||
use OCA\DAV\Events\SubscriptionDeletedEvent;
|
||||
use OCA\DAV\Events\SubscriptionUpdatedEvent;
|
||||
use OCP\AppFramework\Db\TTransactional;
|
||||
use OCP\Calendar\Exceptions\CalendarException;
|
||||
use OCP\DB\Exception;
|
||||
use OCP\DB\QueryBuilder\IQueryBuilder;
|
||||
|
|
@ -119,6 +120,9 @@ use function time;
|
|||
* @package OCA\DAV\CalDAV
|
||||
*/
|
||||
class CalDavBackend extends AbstractBackend implements SyncSupport, SubscriptionSupport, SchedulingSupport {
|
||||
|
||||
use TTransactional;
|
||||
|
||||
public const CALENDAR_TYPE_CALENDAR = 0;
|
||||
public const CALENDAR_TYPE_SUBSCRIPTION = 1;
|
||||
|
||||
|
|
@ -812,15 +816,19 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
}
|
||||
}
|
||||
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->insert('calendars');
|
||||
foreach ($values as $column => $value) {
|
||||
$query->setValue($column, $query->createNamedParameter($value));
|
||||
}
|
||||
$query->executeStatement();
|
||||
$calendarId = $query->getLastInsertId();
|
||||
[$calendarId, $calendarData] = $this->atomic(function() use ($values) {
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->insert('calendars');
|
||||
foreach ($values as $column => $value) {
|
||||
$query->setValue($column, $query->createNamedParameter($value));
|
||||
}
|
||||
$query->executeStatement();
|
||||
$calendarId = $query->getLastInsertId();
|
||||
|
||||
$calendarData = $this->getCalendarById($calendarId);
|
||||
return [$calendarId, $calendarData];
|
||||
}, $this->db);
|
||||
|
||||
$calendarData = $this->getCalendarById($calendarId);
|
||||
$this->dispatcher->dispatchTyped(new CalendarCreatedEvent((int)$calendarId, $calendarData));
|
||||
|
||||
return $calendarId;
|
||||
|
|
@ -2446,21 +2454,22 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
}
|
||||
}
|
||||
|
||||
$valuesToInsert = [];
|
||||
[$subscriptionId, $subscriptionRow] = $this->atomic(function() use ($values) {
|
||||
$valuesToInsert = [];
|
||||
$query = $this->db->getQueryBuilder();
|
||||
foreach (array_keys($values) as $name) {
|
||||
$valuesToInsert[$name] = $query->createNamedParameter($values[$name]);
|
||||
}
|
||||
$query->insert('calendarsubscriptions')
|
||||
->values($valuesToInsert)
|
||||
->executeStatement();
|
||||
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$subscriptionId = $query->getLastInsertId();
|
||||
|
||||
foreach (array_keys($values) as $name) {
|
||||
$valuesToInsert[$name] = $query->createNamedParameter($values[$name]);
|
||||
}
|
||||
$subscriptionRow = $this->getSubscriptionById($subscriptionId);
|
||||
return [$subscriptionId, $subscriptionRow];
|
||||
}, $this->db);
|
||||
|
||||
$query->insert('calendarsubscriptions')
|
||||
->values($valuesToInsert)
|
||||
->executeStatement();
|
||||
|
||||
$subscriptionId = $query->getLastInsertId();
|
||||
|
||||
$subscriptionRow = $this->getSubscriptionById($subscriptionId);
|
||||
$this->dispatcher->dispatchTyped(new SubscriptionCreatedEvent($subscriptionId, $subscriptionRow));
|
||||
|
||||
return $subscriptionId;
|
||||
|
|
|
|||
Loading…
Reference in a new issue