Skip to content

Commit c433f48

Browse files
Add Query.MatchesAllDocuments() (#3990)
1 parent 45b445c commit c433f48

File tree

3 files changed

+36
-0
lines changed

3 files changed

+36
-0
lines changed

Firestore/core/src/firebase/firestore/core/query.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ bool Query::IsDocumentQuery() const {
5757
filters_.empty();
5858
}
5959

60+
bool Query::MatchesAllDocuments() const {
61+
return filters_.empty() && limit_ == kNoLimit && !start_at_ && !end_at_ &&
62+
(explicit_order_bys_.empty() ||
63+
(explicit_order_bys_.size() == 1 &&
64+
explicit_order_bys_.front().field().IsKeyFieldPath()));
65+
}
66+
6067
const FieldPath* Query::InequalityFilterField() const {
6168
for (const auto& filter : filters_) {
6269
if (filter.IsInequality()) {

Firestore/core/src/firebase/firestore/core/query.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,12 @@ class Query {
9999
return collection_group_ != nullptr;
100100
}
101101

102+
/**
103+
* Returns true if this query does not specify any query constraints that
104+
* could remove results.
105+
*/
106+
bool MatchesAllDocuments() const;
107+
102108
/** The filters on the documents returned by the query. */
103109
const FilterList& filters() const {
104110
return filters_;

Firestore/core/test/firebase/firestore/core/query_test.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -708,6 +708,29 @@ TEST(QueryTest, CanonicalIDs) {
708708
"desc|lb:b:OAK1000|ub:a:SFO2000"));
709709
}
710710

711+
TEST(QueryTest, MatchesAllDocuments) {
712+
auto baseQuery = testutil::Query("coll");
713+
EXPECT_TRUE(baseQuery.MatchesAllDocuments());
714+
715+
auto query = baseQuery.AddingOrderBy(OrderBy("__name__"));
716+
EXPECT_TRUE(query.MatchesAllDocuments());
717+
718+
query = baseQuery.AddingOrderBy(OrderBy("foo"));
719+
EXPECT_FALSE(query.MatchesAllDocuments());
720+
721+
query = baseQuery.AddingFilter(Filter("foo", "==", "bar"));
722+
EXPECT_FALSE(query.MatchesAllDocuments());
723+
724+
query = baseQuery.WithLimit(1);
725+
EXPECT_FALSE(query.MatchesAllDocuments());
726+
727+
query = baseQuery.StartingAt(Bound({Value("SFO")}, true));
728+
EXPECT_FALSE(query.MatchesAllDocuments());
729+
730+
query = baseQuery.StartingAt(Bound({Value("OAK")}, true));
731+
EXPECT_FALSE(query.MatchesAllDocuments());
732+
}
733+
711734
} // namespace core
712735
} // namespace firestore
713736
} // namespace firebase

0 commit comments

Comments
 (0)