addFilter method
Add a filter or filter group. Returns this query for chaining.
Consecutive Filter calls are AND-ed on the same branch. OrFilter adds each child as a separate OR branch. AndFilter adds one OR branch with AND-ed filters.
Implementation
NSQuery addFilter(QueryFilter filter) {
_checkNotDisposed();
if (filter is Filter) {
_ensureCurrentBranch();
_applyFilter(_currentBranch!, filter);
_recordFilter(filter);
} else if (filter is AndFilter) {
_commitPendingBranch();
final branch = nosqueel.ns_query_branch_create(_query);
for (final child in filter.filters) {
_applyFilter(branch, child);
}
_orBranches.add(List<Filter>.unmodifiable(filter.filters));
_currentBranch = branch;
_pendingBranch = null;
} else if (filter is OrFilter) {
_commitPendingBranch();
for (final child in filter.filters) {
if (child is Filter) {
final branch = nosqueel.ns_query_branch_create(_query);
_applyFilter(branch, child);
_orBranches.add(List<Filter>.unmodifiable([child]));
} else {
addFilter(child);
}
}
_currentBranch = null;
_pendingBranch = null;
}
return this;
}