From 328d6dd529a9e7f1392149a5c7ae9f7cb3f346c7 Mon Sep 17 00:00:00 2001 From: Jonathan Schleifer Date: Sun, 4 Oct 2020 01:33:43 +0000 Subject: [PATCH] MTXStorage: Add transactions FossilOrigin-Name: 5d9f93730cae9ba8132f233ccab7d0aa1a47d26a6e56085558bd2b8a2b483ca5 --- src/MTXSQLite3Storage.m | 5 +++++ src/MTXStorage.h | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/MTXSQLite3Storage.m b/src/MTXSQLite3Storage.m index fd508d8..031085d 100644 --- a/src/MTXSQLite3Storage.m +++ b/src/MTXSQLite3Storage.m @@ -82,6 +82,11 @@ @")"]; } +- (void)transactionWithBlock: (mtx_storage_transaction_block_t)block +{ + [_conn transactionWithBlock: block]; +} + - (void)setNextBatch: (OFString *)nextBatch forDeviceID: (OFString *)deviceID { diff --git a/src/MTXStorage.h b/src/MTXStorage.h index f2d2a5c..c3a8ad9 100644 --- a/src/MTXStorage.h +++ b/src/MTXStorage.h @@ -24,10 +24,23 @@ OF_ASSUME_NONNULL_BEGIN +/** + * @brief A block which will be treated as a single transaction for the storage. + * + * @return Whether the transaction should be committed (`true`) or rolled back + * (`false`). + */ +typedef bool (^mtx_storage_transaction_block_t)(void); + /** * @brief A protocol for a storage to be used by @ref MTXClient. */ @protocol MTXStorage +/** + * @brief Performs all operations inside the block as a transaction. + */ +- (void)transactionWithBlock: (mtx_storage_transaction_block_t)block; + /** * @brief Stores the next batch for the specified device. *