Class NotFilter

  • All Implemented Interfaces:
    Filter

    public class NotFilter
    extends Object
    implements Filter
    Nice filter you have there... NOT! If ExpressionProcessing.useStrictBooleans() and NullHandling.sqlCompatible() are both true, this filter inverts the includeUnknown flag to properly map Druids native two-valued logic (true, false) to SQL three-valued logic (true, false, unknown). At the top level, this flag is always passed in as 'false', and is only flipped by this filter. Other logical filters (AndFilter and OrFilter) propagate the value of includeUnknown to their children. For example, if the base filter is equality, by default value matchers and indexes only return true for the rows that are equal to the value. When wrapped in a not filter, the not filter indicates that the equality matchers and indexes should also include the null or 'unknown' values as matches, so that inverting the match does not incorrectly include these null values as matches.
    • Constructor Detail

      • NotFilter

        public NotFilter​(Filter baseFilter)
    • Method Detail

      • 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
      • 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
      • supportsSelectivityEstimation

        public boolean supportsSelectivityEstimation​(ColumnSelector columnSelector,
                                                     ColumnIndexSelector indexSelector)
        Description copied from interface: Filter
        Indicates whether this filter supports selectivity estimation. A filter supports selectivity estimation if it supports bitmap index and the dimension which the filter evaluates does not have multi values.
        Specified by:
        supportsSelectivityEstimation in interface Filter
        Parameters:
        columnSelector - Object to check the dimension has multi values.
        indexSelector - Object used to retrieve bitmap indexes
        Returns:
        true if this Filter supports selectivity estimation, false otherwise.
      • hashCode

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

        public Filter getBaseFilter()