Class InDimFilter

All Implemented Interfaces:
Cacheable, DimFilter, Filter

public class InDimFilter extends AbstractOptimizableDimFilter implements Filter
Approximately like the SQL 'IN' filter, with the main difference being that this will match NULL values if contained in the values list instead of ignoring them.

This filter specifies all match values as a sorted string set; matching against other column types must incur the cost of converting values to check for matches. For the most part, TypedInFilter should be used instead.

  • Constructor Details

    • InDimFilter

      public InDimFilter(String dimension, InDimFilter.ValuesSet values, @Nullable ExtractionFn extractionFn, @Nullable FilterTuning filterTuning)
      Creates a new filter.
      Parameters:
      dimension - column to search
      values - set of values to match. This collection may be reused to avoid copying a big collection. Therefore, callers should not modify the collection after it is passed to this constructor.
      extractionFn - extraction function to apply to the column before checking against "values"
      filterTuning - optional tuning
    • InDimFilter

      public InDimFilter(String dimension, Set<String> values)
      Creates a new filter without an extraction function or any special filter tuning.
      Parameters:
      dimension - column to search
      values - set of values to match. If this collection is a SortedSet, it may be reused to avoid copying a big collection. Therefore, callers should not modify the collection after it is passed to this constructor.
    • InDimFilter

      public InDimFilter(String dimension, Collection<String> values, @Nullable ExtractionFn extractionFn)
      Creates a new filter without an extraction function or any special filter tuning.
      Parameters:
      dimension - column to search
      values - set of values to match. If this collection is a SortedSet, it may be reused to avoid copying a big collection. Therefore, callers should not modify the collection after it is passed to this constructor.
      extractionFn - extraction function to apply to the column before checking against "values"
  • Method Details

    • getDimension

      public String getDimension()
    • getValues

      public SortedSet<String> getValues()
    • getExtractionFn

      @Nullable public ExtractionFn getExtractionFn()
    • getFilterTuning

      @Nullable public FilterTuning getFilterTuning()
    • getCacheKey

      public byte[] getCacheKey()
      Description copied from interface: Cacheable
      Get a byte array used as a cache key.
      Specified by:
      getCacheKey in interface Cacheable
      Returns:
      bytes to be used as cache key - or null if this object should not be cached.
    • optimize

      public DimFilter optimize(boolean mayIncludeUnknown)
      Description copied from interface: DimFilter
      Returns an optimized version of this filter.
      Specified by:
      optimize in interface DimFilter
      Overrides:
      optimize in class AbstractOptimizableDimFilter
      Parameters:
      mayIncludeUnknown - whether the optimized filter may need to operate in "includeUnknown" mode.
    • toFilter

      public Filter toFilter()
      Description copied from interface: DimFilter
      Returns a Filter that implements this DimFilter. This does not generally involve optimizing the DimFilter, so it does make sense to optimize first and then call toFilter on the resulting DimFilter.
      Specified by:
      toFilter in interface DimFilter
      Returns:
      a Filter that implements this DimFilter, or null if this DimFilter is a no-op.
    • getDimensionRangeSet

      @Nullable public com.google.common.collect.RangeSet<String> getDimensionRangeSet(String dimension)
      Description copied from interface: DimFilter
      Returns a RangeSet that represents the possible range of the input dimension for this DimFilter.This is applicable to filters that use dimensions such as select, in, bound, and logical filters such as and, or, not. Null represents that the range cannot be determined, and will be returned for filters such as javascript and regex where there's no easy way to determine the filtered range. It is treated the same way as an all range in most cases, however there are some subtle difference at logical filters such as not filter, where complement of all is nothing while complement of null is still null.
      Specified by:
      getDimensionRangeSet in interface DimFilter
      Parameters:
      dimension - name of the dimension to get range for
      Returns:
      a RangeSet that represent the possible range of the input dimension, or null if it is not possible to determine for this DimFilter.
    • getRequiredColumns

      public Set<String> getRequiredColumns()
      Description copied from interface: Filter
      Set of columns used by a filter.
      Specified by:
      getRequiredColumns in interface DimFilter
      Specified by:
      getRequiredColumns in interface Filter
      Returns:
      a HashSet that represents all columns' name which the DimFilter required to do filter.
    • getBitmapColumnIndex

      @Nullable public BitmapColumnIndex getBitmapColumnIndex(ColumnIndexSelector selector)
      Description copied from interface: Filter
      Returns a BitmapColumnIndex if this filter supports using a bitmap index for filtering for the given input ColumnIndexSelector. The BitmapColumnIndex can be used to compute into a bitmap indicating rows that match this filter result BitmapColumnIndex.computeBitmapResult(BitmapResultFactory, boolean), or examine details about the index prior to computing it, via BitmapColumnIndex.getIndexCapabilities().
      Specified by:
      getBitmapColumnIndex in interface Filter
      Parameters:
      selector - Object used to create BitmapColumnIndex
      Returns:
      BitmapColumnIndex that can build ImmutableBitmap of matched row numbers
    • makeMatcher

      public ValueMatcher makeMatcher(ColumnSelectorFactory factory)
      Description copied from interface: Filter
      Get a ValueMatcher that applies this filter to row values.
      Specified by:
      makeMatcher in interface Filter
      Parameters:
      factory - Object used to create ValueMatchers
      Returns:
      ValueMatcher that applies this filter to row values.
    • makeVectorMatcher

      public VectorValueMatcher makeVectorMatcher(VectorColumnSelectorFactory factory)
      Description copied from interface: Filter
      Get a VectorValueMatcher that applies this filter to row vectors.
      Specified by:
      makeVectorMatcher in interface Filter
      Parameters:
      factory - Object used to create ValueMatchers
      Returns:
      VectorValueMatcher that applies this filter to row vectors.
    • canVectorizeMatcher

      public boolean canVectorizeMatcher(ColumnInspector inspector)
      Description copied from interface: Filter
      Returns true if this filter can produce a vectorized matcher from its "makeVectorMatcher" method.
      Specified by:
      canVectorizeMatcher in interface Filter
      Parameters:
      inspector - Supplies type information for the selectors this filter will match against
    • supportsRequiredColumnRewrite

      public boolean supportsRequiredColumnRewrite()
      Description copied from interface: Filter
      Returns true is this filter is able to return a copy of this filter that is identical to this filter except that it operates on different columns, based on a renaming map.
      Specified by:
      supportsRequiredColumnRewrite in interface Filter
    • rewriteRequiredColumns

      public Filter rewriteRequiredColumns(Map<String,String> columnRewrites)
      Description copied from interface: Filter
      Return a copy of this filter that is identical to the this filter except that it operates on different columns, based on a renaming map where the key is the column to be renamed in the filter, and the value is the new column name.

      For example, if I have a filter (A = hello), and I have a renaming map (A -> B), this should return the filter (B = hello)

      Specified by:
      rewriteRequiredColumns in interface Filter
      Parameters:
      columnRewrites - Column rewrite map
      Returns:
      Copy of this filter that operates on new columns based on the rewrite map
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • equals

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

      public int hashCode()
      Overrides:
      hashCode in class Object
    • optimizeLookup

      public static InDimFilter.ValuesSet optimizeLookup(InDimFilter inFilter, boolean mayIncludeUnknown)
      If the provided "in" filter uses a LookupExtractionFn that can be reversed, then return the matching set of keys as a InDimFilter.ValuesSet. Otherwise return null.
      Parameters:
      inFilter - in filter
      mayIncludeUnknown - same as the argument to optimize(boolean)
    • optimizeLookup

      @Nullable public static InDimFilter.ValuesSet optimizeLookup(InDimFilter inFilter, boolean mayIncludeUnknown, int maxSize)
      If the provided "in" filter uses a LookupExtractionFn that can be reversed, then return the matching set of keys as a InDimFilter.ValuesSet. Otherwise return null.
      Parameters:
      inFilter - in filter
      mayIncludeUnknown - same as the argument to optimize(boolean)
      maxSize - maximum number of values in the returned filter