aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-05-01 13:37:53 -0400
committerGravatar GitHub <noreply@github.com>2018-05-01 13:37:53 -0400
commit4e1ffe464900a45915a3a0a4f2a331b5824c24df (patch)
treec3586f3d840f4b21a4e4643a46fe94f2443d3959 /Firestore/Source
parent51be76700c3b71a0924e8eaf7bac4b02e0130e62 (diff)
Port `SnapshotVersion` for the rest Firestore modulo (#1185)
* remove conversions in `Local` and `Remote` * replace `FSTSnapshotVersion` in `Model` * replace `FSTSnapshotVersion` in the rest * let test check equal with C++ equal * fix newly added code * address changes
Diffstat (limited to 'Firestore/Source')
-rw-r--r--Firestore/Source/API/FSTUserDataConverter.h1
-rw-r--r--Firestore/Source/Core/FSTSyncEngine.mm3
-rw-r--r--Firestore/Source/Core/FSTTransaction.mm15
-rw-r--r--Firestore/Source/Local/FSTLocalSerializer.mm10
-rw-r--r--Firestore/Source/Local/FSTLocalStore.mm8
-rw-r--r--Firestore/Source/Local/FSTQueryData.mm2
-rw-r--r--Firestore/Source/Model/FSTDocument.h9
-rw-r--r--Firestore/Source/Model/FSTDocument.mm30
-rw-r--r--Firestore/Source/Model/FSTMutation.h8
-rw-r--r--Firestore/Source/Model/FSTMutation.mm24
-rw-r--r--Firestore/Source/Model/FSTMutationBatch.h7
-rw-r--r--Firestore/Source/Model/FSTMutationBatch.mm26
-rw-r--r--Firestore/Source/Remote/FSTRemoteStore.mm2
13 files changed, 84 insertions, 61 deletions
diff --git a/Firestore/Source/API/FSTUserDataConverter.h b/Firestore/Source/API/FSTUserDataConverter.h
index 98a65ae..a3d8a2d 100644
--- a/Firestore/Source/API/FSTUserDataConverter.h
+++ b/Firestore/Source/API/FSTUserDataConverter.h
@@ -27,7 +27,6 @@
@class FSTObjectValue;
@class FSTFieldValue;
@class FSTMutation;
-@class FSTSnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
diff --git a/Firestore/Source/Core/FSTSyncEngine.mm b/Firestore/Source/Core/FSTSyncEngine.mm
index 775f865..8ec98e8 100644
--- a/Firestore/Source/Core/FSTSyncEngine.mm
+++ b/Firestore/Source/Core/FSTSyncEngine.mm
@@ -24,7 +24,6 @@
#import "FIRFirestoreErrors.h"
#import "Firestore/Source/Core/FSTQuery.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Core/FSTTransaction.h"
#import "Firestore/Source/Core/FSTView.h"
#import "Firestore/Source/Core/FSTViewSnapshot.h"
@@ -347,7 +346,7 @@ static const FSTListenSequenceNumber kIrrelevantSequenceNumber = -1;
NSMutableDictionary<NSNumber *, FSTTargetChange *> *targetChanges =
[NSMutableDictionary dictionary];
FSTDeletedDocument *doc =
- [FSTDeletedDocument documentWithKey:limboKey version:[FSTSnapshotVersion noVersion]];
+ [FSTDeletedDocument documentWithKey:limboKey version:SnapshotVersion::None()];
FSTDocumentKeySet *limboDocuments = [[FSTDocumentKeySet keySet] setByAddingObject:doc.key];
FSTRemoteEvent *event = [[FSTRemoteEvent alloc] initWithSnapshotVersion:SnapshotVersion::None()
targetChanges:targetChanges
diff --git a/Firestore/Source/Core/FSTTransaction.mm b/Firestore/Source/Core/FSTTransaction.mm
index 4aabd5a..57dcc48 100644
--- a/Firestore/Source/Core/FSTTransaction.mm
+++ b/Firestore/Source/Core/FSTTransaction.mm
@@ -23,7 +23,6 @@
#import "FIRFirestoreErrors.h"
#import "Firestore/Source/API/FSTUserDataConverter.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Model/FSTDocument.h"
#import "Firestore/Source/Model/FSTDocumentKeySet.h"
#import "Firestore/Source/Model/FSTMutation.h"
@@ -33,9 +32,11 @@
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
#include "Firestore/core/src/firebase/firestore/model/precondition.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
using firebase::firestore::model::DocumentKey;
using firebase::firestore::model::Precondition;
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -53,7 +54,7 @@ NS_ASSUME_NONNULL_BEGIN
@end
@implementation FSTTransaction {
- std::map<DocumentKey, FSTSnapshotVersion *> _readVersions;
+ std::map<DocumentKey, SnapshotVersion> _readVersions;
}
+ (instancetype)transactionWithDatastore:(FSTDatastore *)datastore {
@@ -79,11 +80,11 @@ NS_ASSUME_NONNULL_BEGIN
- (BOOL)recordVersionForDocument:(FSTMaybeDocument *)doc error:(NSError **)error {
FSTAssert(error != nil, @"nil error parameter");
*error = nil;
- FSTSnapshotVersion *docVersion = doc.version;
+ SnapshotVersion docVersion = doc.version;
if ([doc isKindOfClass:[FSTDeletedDocument class]]) {
// For deleted docs, we must record an explicit no version to build the right precondition
// when writing.
- docVersion = [FSTSnapshotVersion noVersion];
+ docVersion = SnapshotVersion::None();
}
if (_readVersions.find(doc.key) == _readVersions.end()) {
_readVersions[doc.key] = docVersion;
@@ -159,8 +160,8 @@ NS_ASSUME_NONNULL_BEGIN
return Precondition::Exists(true);
}
- FSTSnapshotVersion *version = iter->second;
- if ([version isEqual:[FSTSnapshotVersion noVersion]]) {
+ const SnapshotVersion &version = iter->second;
+ if (version == SnapshotVersion::None()) {
// The document was read, but doesn't exist.
// Return an error because the precondition is impossible
if (error) {
@@ -200,7 +201,7 @@ NS_ASSUME_NONNULL_BEGIN
precondition:[self preconditionForDocumentKey:key]] ]];
// Since the delete will be applied before all following writes, we need to ensure that the
// precondition for the next write will be exists without timestamp.
- _readVersions[key] = [FSTSnapshotVersion noVersion];
+ _readVersions[key] = SnapshotVersion::None();
}
- (void)commitWithCompletion:(FSTVoidErrorBlock)completion {
diff --git a/Firestore/Source/Local/FSTLocalSerializer.mm b/Firestore/Source/Local/FSTLocalSerializer.mm
index 652fa5f..8fa1278 100644
--- a/Firestore/Source/Local/FSTLocalSerializer.mm
+++ b/Firestore/Source/Local/FSTLocalSerializer.mm
@@ -103,8 +103,8 @@ using firebase::firestore::model::SnapshotVersion;
FSTSerializerBeta *remoteSerializer = self.remoteSerializer;
FSTObjectValue *data = [remoteSerializer decodedFields:document.fields];
- const DocumentKey key = [remoteSerializer decodedDocumentKey:document.name];
- const SnapshotVersion version = [remoteSerializer decodedVersion:document.updateTime];
+ DocumentKey key = [remoteSerializer decodedDocumentKey:document.name];
+ SnapshotVersion version = [remoteSerializer decodedVersion:document.updateTime];
return [FSTDocument documentWithData:data key:key version:version hasLocalMutations:NO];
}
@@ -122,8 +122,8 @@ using firebase::firestore::model::SnapshotVersion;
- (FSTDeletedDocument *)decodedDeletedDocument:(FSTPBNoDocument *)proto {
FSTSerializerBeta *remoteSerializer = self.remoteSerializer;
- const DocumentKey key = [remoteSerializer decodedDocumentKey:proto.name];
- const SnapshotVersion version = [remoteSerializer decodedVersion:proto.readTime];
+ DocumentKey key = [remoteSerializer decodedDocumentKey:proto.name];
+ SnapshotVersion version = [remoteSerializer decodedVersion:proto.readTime];
return [FSTDeletedDocument documentWithKey:key version:version];
}
@@ -188,7 +188,7 @@ using firebase::firestore::model::SnapshotVersion;
FSTTargetID targetID = target.targetId;
FSTListenSequenceNumber sequenceNumber = target.lastListenSequenceNumber;
- const SnapshotVersion version = [remoteSerializer decodedVersion:target.snapshotVersion];
+ SnapshotVersion version = [remoteSerializer decodedVersion:target.snapshotVersion];
NSData *resumeToken = target.resumeToken;
FSTQuery *query;
diff --git a/Firestore/Source/Local/FSTLocalStore.mm b/Firestore/Source/Local/FSTLocalStore.mm
index a3c447f..3a324cd 100644
--- a/Firestore/Source/Local/FSTLocalStore.mm
+++ b/Firestore/Source/Local/FSTLocalStore.mm
@@ -318,8 +318,9 @@ NS_ASSUME_NONNULL_BEGIN
} else {
FSTLog(
@"FSTLocalStore Ignoring outdated watch update for %s. "
- "Current version: %@ Watch version: %@",
- key.ToString().c_str(), existingDoc.version, doc.version);
+ "Current version: %s Watch version: %s",
+ key.ToString().c_str(), existingDoc.version.timestamp().ToString().c_str(),
+ doc.version.timestamp().ToString().c_str());
}
// The document might be garbage because it was unreferenced by everything.
@@ -331,8 +332,7 @@ NS_ASSUME_NONNULL_BEGIN
// events when we get permission denied errors while trying to resolve the state of a locally
// cached document that is in limbo.
const SnapshotVersion &lastRemoteVersion = [self.queryCache lastRemoteSnapshotVersion];
- // TODO(zxu): convert to reference once SnapshotVersion is used in RemoteEvent.
- const SnapshotVersion remoteVersion = remoteEvent.snapshotVersion;
+ const SnapshotVersion &remoteVersion = remoteEvent.snapshotVersion;
if (remoteVersion != SnapshotVersion::None()) {
FSTAssert(remoteVersion >= lastRemoteVersion,
@"Watch stream reverted to previous snapshot?? (%s < %s)",
diff --git a/Firestore/Source/Local/FSTQueryData.mm b/Firestore/Source/Local/FSTQueryData.mm
index 456d42a..e352101 100644
--- a/Firestore/Source/Local/FSTQueryData.mm
+++ b/Firestore/Source/Local/FSTQueryData.mm
@@ -74,7 +74,7 @@ NS_ASSUME_NONNULL_BEGIN
FSTQueryData *other = (FSTQueryData *)object;
return [self.query isEqual:other.query] && self.targetID == other.targetID &&
- self.purpose == other.purpose && [self.snapshotVersion isEqual:other.snapshotVersion] &&
+ self.purpose == other.purpose && self.snapshotVersion == other.snapshotVersion &&
[self.resumeToken isEqual:other.resumeToken];
}
diff --git a/Firestore/Source/Model/FSTDocument.h b/Firestore/Source/Model/FSTDocument.h
index 47e4d28..0f8d4b3 100644
--- a/Firestore/Source/Model/FSTDocument.h
+++ b/Firestore/Source/Model/FSTDocument.h
@@ -18,10 +18,10 @@
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
#include "Firestore/core/src/firebase/firestore/model/field_path.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
@class FSTFieldValue;
@class FSTObjectValue;
-@class FSTSnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -32,14 +32,13 @@ NS_ASSUME_NONNULL_BEGIN
@interface FSTMaybeDocument : NSObject <NSCopying>
- (id)init __attribute__((unavailable("Abstract base class")));
- (const firebase::firestore::model::DocumentKey &)key;
-
-@property(nonatomic, readonly) FSTSnapshotVersion *version;
+- (const firebase::firestore::model::SnapshotVersion &)version;
@end
@interface FSTDocument : FSTMaybeDocument
+ (instancetype)documentWithData:(FSTObjectValue *)data
key:(firebase::firestore::model::DocumentKey)key
- version:(FSTSnapshotVersion *)version
+ version:(firebase::firestore::model::SnapshotVersion)version
hasLocalMutations:(BOOL)mutations;
- (nullable FSTFieldValue *)fieldForPath:(const firebase::firestore::model::FieldPath &)path;
@@ -51,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface FSTDeletedDocument : FSTMaybeDocument
+ (instancetype)documentWithKey:(firebase::firestore::model::DocumentKey)key
- version:(FSTSnapshotVersion *)version;
+ version:(firebase::firestore::model::SnapshotVersion)version;
@end
/** An NSComparator suitable for comparing docs using only their keys. */
diff --git a/Firestore/Source/Model/FSTDocument.mm b/Firestore/Source/Model/FSTDocument.mm
index 9898c2a..8ebc9ab 100644
--- a/Firestore/Source/Model/FSTDocument.mm
+++ b/Firestore/Source/Model/FSTDocument.mm
@@ -18,7 +18,6 @@
#include <utility>
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Model/FSTFieldValue.h"
#import "Firestore/Source/Util/FSTAssert.h"
@@ -29,26 +28,28 @@
namespace util = firebase::firestore::util;
using firebase::firestore::model::DocumentKey;
using firebase::firestore::model::FieldPath;
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@interface FSTMaybeDocument ()
- (instancetype)initWithKey:(DocumentKey)key
- version:(FSTSnapshotVersion *)version NS_DESIGNATED_INITIALIZER;
+ version:(SnapshotVersion)version NS_DESIGNATED_INITIALIZER;
@end
@implementation FSTMaybeDocument {
DocumentKey _key;
+ SnapshotVersion _version;
}
-- (instancetype)initWithKey:(DocumentKey)key version:(FSTSnapshotVersion *)version {
+- (instancetype)initWithKey:(DocumentKey)key version:(SnapshotVersion)version {
FSTAssert(!!version, @"Version must not be nil.");
self = [super init];
if (self) {
_key = std::move(key);
- _version = version;
+ _version = std::move(version);
}
return self;
}
@@ -62,25 +63,29 @@ NS_ASSUME_NONNULL_BEGIN
return _key;
}
+- (const SnapshotVersion &)version {
+ return _version;
+}
+
@end
@implementation FSTDocument
+ (instancetype)documentWithData:(FSTObjectValue *)data
key:(DocumentKey)key
- version:(FSTSnapshotVersion *)version
+ version:(SnapshotVersion)version
hasLocalMutations:(BOOL)mutations {
return [[FSTDocument alloc] initWithData:data
key:std::move(key)
- version:version
+ version:std::move(version)
hasLocalMutations:mutations];
}
- (instancetype)initWithData:(FSTObjectValue *)data
key:(DocumentKey)key
- version:(FSTSnapshotVersion *)version
+ version:(SnapshotVersion)version
hasLocalMutations:(BOOL)mutations {
- self = [super initWithKey:std::move(key) version:version];
+ self = [super initWithKey:std::move(key) version:std::move(version)];
if (self) {
_data = data;
_localMutations = mutations;
@@ -110,8 +115,9 @@ NS_ASSUME_NONNULL_BEGIN
}
- (NSString *)description {
- return [NSString stringWithFormat:@"<FSTDocument: key:%s version:%@ localMutations:%@ data:%@>",
- self.key.ToString().c_str(), self.version,
+ return [NSString stringWithFormat:@"<FSTDocument: key:%s version:%s localMutations:%@ data:%@>",
+ self.key.ToString().c_str(),
+ self.version.timestamp().ToString().c_str(),
self.localMutations ? @"YES" : @"NO", self.data];
}
@@ -123,8 +129,8 @@ NS_ASSUME_NONNULL_BEGIN
@implementation FSTDeletedDocument
-+ (instancetype)documentWithKey:(DocumentKey)key version:(FSTSnapshotVersion *)version {
- return [[FSTDeletedDocument alloc] initWithKey:std::move(key) version:version];
++ (instancetype)documentWithKey:(DocumentKey)key version:(SnapshotVersion)version {
+ return [[FSTDeletedDocument alloc] initWithKey:std::move(key) version:std::move(version)];
}
- (BOOL)isEqual:(id)other {
diff --git a/Firestore/Source/Model/FSTMutation.h b/Firestore/Source/Model/FSTMutation.h
index 7261f30..0acec15 100644
--- a/Firestore/Source/Model/FSTMutation.h
+++ b/Firestore/Source/Model/FSTMutation.h
@@ -24,13 +24,15 @@
#include "Firestore/core/src/firebase/firestore/model/field_path.h"
#include "Firestore/core/src/firebase/firestore/model/field_transform.h"
#include "Firestore/core/src/firebase/firestore/model/precondition.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
#include "Firestore/core/src/firebase/firestore/model/transform_operations.h"
+#include "absl/types/optional.h"
+
@class FSTDocument;
@class FSTFieldValue;
@class FSTMaybeDocument;
@class FSTObjectValue;
-@class FSTSnapshotVersion;
@class FIRTimestamp;
NS_ASSUME_NONNULL_BEGIN
@@ -40,12 +42,12 @@ NS_ASSUME_NONNULL_BEGIN
@interface FSTMutationResult : NSObject
- (instancetype)init NS_UNAVAILABLE;
-- (instancetype)initWithVersion:(FSTSnapshotVersion *_Nullable)version
+- (instancetype)initWithVersion:(absl::optional<firebase::firestore::model::SnapshotVersion>)version
transformResults:(NSArray<FSTFieldValue *> *_Nullable)transformResults
NS_DESIGNATED_INITIALIZER;
/** The version at which the mutation was committed or null for a delete. */
-@property(nonatomic, strong, readonly, nullable) FSTSnapshotVersion *version;
+- (const absl::optional<firebase::firestore::model::SnapshotVersion> &)version;
/**
* The resulting fields returned from the backend after a FSTTransformMutation has been committed.
diff --git a/Firestore/Source/Model/FSTMutation.mm b/Firestore/Source/Model/FSTMutation.mm
index 3432a7c..fdf6014 100644
--- a/Firestore/Source/Model/FSTMutation.mm
+++ b/Firestore/Source/Model/FSTMutation.mm
@@ -23,7 +23,6 @@
#import "FIRTimestamp.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Model/FSTDocument.h"
#import "Firestore/Source/Model/FSTFieldValue.h"
#import "Firestore/Source/Util/FSTAssert.h"
@@ -36,6 +35,8 @@
#include "Firestore/core/src/firebase/firestore/model/precondition.h"
#include "Firestore/core/src/firebase/firestore/model/transform_operations.h"
+#include "absl/types/optional.h"
+
using firebase::firestore::model::ArrayTransform;
using firebase::firestore::model::DocumentKey;
using firebase::firestore::model::FieldMask;
@@ -43,23 +44,30 @@ using firebase::firestore::model::FieldPath;
using firebase::firestore::model::FieldTransform;
using firebase::firestore::model::Precondition;
using firebase::firestore::model::ServerTimestampTransform;
+using firebase::firestore::model::SnapshotVersion;
using firebase::firestore::model::TransformOperation;
NS_ASSUME_NONNULL_BEGIN
#pragma mark - FSTMutationResult
-@implementation FSTMutationResult
+@implementation FSTMutationResult {
+ absl::optional<SnapshotVersion> _version;
+}
-- (instancetype)initWithVersion:(nullable FSTSnapshotVersion *)version
+- (instancetype)initWithVersion:(absl::optional<SnapshotVersion>)version
transformResults:(nullable NSArray<FSTFieldValue *> *)transformResults {
if (self = [super init]) {
- _version = version;
+ _version = std::move(version);
_transformResults = transformResults;
}
return self;
}
+- (const absl::optional<SnapshotVersion> &)version {
+ return _version;
+}
+
@end
#pragma mark - FSTMutation
@@ -157,7 +165,7 @@ NS_ASSUME_NONNULL_BEGIN
// If the document didn't exist before, create it.
return [FSTDocument documentWithData:self.value
key:self.key
- version:[FSTSnapshotVersion noVersion]
+ version:SnapshotVersion::None()
hasLocalMutations:hasLocalMutations];
}
@@ -239,10 +247,10 @@ NS_ASSUME_NONNULL_BEGIN
if (!maybeDoc || [maybeDoc isMemberOfClass:[FSTDeletedDocument class]]) {
// Precondition applied, so create the document if necessary
const DocumentKey &key = maybeDoc ? maybeDoc.key : self.key;
- FSTSnapshotVersion *version = maybeDoc ? maybeDoc.version : [FSTSnapshotVersion noVersion];
+ SnapshotVersion version = maybeDoc ? maybeDoc.version : SnapshotVersion::None();
maybeDoc = [FSTDocument documentWithData:[FSTObjectValue objectValue]
key:key
- version:version
+ version:std::move(version)
hasLocalMutations:hasLocalMutations];
}
@@ -556,7 +564,7 @@ serverTransformResultsWithBaseDocument:(nullable FSTMaybeDocument *)baseDocument
FSTAssert([maybeDoc.key isEqual:self.key], @"Can only delete a document with the same key");
}
- return [FSTDeletedDocument documentWithKey:self.key version:[FSTSnapshotVersion noVersion]];
+ return [FSTDeletedDocument documentWithKey:self.key version:SnapshotVersion::None()];
}
@end
diff --git a/Firestore/Source/Model/FSTMutationBatch.h b/Firestore/Source/Model/FSTMutationBatch.h
index 3c82338..d3d68a9 100644
--- a/Firestore/Source/Model/FSTMutationBatch.h
+++ b/Firestore/Source/Model/FSTMutationBatch.h
@@ -21,12 +21,12 @@
#import "Firestore/Source/Model/FSTDocumentVersionDictionary.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
@class FSTMutation;
@class FIRTimestamp;
@class FSTMutationResult;
@class FSTMutationBatchResult;
-@class FSTSnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -106,12 +106,13 @@ extern const FSTBatchID kFSTBatchIDUnknown;
* (as docVersions).
*/
+ (instancetype)resultWithBatch:(FSTMutationBatch *)batch
- commitVersion:(FSTSnapshotVersion *)commitVersion
+ commitVersion:(firebase::firestore::model::SnapshotVersion)commitVersion
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
streamToken:(nullable NSData *)streamToken;
+- (const firebase::firestore::model::SnapshotVersion &)commitVersion;
+
@property(nonatomic, strong, readonly) FSTMutationBatch *batch;
-@property(nonatomic, strong, readonly) FSTSnapshotVersion *commitVersion;
@property(nonatomic, strong, readonly) NSArray<FSTMutationResult *> *mutationResults;
@property(nonatomic, strong, readonly, nullable) NSData *streamToken;
@property(nonatomic, strong, readonly) FSTDocumentVersionDictionary *docVersions;
diff --git a/Firestore/Source/Model/FSTMutationBatch.mm b/Firestore/Source/Model/FSTMutationBatch.mm
index e62a72c..3c03bdc 100644
--- a/Firestore/Source/Model/FSTMutationBatch.mm
+++ b/Firestore/Source/Model/FSTMutationBatch.mm
@@ -16,9 +16,10 @@
#import "Firestore/Source/Model/FSTMutationBatch.h"
+#include <utility>
+
#import "FIRTimestamp.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Model/FSTDocument.h"
#import "Firestore/Source/Model/FSTMutation.h"
#import "Firestore/Source/Util/FSTAssert.h"
@@ -26,6 +27,7 @@
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
using firebase::firestore::model::DocumentKey;
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -127,22 +129,24 @@ const FSTBatchID kFSTBatchIDUnknown = -1;
@interface FSTMutationBatchResult ()
- (instancetype)initWithBatch:(FSTMutationBatch *)batch
- commitVersion:(FSTSnapshotVersion *)commitVersion
+ commitVersion:(SnapshotVersion)commitVersion
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
streamToken:(nullable NSData *)streamToken
docVersions:(FSTDocumentVersionDictionary *)docVersions NS_DESIGNATED_INITIALIZER;
@end
-@implementation FSTMutationBatchResult
+@implementation FSTMutationBatchResult {
+ SnapshotVersion _commitVersion;
+}
- (instancetype)initWithBatch:(FSTMutationBatch *)batch
- commitVersion:(FSTSnapshotVersion *)commitVersion
+ commitVersion:(SnapshotVersion)commitVersion
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
streamToken:(nullable NSData *)streamToken
docVersions:(FSTDocumentVersionDictionary *)docVersions {
if (self = [super init]) {
_batch = batch;
- _commitVersion = commitVersion;
+ _commitVersion = std::move(commitVersion);
_mutationResults = mutationResults;
_streamToken = streamToken;
_docVersions = docVersions;
@@ -150,8 +154,12 @@ const FSTBatchID kFSTBatchIDUnknown = -1;
return self;
}
+- (const SnapshotVersion &)commitVersion {
+ return _commitVersion;
+}
+
+ (instancetype)resultWithBatch:(FSTMutationBatch *)batch
- commitVersion:(FSTSnapshotVersion *)commitVersion
+ commitVersion:(SnapshotVersion)commitVersion
mutationResults:(NSArray<FSTMutationResult *> *)mutationResults
streamToken:(nullable NSData *)streamToken {
FSTAssert(batch.mutations.count == mutationResults.count,
@@ -162,18 +170,18 @@ const FSTBatchID kFSTBatchIDUnknown = -1;
[FSTDocumentVersionDictionary documentVersionDictionary];
NSArray<FSTMutation *> *mutations = batch.mutations;
for (NSUInteger i = 0; i < mutations.count; i++) {
- FSTSnapshotVersion *_Nullable version = mutationResults[i].version;
+ absl::optional<SnapshotVersion> version = mutationResults[i].version;
if (!version) {
// deletes don't have a version, so we substitute the commitVersion
// of the entire batch.
version = commitVersion;
}
- docVersions = [docVersions dictionaryBySettingObject:version forKey:mutations[i].key];
+ docVersions = [docVersions dictionaryBySettingObject:version.value() forKey:mutations[i].key];
}
return [[FSTMutationBatchResult alloc] initWithBatch:batch
- commitVersion:commitVersion
+ commitVersion:std::move(commitVersion)
mutationResults:mutationResults
streamToken:streamToken
docVersions:docVersions];
diff --git a/Firestore/Source/Remote/FSTRemoteStore.mm b/Firestore/Source/Remote/FSTRemoteStore.mm
index 4dacc8e..c1ec9ff 100644
--- a/Firestore/Source/Remote/FSTRemoteStore.mm
+++ b/Firestore/Source/Remote/FSTRemoteStore.mm
@@ -317,7 +317,7 @@ static const int kMaxPendingWrites = 10;
// using a resume token).
[self.accumulatedChanges addObject:change];
if (snapshotVersion == SnapshotVersion::None() ||
- snapshotVersion < SnapshotVersion{[self.localStore lastRemoteSnapshotVersion]}) {
+ snapshotVersion < [self.localStore lastRemoteSnapshotVersion]) {
return;
}