Skip to content

Commit a986e4d

Browse files
authored
OR Query (#783)
* Initial implementation of OR Query * Add documentation * Add documentation * Add tests * REview feedback changes * Initial implementation of OR Query * Add documentation * Add documentation * Add tests * REview feedback changes * Separate out AND/OR Query tests that require composite index. Only run these tests against emulator, that does not require index. * Separate out AND/OR Query tests that require composite index. Only run these tests against emulator, that does not require index.
1 parent fa6251a commit a986e4d

File tree

7 files changed

+661
-0
lines changed

7 files changed

+661
-0
lines changed

firestore/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ set(firebase_firestore_src_documented
3333
src/DocumentSnapshot.cs
3434
src/FieldPath.cs
3535
src/FieldValue.cs
36+
src/Filter.cs
3637
src/FirebaseFirestore.cs
3738
src/FirebaseFirestoreSettings.cs
3839
src/FirestoreDataAttribute.cs

firestore/src/Filter.cs

Lines changed: 325 additions & 0 deletions
Large diffs are not rendered by default.

firestore/src/Query.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,17 @@ public AggregateQuery Count {
7373
}
7474
}
7575

76+
/// <summary>
77+
/// Creates and returns a new Query with the additional filter.
78+
/// </summary>
79+
/// <param name="filter">The new filter to apply to the existing query.</param>
80+
/// <returns>
81+
/// The created Query.
82+
/// </returns>
83+
public Query Where(Filter filter) {
84+
Preconditions.CheckNotNull(filter, nameof(filter));
85+
return new Query(_proxy.Where(filter.Proxy), Firestore);
86+
}
7687

7788
/// <summary>
7889
/// Creates and returns a new <c>Query</c> with the additional filter that documents must

firestore/src/swig/firestore.i

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,20 @@ SWIG_CREATE_PROXY(firebase::firestore::WriteBatch);
354354
SWIG_CREATE_PROXY(firebase::firestore::MetadataChanges)
355355
%include "firestore/src/include/firebase/firestore/metadata_changes.h"
356356
357+
// Generate a C# wrapper for Filter. Must be above Query.
358+
SWIG_CREATE_PROXY(firebase::firestore::Filter);
359+
%rename("%s") firebase::firestore::Filter::ArrayContains;
360+
%rename("%s") firebase::firestore::Filter::EqualTo;
361+
%rename("%s") firebase::firestore::Filter::NotEqualTo;
362+
%rename("%s") firebase::firestore::Filter::GreaterThan;
363+
%rename("%s") firebase::firestore::Filter::GreaterThanOrEqualTo;
364+
%rename("%s") firebase::firestore::Filter::LessThan;
365+
%rename("%s") firebase::firestore::Filter::LessThanOrEqualTo;
366+
%include "firestore/src/include/firebase/firestore/filter.h"
367+
357368
// Generate a C# wrapper for Query and Query::Direction. Must be above CollectionReference.
358369
SWIG_CREATE_PROXY(firebase::firestore::Query);
370+
%rename("%s") firebase::firestore::Query::Where;
359371
%rename("%s") firebase::firestore::Query::WhereEqualTo;
360372
%rename("%s") firebase::firestore::Query::WhereNotEqualTo;
361373
%rename("%s") firebase::firestore::Query::WhereLessThan;
@@ -541,6 +553,7 @@ namespace firestore {
541553
%template(DocumentSnapshotVector) csharp::Vector<DocumentSnapshot>;
542554
%template(FieldPathVector) csharp::Vector<FieldPath>;
543555
%template(FieldValueVector) csharp::Vector<FieldValue>;
556+
%template(FilterVector) csharp::Vector<Filter>;
544557
545558
} // namespace firestore
546559
} // namespace firebase

firestore/src/swig/map.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "firestore/src/include/firebase/firestore/document_snapshot.h"
2727
#include "firestore/src/include/firebase/firestore/field_path.h"
2828
#include "firestore/src/include/firebase/firestore/field_value.h"
29+
#include "firestore/src/include/firebase/firestore/filter.h"
2930
#include "firestore/src/include/firebase/firestore/query.h"
3031
#include "firestore/src/include/firebase/firestore/set_options.h"
3132
#include "firestore/src/include/firebase/firestore/write_batch.h"
@@ -176,6 +177,30 @@ inline Future<void> DocumentReferenceUpdate(
176177
return doc.Update(wrapper.Unwrap());
177178
}
178179

180+
inline Filter FilterArrayContainsAny(const std::string& field, const FieldValue& values) {
181+
return Filter::ArrayContainsAny(field, values.array_value());
182+
}
183+
184+
inline Filter FilterArrayContainsAny(const FieldPath& field, const FieldValue& values) {
185+
return Filter::ArrayContainsAny(field, values.array_value());
186+
}
187+
188+
inline Filter FilterIn(const std::string& field, const FieldValue& values) {
189+
return Filter::In(field, values.array_value());
190+
}
191+
192+
inline Filter FilterIn(const FieldPath& field, const FieldValue& values) {
193+
return Filter::In(field, values.array_value());
194+
}
195+
196+
inline Filter FilterNotIn(const std::string& field, const FieldValue& values) {
197+
return Filter::NotIn(field, values.array_value());
198+
}
199+
200+
inline Filter FilterNotIn(const FieldPath& field, const FieldValue& values) {
201+
return Filter::NotIn(field, values.array_value());
202+
}
203+
179204
inline Query QueryWhereArrayContainsAny(Query& query,
180205
const std::string& field,
181206
const FieldValue& values) {

firestore/src/swig/vector.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,14 @@ inline FieldValue FieldValueArrayRemove(const Vector<FieldValue>& wrapper) {
8888
return FieldValue::ArrayRemove(wrapper.Unwrap());
8989
}
9090

91+
inline Filter FilterAnd(const Vector<Filter>& filters) {
92+
return Filter::And(filters.Unwrap());
93+
}
94+
95+
inline Filter FilterOr(const Vector<Filter>& filters) {
96+
return Filter::Or(filters.Unwrap());
97+
}
98+
9199
inline Vector<DocumentSnapshot> QuerySnapshotDocuments(
92100
const QuerySnapshot& snapshot) {
93101
return Vector<DocumentSnapshot>::Wrap(snapshot.documents());

0 commit comments

Comments
 (0)