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. --- .../core/src/firebase/firestore/core/query.cc | 24 +++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'Firestore/core/src/firebase/firestore/core/query.cc') diff --git a/Firestore/core/src/firebase/firestore/core/query.cc b/Firestore/core/src/firebase/firestore/core/query.cc index ad0f7a3..0c0a0fd 100644 --- a/Firestore/core/src/firebase/firestore/core/query.cc +++ b/Firestore/core/src/firebase/firestore/core/query.cc @@ -16,8 +16,12 @@ #include "Firestore/core/src/firebase/firestore/core/query.h" +#include + #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/resource_path.h" +#include "Firestore/core/src/firebase/firestore/util/hard_assert.h" namespace firebase { namespace firestore { @@ -41,9 +45,11 @@ bool Query::MatchesPath(const Document& doc) const { } } -bool Query::MatchesFilters(const Document&) const { - // TODO(rsgowman): Implement this correctly. - return true; +bool Query::MatchesFilters(const Document& doc) const { + return std::all_of(filters_.begin(), filters_.end(), + [&](const std::shared_ptr& filter) { + return filter->Matches(doc); + }); } bool Query::MatchesOrderBy(const Document&) const { @@ -56,6 +62,18 @@ bool Query::MatchesBounds(const Document&) const { return true; } +Query Query::Filter(std::shared_ptr filter) const { + HARD_ASSERT(!DocumentKey::IsDocumentKey(path_), + "No filter is allowed for document query"); + + // TODO(rsgowman): ensure only one inequality field + // TODO(rsgowman): ensure first orderby must match inequality field + + std::vector> updated_filters = filters_; + updated_filters.push_back(std::move(filter)); + return Query(path_, std::move(updated_filters)); +} + } // namespace core } // namespace firestore } // namespace firebase -- cgit v1.2.3