Skip to content

Commit 016fd12

Browse files
Add QueryData.with() helpers (#687)
1 parent 42ec7f1 commit 016fd12

File tree

9 files changed

+59
-77
lines changed

9 files changed

+59
-77
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/local/LocalStore.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -359,7 +359,9 @@ public ImmutableSortedMap<DocumentKey, MaybeDocument> applyRemoteEvent(RemoteEve
359359
if (!resumeToken.isEmpty()) {
360360
QueryData oldQueryData = queryData;
361361
queryData =
362-
queryData.copy(remoteEvent.getSnapshotVersion(), resumeToken, sequenceNumber);
362+
queryData
363+
.withResumeToken(resumeToken, remoteEvent.getSnapshotVersion())
364+
.withSequenceNumber(sequenceNumber);
363365
targetIds.put(boxedTargetId, queryData);
364366

365367
if (shouldPersistQueryData(oldQueryData, queryData, change)) {
@@ -488,14 +490,7 @@ public void notifyLocalViewChanges(List<LocalViewChanges> viewChanges) {
488490
// Advance the last limbo free snapshot version
489491
SnapshotVersion lastLimboFreeSnapshotVersion = queryData.getSnapshotVersion();
490492
QueryData updatedQueryData =
491-
new QueryData(
492-
queryData.getQuery(),
493-
queryData.getTargetId(),
494-
queryData.getSequenceNumber(),
495-
queryData.getPurpose(),
496-
queryData.getSnapshotVersion(),
497-
lastLimboFreeSnapshotVersion,
498-
queryData.getResumeToken());
493+
queryData.withLastLimboFreeSnapshotVersion(lastLimboFreeSnapshotVersion);
499494
targetIds.put(targetId, updatedQueryData);
500495
}
501496
}

firebase-firestore/src/main/java/com/google/firebase/firestore/local/MemoryLruReferenceDelegate.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,7 @@ public void removeMutationReference(DocumentKey key) {
135135

136136
@Override
137137
public void removeTarget(QueryData queryData) {
138-
QueryData updated =
139-
queryData.copy(
140-
queryData.getSnapshotVersion(), queryData.getResumeToken(), getCurrentSequenceNumber());
138+
QueryData updated = queryData.withSequenceNumber(getCurrentSequenceNumber());
141139
persistence.getQueryCache().updateQueryData(updated);
142140
}
143141

firebase-firestore/src/main/java/com/google/firebase/firestore/local/QueryData.java

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public final class QueryData {
4646
* after disconnecting without retransmitting all the data that matches the query. The resume
4747
* token essentially identifies a point in time from which the server should resume sending
4848
*/
49-
public QueryData(
49+
QueryData(
5050
Query query,
5151
int targetId,
5252
long sequenceNumber,
@@ -75,6 +75,42 @@ public QueryData(Query query, int targetId, long sequenceNumber, QueryPurpose pu
7575
WatchStream.EMPTY_RESUME_TOKEN);
7676
}
7777

78+
/** Creates a new query data instance with an updated sequence number. */
79+
public QueryData withSequenceNumber(long sequenceNumber) {
80+
return new QueryData(
81+
query,
82+
targetId,
83+
sequenceNumber,
84+
purpose,
85+
snapshotVersion,
86+
lastLimboFreeSnapshotVersion,
87+
resumeToken);
88+
}
89+
90+
/** Creates a new query data instance with an updated resume token and snapshot version. */
91+
public QueryData withResumeToken(ByteString resumeToken, SnapshotVersion snapshotVersion) {
92+
return new QueryData(
93+
query,
94+
targetId,
95+
sequenceNumber,
96+
purpose,
97+
snapshotVersion,
98+
lastLimboFreeSnapshotVersion,
99+
resumeToken);
100+
}
101+
102+
/** Creates a new query data instance with an updated last limbo free snapshot version number. */
103+
public QueryData withLastLimboFreeSnapshotVersion(SnapshotVersion lastLimboFreeSnapshotVersion) {
104+
return new QueryData(
105+
query,
106+
targetId,
107+
sequenceNumber,
108+
purpose,
109+
snapshotVersion,
110+
lastLimboFreeSnapshotVersion,
111+
resumeToken);
112+
}
113+
78114
public Query getQuery() {
79115
return query;
80116
}
@@ -156,17 +192,4 @@ public String toString() {
156192
+ resumeToken
157193
+ '}';
158194
}
159-
160-
/** Creates a new query data instance with an updated snapshot version and resume token. */
161-
public QueryData copy(
162-
SnapshotVersion snapshotVersion, ByteString resumeToken, long sequenceNumber) {
163-
return new QueryData(
164-
query,
165-
targetId,
166-
sequenceNumber,
167-
purpose,
168-
snapshotVersion,
169-
lastLimboFreeSnapshotVersion,
170-
resumeToken);
171-
}
172195
}

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteLruReferenceDelegate.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,7 @@ public int removeOrphanedDocuments(long upperBound) {
167167

168168
@Override
169169
public void removeTarget(QueryData queryData) {
170-
QueryData updated =
171-
queryData.copy(
172-
queryData.getSnapshotVersion(), queryData.getResumeToken(), getCurrentSequenceNumber());
170+
QueryData updated = queryData.withSequenceNumber(getCurrentSequenceNumber());
173171
persistence.getQueryCache().updateQueryData(updated);
174172
}
175173

firebase-firestore/src/main/java/com/google/firebase/firestore/remote/RemoteStore.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -504,9 +504,7 @@ private void raiseWatchSnapshot(SnapshotVersion snapshotVersion) {
504504
// A watched target might have been removed already.
505505
if (queryData != null) {
506506
this.listenTargets.put(
507-
targetId,
508-
queryData.copy(
509-
snapshotVersion, targetChange.getResumeToken(), queryData.getSequenceNumber()));
507+
targetId, queryData.withResumeToken(targetChange.getResumeToken(), snapshotVersion));
510508
}
511509
}
512510
}
@@ -519,9 +517,7 @@ private void raiseWatchSnapshot(SnapshotVersion snapshotVersion) {
519517
if (queryData != null) {
520518
// Clear the resume token for the query, since we're in a known mismatch state.
521519
this.listenTargets.put(
522-
targetId,
523-
queryData.copy(
524-
queryData.getSnapshotVersion(), ByteString.EMPTY, queryData.getSequenceNumber()));
520+
targetId, queryData.withResumeToken(ByteString.EMPTY, queryData.getSnapshotVersion()));
525521

526522
// Cause a hard reset by unwatching and rewatching immediately, but deliberately don't send
527523
// a resume token so that we get a full update.

firebase-firestore/src/test/java/com/google/firebase/firestore/local/LruGarbageCollectorTestCase.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ private void updateTargetInTransaction(QueryData queryData) {
109109
SnapshotVersion version = version(2);
110110
ByteString resumeToken = resumeToken(2);
111111
QueryData updated =
112-
queryData.copy(
113-
version, resumeToken, persistence.getReferenceDelegate().getCurrentSequenceNumber());
112+
queryData
113+
.withResumeToken(resumeToken, version)
114+
.withSequenceNumber(persistence.getReferenceDelegate().getCurrentSequenceNumber());
114115
queryCache.updateQueryData(updated);
115116
}
116117

firebase-firestore/src/test/java/com/google/firebase/firestore/remote/MockDatastore.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,7 @@ public void watchQuery(QueryData queryData) {
9090
+ ")");
9191
// Snapshot version is ignored on the wire
9292
QueryData sentQueryData =
93-
queryData.copy(
94-
SnapshotVersion.NONE, queryData.getResumeToken(), queryData.getSequenceNumber());
93+
queryData.withResumeToken(queryData.getResumeToken(), SnapshotVersion.NONE);
9594
watchStreamRequestCount += 1;
9695
this.activeTargets.put(queryData.getTargetId(), sentQueryData);
9796
}

firebase-firestore/src/test/java/com/google/firebase/firestore/remote/RemoteSerializerTest.java

Lines changed: 6 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -468,16 +468,7 @@ public void testEncodesListenRequestLabels() {
468468
@Test
469469
public void testEncodesFirstLevelKeyQueries() {
470470
Query q = Query.atPath(ResourcePath.fromString("docs/1"));
471-
Target actual =
472-
serializer.encodeTarget(
473-
new QueryData(
474-
q,
475-
1,
476-
2,
477-
QueryPurpose.LISTEN,
478-
SnapshotVersion.NONE,
479-
SnapshotVersion.NONE,
480-
WatchStream.EMPTY_RESUME_TOKEN));
471+
Target actual = serializer.encodeTarget(new QueryData(q, 1, 2, QueryPurpose.LISTEN));
481472

482473
DocumentsTarget.Builder docs =
483474
DocumentsTarget.newBuilder().addDocuments("projects/p/databases/d/documents/docs/1");
@@ -881,16 +872,10 @@ public void testEncodesBounds() {
881872
@Test
882873
public void testEncodesResumeTokens() {
883874
Query q = Query.atPath(ResourcePath.fromString("docs"));
884-
Target actual =
885-
serializer.encodeTarget(
886-
new QueryData(
887-
q,
888-
1,
889-
2,
890-
QueryPurpose.LISTEN,
891-
SnapshotVersion.NONE,
892-
SnapshotVersion.NONE,
893-
TestUtil.resumeToken(1000)));
875+
QueryData queryData =
876+
new QueryData(q, 1, 2, QueryPurpose.LISTEN)
877+
.withResumeToken(TestUtil.resumeToken(1000), SnapshotVersion.NONE);
878+
Target actual = serializer.encodeTarget(queryData);
894879

895880
StructuredQuery.Builder structuredQueryBuilder =
896881
StructuredQuery.newBuilder()
@@ -917,14 +902,7 @@ public void testEncodesResumeTokens() {
917902
* QueryData, but for the most part we're just testing variations on Query.
918903
*/
919904
private QueryData wrapQueryData(Query query) {
920-
return new QueryData(
921-
query,
922-
1,
923-
2,
924-
QueryPurpose.LISTEN,
925-
SnapshotVersion.NONE,
926-
SnapshotVersion.NONE,
927-
WatchStream.EMPTY_RESUME_TOKEN);
905+
return new QueryData(query, 1, 2, QueryPurpose.LISTEN);
928906
}
929907

930908
@Test

firebase-firestore/src/test/java/com/google/firebase/firestore/spec/SpecTestCase.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -879,16 +879,10 @@ private void validateStateExpectations(@Nullable JSONObject expected) throws JSO
879879
// TODO: populate the purpose of the target once it's possible to encode that in the
880880
// spec tests. For now, hard-code that it's a listen despite the fact that it's not always
881881
// the right value.
882-
expectedActiveTargets.put(
883-
targetId,
884-
new QueryData(
885-
query,
886-
targetId,
887-
ARBITRARY_SEQUENCE_NUMBER,
888-
QueryPurpose.LISTEN,
889-
SnapshotVersion.NONE,
890-
SnapshotVersion.NONE,
891-
ByteString.copyFromUtf8(resumeToken)));
882+
QueryData queryData =
883+
new QueryData(query, targetId, ARBITRARY_SEQUENCE_NUMBER, QueryPurpose.LISTEN)
884+
.withResumeToken(ByteString.copyFromUtf8(resumeToken), SnapshotVersion.NONE);
885+
expectedActiveTargets.put(targetId, queryData);
892886
}
893887
}
894888
}

0 commit comments

Comments
 (0)