File tree Expand file tree Collapse file tree 7 files changed +24
-13
lines changed Expand file tree Collapse file tree 7 files changed +24
-13
lines changed Original file line number Diff line number Diff line change @@ -138,6 +138,10 @@ class CompositeFilter : public Filter {
138
138
139
139
const model::FieldPath* GetFirstInequalityField () const override ;
140
140
141
+ std::vector<Filter> GetFilters () const override {
142
+ return filters ();
143
+ }
144
+
141
145
/* *
142
146
* Performs a depth-first search to find and return the first FieldFilter in
143
147
* the composite filter that satisfies the condition. Returns nullptr if
Original file line number Diff line number Diff line change @@ -131,6 +131,12 @@ const std::vector<FieldFilter>& FieldFilter::Rep::GetFlattenedFilters() const {
131
131
return Filter::Rep::memoized_flattened_filters_;
132
132
}
133
133
134
+ std::vector<Filter> FieldFilter::Rep::GetFilters () const {
135
+ // This is the only filter within this object, so we return a list of size
136
+ // one.
137
+ return std::vector<Filter>{FieldFilter (std::make_shared<const Rep>(*this ))};
138
+ }
139
+
134
140
FieldFilter::Rep::Rep (FieldPath field,
135
141
Operator op,
136
142
SharedMessage<google_firestore_v1_Value> value_rhs)
Original file line number Diff line number Diff line change @@ -121,6 +121,8 @@ class FieldFilter : public Filter {
121
121
122
122
const std::vector<FieldFilter>& GetFlattenedFilters () const override ;
123
123
124
+ std::vector<Filter> GetFilters () const override ;
125
+
124
126
protected:
125
127
/* *
126
128
* Creates a new filter that compares fields and values. Only intended to be
Original file line number Diff line number Diff line change @@ -110,6 +110,13 @@ class Filter {
110
110
return rep_->GetFlattenedFilters ();
111
111
}
112
112
113
+ /* *
114
+ * Returns a list of all filters that are contained within this filter
115
+ */
116
+ std::vector<Filter> GetFilters () const {
117
+ return rep_->GetFilters ();
118
+ }
119
+
113
120
friend bool operator ==(const Filter& lhs, const Filter& rhs);
114
121
115
122
protected:
@@ -150,6 +157,8 @@ class Filter {
150
157
151
158
virtual const std::vector<FieldFilter>& GetFlattenedFilters () const = 0;
152
159
160
+ virtual std::vector<Filter> GetFilters () const = 0;
161
+
153
162
/* *
154
163
* Memoized list of all field filters that can be found by
155
164
* traversing the tree of filters contained in this composite filter.
Original file line number Diff line number Diff line change @@ -957,18 +957,9 @@ std::vector<Target> LevelDbIndexManager::GetSubTargets(const Target& target) {
957
957
std::vector<Filter> dnf = LogicUtils::GetDnfTerms (CompositeFilter::Create (
958
958
std::move (filters), CompositeFilter::Operator::And));
959
959
960
- // TODO(orquery): Add getFilters() in Filter class.
961
960
for (const Filter& term : dnf) {
962
- std::vector<Filter> subfilters;
963
- if (term.IsAFieldFilter ()) {
964
- subfilters.push_back (term);
965
- } else if (term.IsACompositeFilter ()) {
966
- for (const auto & filter : (CompositeFilter (term)).filters ()) {
967
- subfilters.push_back (filter);
968
- }
969
- }
970
961
subtargets.push_back ({target.path (), target.collection_group (),
971
- std::move (subfilters ), target.order_bys (),
962
+ term. GetFilters ( ), target.order_bys (),
972
963
target.limit (), target.start_at (),
973
964
target.end_at ()});
974
965
}
Original file line number Diff line number Diff line change @@ -908,7 +908,7 @@ google_firestore_v1_StructuredQuery_Filter Serializer::EncodeUnaryOrFieldFilter(
908
908
google_firestore_v1_StructuredQuery_Filter Serializer::EncodeCompositeFilter (
909
909
const core::CompositeFilter& filter) const {
910
910
// If there's only one filter in the composite filter, use it directly.
911
- if (filter.filters ().size () == 1u ) {
911
+ if (filter.filters ().size () == 1U ) {
912
912
return EncodeFilter (filter.filters ()[0 ]);
913
913
}
914
914
Original file line number Diff line number Diff line change @@ -270,8 +270,7 @@ std::vector<core::Filter> LogicUtils::GetDnfTerms(
270
270
return {std::move (result)};
271
271
}
272
272
273
- const CompositeFilter composite_filter (result);
274
- return composite_filter.filters ();
273
+ return result.GetFilters ();
275
274
}
276
275
277
276
} // namespace util
You can’t perform that action at this time.
0 commit comments