aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source/Local/FSTLevelDB.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Firestore/Source/Local/FSTLevelDB.mm')
-rw-r--r--Firestore/Source/Local/FSTLevelDB.mm20
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()];
}