Class AndFilter

    • Field Detail

      • AND_JOINER

        public static final com.google.common.base.Joiner AND_JOINER
    • Method Detail

      • makeFilterBundle

        public <T> FilterBundle makeFilterBundle​(ColumnIndexSelector columnIndexSelector,
                                                 BitmapResultFactory<T> bitmapResultFactory,
                                                 int applyRowCount,
                                                 int totalRowCount,
                                                 boolean includeUnknown)
        Description copied from interface: Filter
        Compute indexes and build a container FilterBundle to be used during Cursor or VectorCursor creation, combining the computed outputs of Filter.getBitmapColumnIndex(ColumnIndexSelector) as well as references to Filter.makeMatcher(ColumnSelectorFactory) and Filter.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.

        Specified by:
        makeFilterBundle in interface Filter
        Type Parameters:
        T - - Type of BitmapResultFactory results, ImmutableBitmap by default
        Parameters:
        columnIndexSelector - - provides ColumnIndexSupplier to fetch column indexes and BitmapFactory to manipulate them
        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. See NullHandling.useThreeValueLogic()
        Returns:
        - FilterBundle containing any indexes and/or matchers that are needed to build a cursor
      • 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.
      • 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
      • getFilters

        public LinkedHashSet<Filter> getFilters()
        Description copied from interface: BooleanFilter
        Returns the child filters for this filter. This is a LinkedHashSet because we don't want duplicates, but the order is also important in some cases (such as when filters are provided in an order that encourages short-circuiting.)
        Specified by:
        getFilters in interface BooleanFilter
      • 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
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object