mirror of
https://github.com/nextcloud/server.git
synced 2026-04-21 14:23:17 -04:00
refactor(dav): Since we're in a transaction, use QB properly when incrementing synctoken
Now that we're in a transaction, we can reuse the sync token's previous value without trouble, and rewrite the increment UPDATE query without dirty direct SQL. Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
c9a3129cb4
commit
ff3b69b21d
2 changed files with 32 additions and 20 deletions
|
|
@ -2686,10 +2686,10 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
* @param int $calendarType
|
||||
* @return void
|
||||
*/
|
||||
protected function addChange($calendarId, $objectUri, $operation, $calendarType = self::CALENDAR_TYPE_CALENDAR) {
|
||||
$this->atomic(function () use ($calendarId, $objectUri, $operation, $calendarType) {
|
||||
$table = $calendarType === self::CALENDAR_TYPE_CALENDAR ? 'calendars': 'calendarsubscriptions';
|
||||
protected function addChange(int $calendarId, string $objectUri, int $operation, int $calendarType = self::CALENDAR_TYPE_CALENDAR): void {
|
||||
$table = $calendarType === self::CALENDAR_TYPE_CALENDAR ? 'calendars': 'calendarsubscriptions';
|
||||
|
||||
$this->atomic(function () use ($calendarId, $objectUri, $operation, $calendarType, $table) {
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->select('synctoken')
|
||||
->from($table)
|
||||
|
|
@ -2709,10 +2709,11 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription
|
|||
])
|
||||
->executeStatement();
|
||||
|
||||
$stmt = $this->db->prepare("UPDATE `*PREFIX*$table` SET `synctoken` = `synctoken` + 1 WHERE `id` = ?");
|
||||
$stmt->execute([
|
||||
$calendarId
|
||||
]);
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->update($table)
|
||||
->set('synctoken', $query->createNamedParameter($syncToken + 1, IQueryBuilder::PARAM_INT))
|
||||
->where($query->expr()->eq('id', $query->createNamedParameter($calendarId)))
|
||||
->executeStatement();
|
||||
}, $this->db);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -923,20 +923,31 @@ class CardDavBackend implements BackendInterface, SyncSupport {
|
|||
* @param int $operation 1 = add, 2 = modify, 3 = delete
|
||||
* @return void
|
||||
*/
|
||||
protected function addChange($addressBookId, $objectUri, $operation) {
|
||||
protected function addChange(int $addressBookId, string $objectUri, int $operation): void {
|
||||
$this->atomic(function () use ($addressBookId, $objectUri, $operation) {
|
||||
$sql = 'INSERT INTO `*PREFIX*addressbookchanges`(`uri`, `synctoken`, `addressbookid`, `operation`) SELECT ?, `synctoken`, ?, ? FROM `*PREFIX*addressbooks` WHERE `id` = ?';
|
||||
$stmt = $this->db->prepare($sql);
|
||||
$stmt->execute([
|
||||
$objectUri,
|
||||
$addressBookId,
|
||||
$operation,
|
||||
$addressBookId
|
||||
]);
|
||||
$stmt = $this->db->prepare('UPDATE `*PREFIX*addressbooks` SET `synctoken` = `synctoken` + 1 WHERE `id` = ?');
|
||||
$stmt->execute([
|
||||
$addressBookId
|
||||
]);
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->select('synctoken')
|
||||
->from('addressbooks')
|
||||
->where($query->expr()->eq('id', $query->createNamedParameter($addressBookId)));
|
||||
$result = $query->executeQuery();
|
||||
$syncToken = (int)$result->fetchOne();
|
||||
$result->closeCursor();
|
||||
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->insert('addressbookchanges')
|
||||
->values([
|
||||
'uri' => $query->createNamedParameter($objectUri),
|
||||
'synctoken' => $query->createNamedParameter($syncToken),
|
||||
'addressbookid' => $query->createNamedParameter($addressBookId),
|
||||
'operation' => $query->createNamedParameter($operation),
|
||||
])
|
||||
->executeStatement();
|
||||
|
||||
$query = $this->db->getQueryBuilder();
|
||||
$query->update('addressbooks')
|
||||
->set('synctoken', $query->createNamedParameter($syncToken + 1, IQueryBuilder::PARAM_INT))
|
||||
->where($query->expr()->eq('id', $query->createNamedParameter($addressBookId)))
|
||||
->executeStatement();
|
||||
}, $this->db);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue