diff options
Diffstat (limited to 'Firestore/Source/Local/FSTLevelDB.mm')
-rw-r--r-- | Firestore/Source/Local/FSTLevelDB.mm | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/Firestore/Source/Local/FSTLevelDB.mm b/Firestore/Source/Local/FSTLevelDB.mm index 2edccb4..922c5b4 100644 --- a/Firestore/Source/Local/FSTLevelDB.mm +++ b/Firestore/Source/Local/FSTLevelDB.mm @@ -28,6 +28,7 @@ #import "Firestore/Source/Remote/FSTSerializerBeta.h" #import "Firestore/Source/Util/FSTAssert.h" #import "Firestore/Source/Util/FSTLogger.h" +#include "absl/memory/memory.h" #include "Firestore/core/src/firebase/firestore/auth/user.h" #include "Firestore/core/src/firebase/firestore/core/database_info.h" @@ -62,6 +63,7 @@ using leveldb::WriteOptions; @implementation FSTLevelDB { std::unique_ptr<LevelDbTransaction> _transaction; + FSTTransactionRunner _transactionRunner; } /** @@ -79,10 +81,15 @@ using leveldb::WriteOptions; _directory = [directory copy]; _writeGroupTracker = [FSTWriteGroupTracker tracker]; _serializer = serializer; + _transactionRunner.SetBackingPersistence(self); } return self; } +- (const FSTTransactionRunner &)run { + return _transactionRunner; +} + + (NSString *)documentsDirectory { #if TARGET_OS_IPHONE NSArray<NSString *> *directories = @@ -222,9 +229,20 @@ using leveldb::WriteOptions; return [[FSTLevelDBRemoteDocumentCache alloc] initWithDB:self serializer:self.serializer]; } +- (void)startTransaction { + FSTAssert(_transaction == nullptr, @"Starting a transaction while one is already outstanding"); + _transaction = absl::make_unique<LevelDbTransaction>(_ptr.get()); +} + +- (void)commitTransaction { + FSTAssert(_transaction != nullptr, @"Committing a transaction before one is started"); + _transaction->Commit(); + _transaction.reset(); +} + - (FSTWriteGroup *)startGroupWithAction:(NSString *)action { FSTAssert(_transaction == nullptr, @"Starting a transaction while one is already outstanding"); - _transaction = std::make_unique<LevelDbTransaction>(_ptr.get()); + _transaction = absl::make_unique<LevelDbTransaction>(_ptr.get()); return [self.writeGroupTracker startGroupWithAction:action transaction:_transaction.get()]; } |