@@ -206,16 +206,52 @@ FieldValue FieldValueInternal::IntegerIncrement(std::int64_t by_value) {
206
206
FieldValue FieldValueInternal::DoubleIncrement (double by_value) {
207
207
Message<google_firestore_v1_Value> value;
208
208
value->which_value_type = google_firestore_v1_Value_double_value_tag;
209
- value->integer_value = by_value;
209
+ value->double_value = by_value;
210
210
return MakePublic (
211
211
FieldValueInternal{Type::kIncrementDouble , std::move (value)});
212
212
}
213
213
214
214
// Equality operator
215
215
216
216
bool operator ==(const FieldValueInternal& lhs, const FieldValueInternal& rhs) {
217
- return *absl::get<SharedMessage<google_firestore_v1_Value>>(lhs.value_ ) ==
218
- *absl::get<SharedMessage<google_firestore_v1_Value>>(rhs.value_ );
217
+ using ArrayT = FieldValueInternal::ArrayT;
218
+ using MapT = FieldValueInternal::MapT;
219
+
220
+ auto type = lhs.type ();
221
+ if (type != rhs.type ()) {
222
+ return false ;
223
+ }
224
+
225
+ switch (type) {
226
+ case Type::kNull :
227
+ case Type::kBoolean :
228
+ case Type::kInteger :
229
+ case Type::kDouble :
230
+ case Type::kTimestamp :
231
+ case Type::kString :
232
+ case Type::kBlob :
233
+ case Type::kGeoPoint :
234
+ // Sentinels
235
+ case Type::kIncrementDouble :
236
+ case Type::kIncrementInteger :
237
+ case Type::kDelete :
238
+ case Type::kServerTimestamp :
239
+ return *absl::get <
240
+ SharedMessage<google_firestore_v1_Value>(lhs.value_ ) ==
241
+ *absl::get < SharedMessage<google_firestore_v1_Value>(rhs.value_ );
242
+
243
+ case Type::kReference :
244
+ return absl::get<DocumentReference>(lhs.value_ ) ==
245
+ absl::get<DocumentReference>(rhs.value_ );
246
+
247
+ case Type::kArray :
248
+ case Type::kArrayRemove :
249
+ case Type::kArrayUnion :
250
+ return absl::get<ArrayT>(lhs.value_ ) == absl::get<ArrayT>(rhs.value_ );
251
+
252
+ case Type::kMap :
253
+ return absl::get<MapT>(lhs.value_ ) == absl::get<MapT>(rhs.value_ );
254
+ }
219
255
}
220
256
221
257
std::string Describe (Type type) {
0 commit comments