aboutsummaryrefslogtreecommitdiffhomepage
path: root/Firestore/Source
diff options
context:
space:
mode:
authorGravatar zxu <zxu@google.com>2018-04-25 14:05:36 -0400
committerGravatar GitHub <noreply@github.com>2018-04-25 14:05:36 -0400
commitf9bd6d3c9491dddbfc9cbe0fcc633030a66fe9da (patch)
treea396dca81e1fc06d8870acad723e56175b75bd05 /Firestore/Source
parent5ecdcc5ae1132d2cc0d532e580b31f70369ef319 (diff)
Port `SnapshotVersion` for `Local` (#1182)
* no-brainer replace `FSTSnapshotVersion` with `SnapshotVersion` * refresh code * fix LocalStore * fix LocalStore (partial revert 78e6c38) * address changes
Diffstat (limited to 'Firestore/Source')
-rw-r--r--Firestore/Source/Local/FSTLevelDBQueryCache.mm14
-rw-r--r--Firestore/Source/Local/FSTLocalDocumentsView.mm5
-rw-r--r--Firestore/Source/Local/FSTLocalSerializer.h11
-rw-r--r--Firestore/Source/Local/FSTLocalSerializer.mm12
-rw-r--r--Firestore/Source/Local/FSTLocalStore.h3
-rw-r--r--Firestore/Source/Local/FSTLocalStore.mm42
-rw-r--r--Firestore/Source/Local/FSTMemoryQueryCache.mm25
-rw-r--r--Firestore/Source/Local/FSTQueryCache.h7
-rw-r--r--Firestore/Source/Local/FSTQueryData.h14
-rw-r--r--Firestore/Source/Local/FSTQueryData.mm31
10 files changed, 97 insertions, 67 deletions
diff --git a/Firestore/Source/Local/FSTLevelDBQueryCache.mm b/Firestore/Source/Local/FSTLevelDBQueryCache.mm
index 5fde7d7..85b659a 100644
--- a/Firestore/Source/Local/FSTLevelDBQueryCache.mm
+++ b/Firestore/Source/Local/FSTLevelDBQueryCache.mm
@@ -18,6 +18,7 @@
#include <memory>
#include <string>
+#include <utility>
#import "Firestore/Protos/objc/firestore/local/Target.pbobjc.h"
#import "Firestore/Source/Core/FSTQuery.h"
@@ -28,6 +29,7 @@
#import "Firestore/Source/Util/FSTAssert.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
#include "absl/strings/match.h"
NS_ASSUME_NONNULL_BEGIN
@@ -35,6 +37,7 @@ NS_ASSUME_NONNULL_BEGIN
using firebase::firestore::local::LevelDbTransaction;
using Firestore::StringView;
using firebase::firestore::model::DocumentKey;
+using firebase::firestore::model::SnapshotVersion;
using leveldb::DB;
using leveldb::Slice;
using leveldb::Status;
@@ -55,7 +58,7 @@ using leveldb::Status;
* The last received snapshot version. This is part of `metadata` but we store it separately to
* avoid extra conversion to/from GPBTimestamp.
*/
- FSTSnapshotVersion *_lastRemoteSnapshotVersion;
+ SnapshotVersion _lastRemoteSnapshotVersion;
}
+ (nullable FSTPBTargetGlobal *)readTargetMetadataWithTransaction:
@@ -135,13 +138,14 @@ using leveldb::Status;
return self.metadata.highestListenSequenceNumber;
}
-- (FSTSnapshotVersion *)lastRemoteSnapshotVersion {
+- (const SnapshotVersion &)lastRemoteSnapshotVersion {
return _lastRemoteSnapshotVersion;
}
-- (void)setLastRemoteSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion {
- _lastRemoteSnapshotVersion = snapshotVersion;
- self.metadata.lastRemoteSnapshotVersion = [self.serializer encodedVersion:snapshotVersion];
+- (void)setLastRemoteSnapshotVersion:(SnapshotVersion)snapshotVersion {
+ _lastRemoteSnapshotVersion = std::move(snapshotVersion);
+ self.metadata.lastRemoteSnapshotVersion =
+ [self.serializer encodedVersion:_lastRemoteSnapshotVersion];
_db.currentTransaction->Put([FSTLevelDBTargetGlobalKey key], self.metadata);
}
diff --git a/Firestore/Source/Local/FSTLocalDocumentsView.mm b/Firestore/Source/Local/FSTLocalDocumentsView.mm
index e9b9423..703d74d 100644
--- a/Firestore/Source/Local/FSTLocalDocumentsView.mm
+++ b/Firestore/Source/Local/FSTLocalDocumentsView.mm
@@ -17,7 +17,6 @@
#import "Firestore/Source/Local/FSTLocalDocumentsView.h"
#import "Firestore/Source/Core/FSTQuery.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Local/FSTMutationQueue.h"
#import "Firestore/Source/Local/FSTRemoteDocumentCache.h"
#import "Firestore/Source/Model/FSTDocument.h"
@@ -28,9 +27,11 @@
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
#include "Firestore/core/src/firebase/firestore/model/resource_path.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
using firebase::firestore::model::DocumentKey;
using firebase::firestore::model::ResourcePath;
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -71,7 +72,7 @@ NS_ASSUME_NONNULL_BEGIN
FSTMaybeDocument *maybeDoc = [self documentForKey:key];
// TODO(http://b/32275378): Don't conflate missing / deleted.
if (!maybeDoc) {
- maybeDoc = [FSTDeletedDocument documentWithKey:key version:[FSTSnapshotVersion noVersion]];
+ maybeDoc = [FSTDeletedDocument documentWithKey:key version:SnapshotVersion::None()];
}
results = [results dictionaryBySettingObject:maybeDoc forKey:key];
}
diff --git a/Firestore/Source/Local/FSTLocalSerializer.h b/Firestore/Source/Local/FSTLocalSerializer.h
index 6ca7f01..b75f3e6 100644
--- a/Firestore/Source/Local/FSTLocalSerializer.h
+++ b/Firestore/Source/Local/FSTLocalSerializer.h
@@ -16,11 +16,12 @@
#import <Foundation/Foundation.h>
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
+
@class FSTMaybeDocument;
@class FSTMutationBatch;
@class FSTQueryData;
@class FSTSerializerBeta;
-@class FSTSnapshotVersion;
@class FSTPBMaybeDocument;
@class FSTPBTarget;
@@ -61,11 +62,11 @@ NS_ASSUME_NONNULL_BEGIN
/** Decodes an FSTPBTarget proto from local storage into an FSTQueryData model. */
- (FSTQueryData *)decodedQueryData:(FSTPBTarget *)target;
-/** Encodes an FSTSnapshotVersion model into a GPBTimestamp proto. */
-- (GPBTimestamp *)encodedVersion:(FSTSnapshotVersion *)version;
+/** Encodes a SnapshotVersion model into a GPBTimestamp proto. */
+- (GPBTimestamp *)encodedVersion:(const firebase::firestore::model::SnapshotVersion &)version;
-/** Decodes a GPBTimestamp proto into a FSTSnapshotVersion model. */
-- (FSTSnapshotVersion *)decodedVersion:(GPBTimestamp *)version;
+/** Decodes a GPBTimestamp proto into a SnapshotVersion model. */
+- (firebase::firestore::model::SnapshotVersion)decodedVersion:(GPBTimestamp *)version;
@end
diff --git a/Firestore/Source/Local/FSTLocalSerializer.mm b/Firestore/Source/Local/FSTLocalSerializer.mm
index 61e173a..d20f50b 100644
--- a/Firestore/Source/Local/FSTLocalSerializer.mm
+++ b/Firestore/Source/Local/FSTLocalSerializer.mm
@@ -31,8 +31,10 @@
#import "Firestore/Source/Util/FSTAssert.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
using firebase::firestore::model::DocumentKey;
+using firebase::firestore::model::SnapshotVersion;
@interface FSTLocalSerializer ()
@@ -100,7 +102,7 @@ using firebase::firestore::model::DocumentKey;
FSTObjectValue *data = [remoteSerializer decodedFields:document.fields];
const DocumentKey key = [remoteSerializer decodedDocumentKey:document.name];
- FSTSnapshotVersion *version = [remoteSerializer decodedVersion:document.updateTime];
+ const SnapshotVersion version = [remoteSerializer decodedVersion:document.updateTime];
return [FSTDocument documentWithData:data key:key version:version hasLocalMutations:NO];
}
@@ -119,7 +121,7 @@ using firebase::firestore::model::DocumentKey;
FSTSerializerBeta *remoteSerializer = self.remoteSerializer;
const DocumentKey key = [remoteSerializer decodedDocumentKey:proto.name];
- FSTSnapshotVersion *version = [remoteSerializer decodedVersion:proto.readTime];
+ const SnapshotVersion version = [remoteSerializer decodedVersion:proto.readTime];
return [FSTDeletedDocument documentWithKey:key version:version];
}
@@ -181,7 +183,7 @@ using firebase::firestore::model::DocumentKey;
FSTTargetID targetID = target.targetId;
FSTListenSequenceNumber sequenceNumber = target.lastListenSequenceNumber;
- FSTSnapshotVersion *version = [remoteSerializer decodedVersion:target.snapshotVersion];
+ const SnapshotVersion version = [remoteSerializer decodedVersion:target.snapshotVersion];
NSData *resumeToken = target.resumeToken;
FSTQuery *query;
@@ -206,11 +208,11 @@ using firebase::firestore::model::DocumentKey;
resumeToken:resumeToken];
}
-- (GPBTimestamp *)encodedVersion:(FSTSnapshotVersion *)version {
+- (GPBTimestamp *)encodedVersion:(const SnapshotVersion &)version {
return [self.remoteSerializer encodedVersion:version];
}
-- (FSTSnapshotVersion *)decodedVersion:(GPBTimestamp *)version {
+- (SnapshotVersion)decodedVersion:(GPBTimestamp *)version {
return [self.remoteSerializer decodedVersion:version];
}
diff --git a/Firestore/Source/Local/FSTLocalStore.h b/Firestore/Source/Local/FSTLocalStore.h
index 82402e4..84aeb58 100644
--- a/Firestore/Source/Local/FSTLocalStore.h
+++ b/Firestore/Source/Local/FSTLocalStore.h
@@ -23,6 +23,7 @@
#include "Firestore/core/src/firebase/firestore/auth/user.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
@class FSTLocalViewChanges;
@class FSTLocalWriteResult;
@@ -141,7 +142,7 @@ NS_ASSUME_NONNULL_BEGIN
* Returns the last consistent snapshot processed (used by the RemoteStore to determine whether to
* buffer incoming snapshots from the backend).
*/
-- (FSTSnapshotVersion *)lastRemoteSnapshotVersion;
+- (const firebase::firestore::model::SnapshotVersion &)lastRemoteSnapshotVersion;
/**
* Updates the "ground-state" (remote) documents. We assume that the remote event reflects any
diff --git a/Firestore/Source/Local/FSTLocalStore.mm b/Firestore/Source/Local/FSTLocalStore.mm
index b5dfeec..a3c447f 100644
--- a/Firestore/Source/Local/FSTLocalStore.mm
+++ b/Firestore/Source/Local/FSTLocalStore.mm
@@ -21,7 +21,6 @@
#import "FIRTimestamp.h"
#import "Firestore/Source/Core/FSTListenSequence.h"
#import "Firestore/Source/Core/FSTQuery.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Local/FSTGarbageCollector.h"
#import "Firestore/Source/Local/FSTLocalDocumentsView.h"
#import "Firestore/Source/Local/FSTLocalViewChanges.h"
@@ -43,11 +42,12 @@
#include "Firestore/core/src/firebase/firestore/auth/user.h"
#include "Firestore/core/src/firebase/firestore/core/target_id_generator.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
using firebase::firestore::auth::User;
-using firebase::firestore::model::DocumentKey;
using firebase::firestore::core::TargetIdGenerator;
using firebase::firestore::model::DocumentKey;
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -256,7 +256,7 @@ NS_ASSUME_NONNULL_BEGIN
[&]() { [self.mutationQueue setLastStreamToken:streamToken]; });
}
-- (FSTSnapshotVersion *)lastRemoteSnapshotVersion {
+- (const SnapshotVersion &)lastRemoteSnapshotVersion {
return [self.queryCache lastRemoteSnapshotVersion];
}
@@ -310,10 +310,10 @@ NS_ASSUME_NONNULL_BEGIN
changedDocKeys = [changedDocKeys setByAddingObject:key];
FSTMaybeDocument *existingDoc = [self.remoteDocumentCache entryForKey:key];
// Make sure we don't apply an old document version to the remote cache, though we
- // make an exception for [SnapshotVersion noVersion] which can happen for manufactured
+ // make an exception for SnapshotVersion::None() which can happen for manufactured
// events (e.g. in the case of a limbo document resolution failing).
- if (!existingDoc || [doc.version isEqual:[FSTSnapshotVersion noVersion]] ||
- [doc.version compare:existingDoc.version] != NSOrderedAscending) {
+ if (!existingDoc || SnapshotVersion{doc.version} == SnapshotVersion::None() ||
+ SnapshotVersion{doc.version} >= SnapshotVersion{existingDoc.version}) {
[self.remoteDocumentCache addEntry:doc];
} else {
FSTLog(
@@ -330,12 +330,14 @@ NS_ASSUME_NONNULL_BEGIN
// HACK: The only reason we allow omitting snapshot version is so we can synthesize remote
// events when we get permission denied errors while trying to resolve the state of a locally
// cached document that is in limbo.
- FSTSnapshotVersion *lastRemoteVersion = [self.queryCache lastRemoteSnapshotVersion];
- FSTSnapshotVersion *remoteVersion = remoteEvent.snapshotVersion;
- if (![remoteVersion isEqual:[FSTSnapshotVersion noVersion]]) {
- FSTAssert([remoteVersion compare:lastRemoteVersion] != NSOrderedAscending,
- @"Watch stream reverted to previous snapshot?? (%@ < %@)", remoteVersion,
- lastRemoteVersion);
+ const SnapshotVersion &lastRemoteVersion = [self.queryCache lastRemoteSnapshotVersion];
+ // TODO(zxu): convert to reference once SnapshotVersion is used in RemoteEvent.
+ const SnapshotVersion remoteVersion = remoteEvent.snapshotVersion;
+ if (remoteVersion != SnapshotVersion::None()) {
+ FSTAssert(remoteVersion >= lastRemoteVersion,
+ @"Watch stream reverted to previous snapshot?? (%s < %s)",
+ remoteVersion.timestamp().ToString().c_str(),
+ lastRemoteVersion.timestamp().ToString().c_str());
[self.queryCache setLastRemoteSnapshotVersion:remoteVersion];
}
@@ -466,13 +468,12 @@ NS_ASSUME_NONNULL_BEGIN
}
}
-- (BOOL)isRemoteUpToVersion:(FSTSnapshotVersion *)version {
+- (BOOL)isRemoteUpToVersion:(const SnapshotVersion &)version {
// If there are no watch targets, then we won't get remote snapshots, and are always "up-to-date."
- return [version compare:self.queryCache.lastRemoteSnapshotVersion] != NSOrderedDescending ||
- self.targetIDs.count == 0;
+ return version <= self.queryCache.lastRemoteSnapshotVersion || self.targetIDs.count == 0;
}
-- (BOOL)shouldHoldBatchResultWithVersion:(FSTSnapshotVersion *)version {
+- (BOOL)shouldHoldBatchResultWithVersion:(const SnapshotVersion &)version {
// Check if watcher isn't up to date or prior results are already held.
return ![self isRemoteUpToVersion:version] || self.heldBatchResults.count > 0;
}
@@ -514,9 +515,12 @@ NS_ASSUME_NONNULL_BEGIN
[docKeys enumerateObjectsUsingBlock:^(FSTDocumentKey *docKey, BOOL *stop) {
FSTMaybeDocument *_Nullable remoteDoc = [self.remoteDocumentCache entryForKey:docKey];
FSTMaybeDocument *_Nullable doc = remoteDoc;
- FSTSnapshotVersion *ackVersion = batchResult.docVersions[docKey];
- FSTAssert(ackVersion, @"docVersions should contain every doc in the write.");
- if (!doc || [doc.version compare:ackVersion] == NSOrderedAscending) {
+ // TODO(zxu): Once ported to use C++ version of FSTMutationBatchResult, we should be able to
+ // check ackVersion instead, which will be an absl::optional type.
+ FSTAssert(batchResult.docVersions[docKey],
+ @"docVersions should contain every doc in the write.");
+ SnapshotVersion ackVersion = batchResult.docVersions[docKey];
+ if (!doc || SnapshotVersion{doc.version} < ackVersion) {
doc = [batch applyTo:doc documentKey:docKey mutationBatchResult:batchResult];
if (!doc) {
FSTAssert(!remoteDoc, @"Mutation batch %@ applied to document %@ resulted in nil.", batch,
diff --git a/Firestore/Source/Local/FSTMemoryQueryCache.mm b/Firestore/Source/Local/FSTMemoryQueryCache.mm
index 18d14f2..57c2703 100644
--- a/Firestore/Source/Local/FSTMemoryQueryCache.mm
+++ b/Firestore/Source/Local/FSTMemoryQueryCache.mm
@@ -16,12 +16,16 @@
#import "Firestore/Source/Local/FSTMemoryQueryCache.h"
+#include <utility>
+
#import "Firestore/Source/Core/FSTQuery.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
#import "Firestore/Source/Local/FSTQueryData.h"
#import "Firestore/Source/Local/FSTReferenceSet.h"
#include "Firestore/core/src/firebase/firestore/model/document_key.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
+
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -38,18 +42,18 @@ NS_ASSUME_NONNULL_BEGIN
@property(nonatomic, assign) FSTListenSequenceNumber highestListenSequenceNumber;
-/** The last received snapshot version. */
-@property(nonatomic, strong) FSTSnapshotVersion *lastRemoteSnapshotVersion;
-
@end
-@implementation FSTMemoryQueryCache
+@implementation FSTMemoryQueryCache {
+ /** The last received snapshot version. */
+ SnapshotVersion _lastRemoteSnapshotVersion;
+}
- (instancetype)init {
if (self = [super init]) {
_queries = [NSMutableDictionary dictionary];
_references = [[FSTReferenceSet alloc] init];
- _lastRemoteSnapshotVersion = [FSTSnapshotVersion noVersion];
+ _lastRemoteSnapshotVersion = SnapshotVersion::None();
}
return self;
}
@@ -69,14 +73,13 @@ NS_ASSUME_NONNULL_BEGIN
return _highestListenSequenceNumber;
}
-/*- (FSTSnapshotVersion *)lastRemoteSnapshotVersion {
+- (const SnapshotVersion &)lastRemoteSnapshotVersion {
return _lastRemoteSnapshotVersion;
}
-- (void)setLastRemoteSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion
- group:(FSTWriteGroup *)group {
- _lastRemoteSnapshotVersion = snapshotVersion;
-}*/
+- (void)setLastRemoteSnapshotVersion:(SnapshotVersion)snapshotVersion {
+ _lastRemoteSnapshotVersion = std::move(snapshotVersion);
+}
- (void)addQueryData:(FSTQueryData *)queryData {
self.queries[queryData.query] = queryData;
diff --git a/Firestore/Source/Local/FSTQueryCache.h b/Firestore/Source/Local/FSTQueryCache.h
index d797d49..de41dd7 100644
--- a/Firestore/Source/Local/FSTQueryCache.h
+++ b/Firestore/Source/Local/FSTQueryCache.h
@@ -20,11 +20,12 @@
#import "Firestore/Source/Local/FSTGarbageCollector.h"
#import "Firestore/Source/Model/FSTDocumentKeySet.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
+
@class FSTDocumentSet;
@class FSTMaybeDocument;
@class FSTQuery;
@class FSTQueryData;
-@class FSTSnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -61,7 +62,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* This is updated whenever our we get a TargetChange with a read_time and empty target_ids.
*/
-- (FSTSnapshotVersion *)lastRemoteSnapshotVersion;
+- (const firebase::firestore::model::SnapshotVersion &)lastRemoteSnapshotVersion;
/**
* Set the snapshot version representing the last consistent snapshot received from the backend.
@@ -69,7 +70,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @param snapshotVersion The new snapshot version.
*/
-- (void)setLastRemoteSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion;
+- (void)setLastRemoteSnapshotVersion:(firebase::firestore::model::SnapshotVersion)snapshotVersion;
/**
* Adds an entry in the cache.
diff --git a/Firestore/Source/Local/FSTQueryData.h b/Firestore/Source/Local/FSTQueryData.h
index 5db2de6..d2dacd6 100644
--- a/Firestore/Source/Local/FSTQueryData.h
+++ b/Firestore/Source/Local/FSTQueryData.h
@@ -18,8 +18,9 @@
#import "Firestore/Source/Core/FSTTypes.h"
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
+
@class FSTQuery;
-@class FSTSnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
@@ -42,7 +43,7 @@ typedef NS_ENUM(NSInteger, FSTQueryPurpose) {
targetID:(FSTTargetID)targetID
listenSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
purpose:(FSTQueryPurpose)purpose
- snapshotVersion:(FSTSnapshotVersion *)snapshotVersion
+ snapshotVersion:(firebase::firestore::model::SnapshotVersion)snapshotVersion
resumeToken:(NSData *)resumeToken NS_DESIGNATED_INITIALIZER;
/** Convenience initializer for use when creating an FSTQueryData for the first time. */
@@ -54,9 +55,13 @@ typedef NS_ENUM(NSInteger, FSTQueryPurpose) {
- (instancetype)init NS_UNAVAILABLE;
/** Creates a new query data instance with an updated snapshot version and resume token. */
-- (instancetype)queryDataByReplacingSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion
+- (instancetype)queryDataByReplacingSnapshotVersion:
+ (firebase::firestore::model::SnapshotVersion)snapshotVersion
resumeToken:(NSData *)resumeToken;
+/** The latest snapshot version seen for this target. */
+- (const firebase::firestore::model::SnapshotVersion &)snapshotVersion;
+
/** The query being listened to. */
@property(nonatomic, strong, readonly) FSTQuery *query;
@@ -71,9 +76,6 @@ typedef NS_ENUM(NSInteger, FSTQueryPurpose) {
/** The purpose of the query. */
@property(nonatomic, assign, readonly) FSTQueryPurpose purpose;
-/** The latest snapshot version seen for this target. */
-@property(nonatomic, strong, readonly) FSTSnapshotVersion *snapshotVersion;
-
/**
* An opaque, server-assigned token that allows watching a query to be resumed after disconnecting
* without retransmitting all the data that matches the query. The resume token essentially
diff --git a/Firestore/Source/Local/FSTQueryData.mm b/Firestore/Source/Local/FSTQueryData.mm
index 6bb716a..456d42a 100644
--- a/Firestore/Source/Local/FSTQueryData.mm
+++ b/Firestore/Source/Local/FSTQueryData.mm
@@ -16,18 +16,25 @@
#import "Firestore/Source/Local/FSTQueryData.h"
+#include <utility>
+
#import "Firestore/Source/Core/FSTQuery.h"
-#import "Firestore/Source/Core/FSTSnapshotVersion.h"
+
+#include "Firestore/core/src/firebase/firestore/model/snapshot_version.h"
+
+using firebase::firestore::model::SnapshotVersion;
NS_ASSUME_NONNULL_BEGIN
-@implementation FSTQueryData
+@implementation FSTQueryData {
+ SnapshotVersion _snapshotVersion;
+}
- (instancetype)initWithQuery:(FSTQuery *)query
targetID:(FSTTargetID)targetID
listenSequenceNumber:(FSTListenSequenceNumber)sequenceNumber
purpose:(FSTQueryPurpose)purpose
- snapshotVersion:(FSTSnapshotVersion *)snapshotVersion
+ snapshotVersion:(SnapshotVersion)snapshotVersion
resumeToken:(NSData *)resumeToken {
self = [super init];
if (self) {
@@ -35,7 +42,7 @@ NS_ASSUME_NONNULL_BEGIN
_targetID = targetID;
_sequenceNumber = sequenceNumber;
_purpose = purpose;
- _snapshotVersion = snapshotVersion;
+ _snapshotVersion = std::move(snapshotVersion);
_resumeToken = [resumeToken copy];
}
return self;
@@ -49,10 +56,14 @@ NS_ASSUME_NONNULL_BEGIN
targetID:targetID
listenSequenceNumber:sequenceNumber
purpose:purpose
- snapshotVersion:[FSTSnapshotVersion noVersion]
+ snapshotVersion:SnapshotVersion::None()
resumeToken:[NSData data]];
}
+- (const firebase::firestore::model::SnapshotVersion &)snapshotVersion {
+ return _snapshotVersion;
+}
+
- (BOOL)isEqual:(id)object {
if (self == object) {
return YES;
@@ -78,18 +89,18 @@ NS_ASSUME_NONNULL_BEGIN
- (NSString *)description {
return [NSString
- stringWithFormat:@"<FSTQueryData: query:%@ target:%d purpose:%lu version:%@ resumeToken:%@)>",
- self.query, self.targetID, (unsigned long)self.purpose, self.snapshotVersion,
- self.resumeToken];
+ stringWithFormat:@"<FSTQueryData: query:%@ target:%d purpose:%lu version:%s resumeToken:%@)>",
+ self.query, self.targetID, (unsigned long)self.purpose,
+ self.snapshotVersion.timestamp().ToString().c_str(), self.resumeToken];
}
-- (instancetype)queryDataByReplacingSnapshotVersion:(FSTSnapshotVersion *)snapshotVersion
+- (instancetype)queryDataByReplacingSnapshotVersion:(SnapshotVersion)snapshotVersion
resumeToken:(NSData *)resumeToken {
return [[FSTQueryData alloc] initWithQuery:self.query
targetID:self.targetID
listenSequenceNumber:self.sequenceNumber
purpose:self.purpose
- snapshotVersion:snapshotVersion
+ snapshotVersion:std::move(snapshotVersion)
resumeToken:resumeToken];
}