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. *