Class AbstractOptimizableDimFilter

java.lang.Object
org.apache.druid.query.filter.AbstractOptimizableDimFilter
All Implemented Interfaces:
Cacheable, DimFilter
Direct Known Subclasses:
AndDimFilter, ArrayContainsElementFilter, BoundDimFilter, ColumnComparisonDimFilter, EqualityFilter, ExpressionDimFilter, ExtractionDimFilter, FalseDimFilter, InDimFilter, IntervalDimFilter, IsBooleanDimFilter, JavaScriptDimFilter, LikeDimFilter, NotDimFilter, NullFilter, OrDimFilter, RangeFilter, RegexDimFilter, SearchQueryDimFilter, SelectorDimFilter, SpatialDimFilter, TrueDimFilter, TypedInFilter

public abstract class AbstractOptimizableDimFilter extends Object implements DimFilter
Base class for most DimFilter. This abstract class provides a default implementation of toOptimizedFilter(boolean) that uses a memoized supplier relying on optimize(boolean) and DimFilter.toFilter(). This fulfils the expectation that toOptimizedFilter(boolean) returns the same instance when called multiple times.
  • Constructor Details

    • AbstractOptimizableDimFilter

      public AbstractOptimizableDimFilter()
  • Method Details

    • optimize

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

      public final Filter toOptimizedFilter(boolean mayIncludeUnknown)
      Specified by:
      toOptimizedFilter in interface DimFilter
      Parameters:
      mayIncludeUnknown - whether the optimized filter may need to operate in "includeUnknown" mode.
      Returns:
      Return a Filter that implements this DimFilter, after applying optimizations to this DimFilter. A typical implementation will return the result of `optimize().toFilter()` See abstract base class AbstractOptimizableDimFilter for a common implementation shared by current DimFilters. The Filter returned by this method across multiple calls must be the same object: parts of the query stack compare Filters, and returning the same object allows these checks to avoid deep comparisons. (see HashJoinSegmentCursorFactory.makeCursorHolder(CursorBuildSpec) for an example}