Interface Filter

All Known Subinterfaces:
BooleanFilter, BooleanUnaryFilter
All Known Implementing Classes:
AndFilter, ArrayContainsElementFilter, BoundFilter, ColumnComparisonFilter, DimensionPredicateFilter, EqualityFilter, ExpressionFilter, FalseFilter, InDimFilter, IsBooleanFilter, JavaScriptFilter, LikeFilter, NotFilter, NullFilter, OrFilter, ProjectionFilterMatch, RangeFilter, RegexFilter, SearchQueryFilter, SelectorFilter, SpatialFilter, TrueFilter, TypedInFilter

  • Method Details

    • makeFilterBundle

      default <T> FilterBundle makeFilterBundle(FilterBundle.Builder filterBundleBuilder, BitmapResultFactory<T> bitmapResultFactory, int applyRowCount, int totalRowCount, boolean includeUnknown)
      Compute indexes and build a container FilterBundle to be used during Cursor or VectorCursor creation, combining the computed outputs of getBitmapColumnIndex(ColumnIndexSelector) as well as references to makeMatcher(ColumnSelectorFactory) and makeVectorMatcher(VectorColumnSelectorFactory).

      Filters populating the FilterBundle container should only set the values which MUST be evaluated by the cursor. If both are set, the cursor will effectively perform a logical AND to combine them. See FilterBundle for additional details.

      Type Parameters:
      T - type of BitmapResultFactory results, ImmutableBitmap by default
      Parameters:
      filterBundleBuilder - contains BitmapColumnIndex and ColumnIndexSelector, and some additional info needed.
      bitmapResultFactory - wrapper for ImmutableBitmap operations to tie into QueryMetrics and build the output indexes
      applyRowCount - upper bound on number of rows this filter would be applied to, after removing rows short-circuited by prior bundle operations. For example, given "x AND y", if "x" is resolved using an index, then "y" will receive the number of rows that matched the filter "x". As another example, given "x OR y", if "x" is resolved using an index, then "y" will receive the number of rows that did *not* match the filter "x".
      totalRowCount - total number of rows to be scanned if no indexes are applied
      includeUnknown - mapping for Druid native two state logic system into SQL three-state logic system. If set to true, bitmaps returned by this method should include true bits for any rows where the matching result is 'unknown', such as from the input being null valued.
      Returns:
      FilterBundle containing any indexes and/or matchers that are needed to build a cursor
    • getBitmapColumnIndex

      @Nullable BitmapColumnIndex getBitmapColumnIndex(ColumnIndexSelector selector)
      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().
      Parameters:
      selector - Object used to create BitmapColumnIndex
      Returns:
      BitmapColumnIndex that can build ImmutableBitmap of matched row numbers
    • makeMatcher

      ValueMatcher makeMatcher(ColumnSelectorFactory factory)
      Get a ValueMatcher that applies this filter to row values.
      Parameters:
      factory - Object used to create ValueMatchers
      Returns:
      ValueMatcher that applies this filter to row values.
    • makeVectorMatcher

      default VectorValueMatcher makeVectorMatcher(VectorColumnSelectorFactory factory)
      Get a VectorValueMatcher that applies this filter to row vectors.
      Parameters:
      factory - Object used to create ValueMatchers
      Returns:
      VectorValueMatcher that applies this filter to row vectors.
    • canVectorizeMatcher

      default boolean canVectorizeMatcher(ColumnInspector inspector)
      Returns true if this filter can produce a vectorized matcher from its "makeVectorMatcher" method.
      Parameters:
      inspector - Supplies type information for the selectors this filter will match against
    • getRequiredColumns

      Set<String> getRequiredColumns()
      Set of columns used by a filter.
    • supportsRequiredColumnRewrite

      default boolean supportsRequiredColumnRewrite()
      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.
    • rewriteRequiredColumns

      default Filter rewriteRequiredColumns(Map<String,String> columnRewrites)
      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)

      Parameters:
      columnRewrites - Column rewrite map
      Returns:
      Copy of this filter that operates on new columns based on the rewrite map