addFilter method

NSQuery addFilter(
  1. QueryFilter filter
)

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;
}