Class FilterList


@Public public final class FilterList extends FilterBase
Implementation of Filter that represents an ordered List of Filters which will be evaluated with a specified boolean operator FilterList.Operator.MUST_PASS_ALL (AND) or FilterList.Operator.MUST_PASS_ONE (OR). Since you can use Filter Lists as children of Filter Lists, you can create a hierarchy of filters to be evaluated.
FilterList.Operator.MUST_PASS_ALL evaluates lazily: evaluation stops as soon as one filter does not include the Cell.
FilterList.Operator.MUST_PASS_ONE evaluates non-lazily: all filters are always evaluated.
Defaults to FilterList.Operator.MUST_PASS_ALL.
  • Field Details

  • Constructor Details

    • FilterList

      public FilterList(FilterList.Operator operator, List<Filter> filters)
      Constructor that takes a set of Filters and an operator.
      Parameters:
      operator - Operator to process filter set with.
      filters - Set of row filters.
    • FilterList

      public FilterList(List<Filter> filters)
      Constructor that takes a set of Filters. The default operator MUST_PASS_ALL is assumed. All filters are cloned to internal list.
      Parameters:
      filters - list of filters
    • FilterList

      public FilterList(Filter... filters)
      Constructor that takes a var arg number of Filters. The default operator MUST_PASS_ALL is assumed.
    • FilterList

      public FilterList(FilterList.Operator operator)
      Constructor that takes an operator.
      Parameters:
      operator - Operator to process filter set with.
    • FilterList

      public FilterList(FilterList.Operator operator, Filter... filters)
      Constructor that takes a var arg number of Filters and an operator.
      Parameters:
      operator - Operator to process filter set with.
      filters - Filters to use
  • Method Details

    • getOperator

      Get the operator.
    • getFilters

      public List<Filter> getFilters()
      Get the filters.
    • size

      public int size()
    • addFilter

      public void addFilter(List<Filter> filters)
    • addFilter

      public void addFilter(Filter filter)
      Add a filter.
      Parameters:
      filter - another filter
    • reset

      public void reset() throws IOException
      Description copied from class: FilterBase
      Filters that are purely stateless and do nothing in their reset() methods can inherit this null/empty implementation. Reset the state of the filter between rows. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      reset in class FilterBase
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • filterRowKey

      public boolean filterRowKey(byte[] rowKey, int offset, int length) throws IOException
      Description copied from class: FilterBase
      Filters that do not filter by row key can inherit this implementation that never filters anything. (ie: returns false). Filters a row based on the row key. If this returns true, the entire row will be excluded. If false, each KeyValue in the row will be passed to Filter.filterCell(Cell) below. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterRowKey in class FilterBase
      Parameters:
      rowKey - buffer containing row key
      offset - offset into buffer where row key starts
      length - length of the row key
      Returns:
      true, remove entire row, false, include the row (maybe).
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • filterRowKey

      public boolean filterRowKey(Cell firstRowCell) throws IOException
      Description copied from class: Filter
      Filters a row based on the row key. If this returns true, the entire row will be excluded. If false, each KeyValue in the row will be passed to Filter.filterCell(Cell) below. If Filter.filterAllRemaining() returns true, then Filter.filterRowKey(Cell) should also return true. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterRowKey in class FilterBase
      Parameters:
      firstRowCell - The first cell coming in the new row
      Returns:
      true, remove entire row, false, include the row (maybe).
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • filterAllRemaining

      public boolean filterAllRemaining() throws IOException
      Description copied from class: FilterBase
      Filters that never filter all remaining can inherit this implementation that never stops the filter early. If this returns true, the scan will terminate. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterAllRemaining in class FilterBase
      Returns:
      true to end scan, false to continue.
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • transformCell

      public Cell transformCell(Cell c) throws IOException
      Description copied from class: FilterBase
      By default no transformation takes place Give the filter a chance to transform the passed KeyValue. If the Cell is changed a new Cell object must be returned.
      Overrides:
      transformCell in class FilterBase
      Parameters:
      c - the KeyValue in question
      Returns:
      the changed KeyValue
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
      See Also:
    • filterKeyValue

      Deprecated.
      Description copied from class: Filter
      A way to filter based on the column family, column qualifier and/or the column value. Return code is described below. This allows filters to filter only certain number of columns, then terminate without matching ever column. If filterRowKey returns true, filterKeyValue needs to be consistent with it. filterKeyValue can assume that filterRowKey has already been called for the row. If your filter returns ReturnCode.NEXT_ROW, it should return ReturnCode.NEXT_ROW until Filter.reset() is called just in case the caller calls for the next row. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterKeyValue in class Filter
      Parameters:
      c - the Cell in question
      Returns:
      code as described below, Filter.ReturnCode.INCLUDE by default
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
      See Also:
    • filterCell

      Description copied from class: Filter
      A way to filter based on the column family, column qualifier and/or the column value. Return code is described below. This allows filters to filter only certain number of columns, then terminate without matching ever column. If filterRowKey returns true, filterCell needs to be consistent with it. filterCell can assume that filterRowKey has already been called for the row. If your filter returns ReturnCode.NEXT_ROW, it should return ReturnCode.NEXT_ROW until Filter.reset() is called just in case the caller calls for the next row. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterCell in class Filter
      Parameters:
      c - the Cell in question
      Returns:
      code as described below
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
      See Also:
    • filterRowCells

      public void filterRowCells(List<Cell> cells) throws IOException
      Filters that never filter by modifying the returned List of Cells can inherit this implementation that does nothing. Filters that never filter by modifying the returned List of Cells can inherit this implementation that does nothing. Chance to alter the list of Cells to be submitted. Modifications to the list will carry on Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterRowCells in class FilterBase
      Parameters:
      cells - the list of Cells to be filtered
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • hasFilterRow

      public boolean hasFilterRow()
      Description copied from class: FilterBase
      Filters that never filter by modifying the returned List of Cells can inherit this implementation that does nothing. Primarily used to check for conflicts with scans(such as scans that do not read a full row at a time).
      Overrides:
      hasFilterRow in class FilterBase
      Returns:
      True if this filter actively uses filterRowCells(List) or filterRow().
    • filterRow

      public boolean filterRow() throws IOException
      Description copied from class: FilterBase
      Filters that never filter by rows based on previously gathered state from Filter.filterCell(Cell) can inherit this implementation that never filters a row. Last chance to veto row based on previous Filter.filterCell(Cell) calls. The filter needs to retain state then return a particular value for this call if they wish to exclude a row if a certain column is missing (for example). Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      filterRow in class FilterBase
      Returns:
      true to exclude row, false to include row.
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • toByteArray

      public byte[] toByteArray() throws IOException
      Returns The filter serialized using pb
      Overrides:
      toByteArray in class FilterBase
      Returns:
      The filter serialized using pb
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • parseFrom

      public static FilterList parseFrom(byte[] pbBytes) throws DeserializationException
      Parse a seralized representation of FilterList
      Parameters:
      pbBytes - A pb serialized FilterList instance
      Returns:
      An instance of FilterList made from bytes
      Throws:
      DeserializationException - if an error occurred
      See Also:
    • areSerializedFieldsEqual

      Returns true if and only if the fields of the filter that are serialized are equal to the corresponding fields in other. Used for testing.
      Overrides:
      areSerializedFieldsEqual in class FilterBase
      Returns:
      true if and only if the fields of the filter that are serialized are equal to the corresponding fields in other. Used for testing.
    • getNextCellHint

      public Cell getNextCellHint(Cell currentCell) throws IOException
      Description copied from class: FilterBase
      Filters that are not sure which key must be next seeked to, can inherit this implementation that, by default, returns a null Cell. If the filter returns the match code SEEK_NEXT_USING_HINT, then it should also tell which is the next key it must seek to. After receiving the match code SEEK_NEXT_USING_HINT, the QueryMatcher would call this function to find out which key it must next seek to. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      getNextCellHint in class FilterBase
      Returns:
      KeyValue which must be next seeked. return null if the filter is not sure which key to seek to next.
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • isFamilyEssential

      public boolean isFamilyEssential(byte[] name) throws IOException
      Description copied from class: FilterBase
      By default, we require all scan's column families to be present. Our subclasses may be more precise. Check that given column family is essential for filter to check row. Most filters always return true here. But some could have more sophisticated logic which could significantly reduce scanning process by not even touching columns until we are 100% sure that it's data is needed in result. Concrete implementers can signal a failure condition in their code by throwing an IOException.
      Overrides:
      isFamilyEssential in class FilterBase
      Throws:
      IOException - in case an I/O or an filter specific failure needs to be signaled.
    • setReversed

      public void setReversed(boolean reversed)
      Description copied from class: Filter
      alter the reversed scan flag
      Overrides:
      setReversed in class Filter
      Parameters:
      reversed - flag
    • isReversed

      public boolean isReversed()
      Overrides:
      isReversed in class Filter
    • toString

      public String toString()
      Description copied from class: FilterBase
      Return filter's info for debugging and logging purpose.
      Overrides:
      toString in class FilterBase
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object