From 920cfbfa998ca9d04cce5f7731aced7e950a3477 Mon Sep 17 00:00:00 2001 From: rsgowman Date: Fri, 13 Jul 2018 16:22:07 -0400 Subject: Initial (incomplete) implementation of f:f:core::Filter (#1495) And RelationFilter subclass. Used to implement the next step in core::Query. --- .../test/firebase/firestore/testutil/testutil.h | 40 ++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'Firestore/core/test/firebase/firestore/testutil/testutil.h') diff --git a/Firestore/core/test/firebase/firestore/testutil/testutil.h b/Firestore/core/test/firebase/firestore/testutil/testutil.h index c470250..f13c1b7 100644 --- a/Firestore/core/test/firebase/firestore/testutil/testutil.h +++ b/Firestore/core/test/firebase/firestore/testutil/testutil.h @@ -19,14 +19,21 @@ #include // NOLINT(build/c++11) #include +#include +#include +#include #include "Firestore/core/include/firebase/firestore/timestamp.h" +#include "Firestore/core/src/firebase/firestore/core/relation_filter.h" #include "Firestore/core/src/firebase/firestore/model/document.h" #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/field_value.h" #include "Firestore/core/src/firebase/firestore/model/no_document.h" #include "Firestore/core/src/firebase/firestore/model/resource_path.h" #include "Firestore/core/src/firebase/firestore/model/snapshot_version.h" +#include "Firestore/core/src/firebase/firestore/util/hard_assert.h" +#include "absl/memory/memory.h" #include "absl/strings/string_view.h" namespace firebase { @@ -59,8 +66,10 @@ inline model::SnapshotVersion Version(int64_t version) { return model::SnapshotVersion{Timestamp::FromTimePoint(timepoint)}; } -inline model::Document Doc(absl::string_view key, int64_t version = 0) { - return model::Document{model::FieldValue::ObjectValueFromMap({}), Key(key), +inline model::Document Doc(absl::string_view key, + int64_t version = 0, + const model::ObjectValue::Map& data = {}) { + return model::Document{model::FieldValue::ObjectValueFromMap(data), Key(key), Version(version), /* has_local_mutations= */ false}; } @@ -69,6 +78,33 @@ inline model::NoDocument DeletedDoc(absl::string_view key, int64_t version) { return model::NoDocument{Key(key), Version(version)}; } +inline core::RelationFilter::Operator OperatorFromString(absl::string_view s) { + if (s == "<") + return core::RelationFilter::Operator::LessThan; + else if (s == "<=") + return core::RelationFilter::Operator::LessThanOrEqual; + else if (s == "==") + return core::RelationFilter::Operator::Equal; + else if (s == ">") + return core::RelationFilter::Operator::GreaterThan; + else if (s == ">=") + return core::RelationFilter::Operator::GreaterThanOrEqual; + HARD_FAIL("Unknown operator: %s", s); +} + +inline std::shared_ptr Filter(absl::string_view key, + absl::string_view op, + model::FieldValue value) { + return core::Filter::Create(Field(key), OperatorFromString(op), + std::move(value)); +} + +inline std::shared_ptr Filter(absl::string_view key, + absl::string_view op, + const std::string& value) { + return Filter(key, op, model::FieldValue::StringValue(value)); +} + // Add a non-inline function to make this library buildable. // TODO(zxu123): remove once there is non-inline function. void dummy(); -- cgit v1.2.3