Skip to content

Commit 1734230

Browse files
authored
Allow Precondition::IsValidFor to work with nullptr. (#1914)
Required by the Mutation objects.
1 parent 41826d7 commit 1734230

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

Firestore/core/src/firebase/firestore/model/precondition.cc

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,19 @@ Precondition Precondition::None() {
4545
return Precondition{Type::None, SnapshotVersion::None(), false};
4646
}
4747

48-
bool Precondition::IsValidFor(const MaybeDocument& maybe_doc) const {
48+
bool Precondition::IsValidFor(const MaybeDocument* maybe_doc) const {
4949
switch (type_) {
5050
case Type::UpdateTime:
51-
return maybe_doc.type() == MaybeDocument::Type::Document &&
52-
maybe_doc.version() == update_time_;
51+
return maybe_doc != nullptr &&
52+
maybe_doc->type() == MaybeDocument::Type::Document &&
53+
maybe_doc->version() == update_time_;
5354
case Type::Exists:
5455
if (exists_) {
55-
return maybe_doc.type() == MaybeDocument::Type::Document;
56+
return maybe_doc != nullptr &&
57+
maybe_doc->type() == MaybeDocument::Type::Document;
5658
} else {
57-
return maybe_doc.type() == MaybeDocument::Type::NoDocument;
59+
return maybe_doc == nullptr ||
60+
maybe_doc->type() == MaybeDocument::Type::NoDocument;
5861
}
5962
case Type::None:
6063
return true;

Firestore/core/src/firebase/firestore/model/precondition.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class Precondition {
5858
* Returns true if the precondition is valid for the given document (and the
5959
* document is available).
6060
*/
61-
bool IsValidFor(const MaybeDocument& maybe_doc) const;
61+
bool IsValidFor(const MaybeDocument* maybe_doc) const;
6262

6363
/** Returns whether this Precondition represents no precondition. */
6464
bool IsNone() const {

Firestore/core/test/firebase/firestore/model/precondition_test.cc

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ TEST(Precondition, None) {
3535

3636
const NoDocument deleted_doc = testutil::DeletedDoc("foo/doc", 1234567);
3737
const Document doc = testutil::Doc("bar/doc", 7654321);
38-
EXPECT_TRUE(none.IsValidFor(deleted_doc));
39-
EXPECT_TRUE(none.IsValidFor(doc));
38+
EXPECT_TRUE(none.IsValidFor(&deleted_doc));
39+
EXPECT_TRUE(none.IsValidFor(&doc));
40+
EXPECT_TRUE(none.IsValidFor(nullptr));
4041
}
4142

4243
TEST(Precondition, Exists) {
@@ -51,10 +52,12 @@ TEST(Precondition, Exists) {
5152

5253
const NoDocument deleted_doc = testutil::DeletedDoc("foo/doc", 1234567);
5354
const Document doc = testutil::Doc("bar/doc", 7654321);
54-
EXPECT_FALSE(exists.IsValidFor(deleted_doc));
55-
EXPECT_TRUE(exists.IsValidFor(doc));
56-
EXPECT_TRUE(no_exists.IsValidFor(deleted_doc));
57-
EXPECT_FALSE(no_exists.IsValidFor(doc));
55+
EXPECT_FALSE(exists.IsValidFor(&deleted_doc));
56+
EXPECT_TRUE(exists.IsValidFor(&doc));
57+
EXPECT_FALSE(exists.IsValidFor(nullptr));
58+
EXPECT_TRUE(no_exists.IsValidFor(&deleted_doc));
59+
EXPECT_FALSE(no_exists.IsValidFor(&doc));
60+
EXPECT_TRUE(no_exists.IsValidFor(nullptr));
5861
}
5962

6063
TEST(Precondition, UpdateTime) {
@@ -67,9 +70,10 @@ TEST(Precondition, UpdateTime) {
6770
const NoDocument deleted_doc = testutil::DeletedDoc("foo/doc", 1234567);
6871
const Document not_match = testutil::Doc("bar/doc", 7654321);
6972
const Document match = testutil::Doc("baz/doc", 1234567);
70-
EXPECT_FALSE(update_time.IsValidFor(deleted_doc));
71-
EXPECT_FALSE(update_time.IsValidFor(not_match));
72-
EXPECT_TRUE(update_time.IsValidFor(match));
73+
EXPECT_FALSE(update_time.IsValidFor(&deleted_doc));
74+
EXPECT_FALSE(update_time.IsValidFor(&not_match));
75+
EXPECT_TRUE(update_time.IsValidFor(&match));
76+
EXPECT_FALSE(update_time.IsValidFor(nullptr));
7377
}
7478

7579
} // namespace model

0 commit comments

Comments
 (0)