@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { for (Filter filter : filters) { if (!filter.supportsBitmapIndex(selector)) { return false; } } return true; }
@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { return baseFilter.supportsBitmapIndex(selector); }
@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { for (Filter filter : filters) { if (!filter.supportsBitmapIndex(selector)) { return false; } } return true; }
@Override public ValueMatcher makeMatcher( BitmapIndexSelector selector, ColumnSelectorFactory columnSelectorFactory, RowOffsetMatcherFactory rowOffsetMatcherFactory ) { final List<ValueMatcher> matchers = new ArrayList<>(); final List<ImmutableBitmap> bitmaps = new ArrayList<>(); for (Filter filter : filters) { if (filter.supportsBitmapIndex(selector)) { bitmaps.add(filter.getBitmapIndex(selector)); } else { ValueMatcher matcher = filter.makeMatcher(columnSelectorFactory); matchers.add(matcher); } } if (bitmaps.size() > 0) { ImmutableBitmap combinedBitmap = selector.getBitmapFactory().intersection(bitmaps); ValueMatcher offsetMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher(combinedBitmap); matchers.add(0, offsetMatcher); } return makeMatcher(matchers.toArray(EMPTY_VALUE_MATCHER_ARRAY)); }
private static <T> T getBitmapResult( BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory, List<Filter> filters ) { if (filters.size() == 1) { return filters.get(0).getBitmapResult(selector, bitmapResultFactory); } final List<T> bitmapResults = Lists.newArrayListWithCapacity(filters.size()); for (final Filter filter : filters) { Preconditions.checkArgument(filter.supportsBitmapIndex(selector), "Filter[%s] does not support bitmap index", filter ); final T bitmapResult = filter.getBitmapResult(selector, bitmapResultFactory); if (bitmapResultFactory.isEmpty(bitmapResult)) { // Short-circuit. return bitmapResultFactory.wrapAllFalse(Filters.allFalse(selector)); } bitmapResults.add(bitmapResult); } return bitmapResultFactory.intersection(bitmapResults); }
@Override public ValueMatcher makeMatcher( BitmapIndexSelector selector, ColumnSelectorFactory columnSelectorFactory, RowOffsetMatcherFactory rowOffsetMatcherFactory ) { final List<ValueMatcher> matchers = new ArrayList<>(); final List<ImmutableBitmap> bitmaps = new ArrayList<>(); for (Filter filter : filters) { if (filter.supportsBitmapIndex(selector)) { bitmaps.add(filter.getBitmapIndex(selector)); } else { ValueMatcher matcher = filter.makeMatcher(columnSelectorFactory); matchers.add(matcher); } } if (bitmaps.size() > 0) { ImmutableBitmap combinedBitmap = selector.getBitmapFactory().union(bitmaps); ValueMatcher offsetMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher(combinedBitmap); matchers.add(0, offsetMatcher); } return makeMatcher(matchers.toArray(AndFilter.EMPTY_VALUE_MATCHER_ARRAY)); }
static boolean supportsSelectivityEstimation( Filter filter, String dimension, ColumnSelector columnSelector, BitmapIndexSelector indexSelector ) { if (filter.supportsBitmapIndex(indexSelector)) { final ColumnHolder columnHolder = columnSelector.getColumnHolder(dimension); if (columnHolder != null) { return !columnHolder.getCapabilities().hasMultipleValues(); } } return false; }
if (filter == null || filter.supportsBitmapIndex(selector)) { final ImmutableBitmap timeFilteredBitmap = makeTimeFilteredBitmap(index, segment, filter, interval); builder.add(new IndexOnlyExecutor(query, segment, timeFilteredBitmap, bitmapSuppDims));
if (subfilter.supportsBitmapIndex(selector)) { preFilters.add(subfilter); } else { if (filter.supportsBitmapIndex(selector)) { preFilters.add(filter); } else {
FilteredOffset( Offset baseOffset, ColumnSelectorFactory columnSelectorFactory, boolean descending, Filter postFilter, ColumnSelectorBitmapIndexSelector bitmapIndexSelector ) { this.baseOffset = baseOffset; RowOffsetMatcherFactory rowOffsetMatcherFactory = new CursorOffsetHolderRowOffsetMatcherFactory( baseOffset.getBaseReadableOffset(), descending ); if (postFilter instanceof BooleanFilter) { filterMatcher = ((BooleanFilter) postFilter).makeMatcher( bitmapIndexSelector, columnSelectorFactory, rowOffsetMatcherFactory ); } else { if (postFilter.supportsBitmapIndex(bitmapIndexSelector)) { filterMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher( postFilter.getBitmapIndex(bitmapIndexSelector) ); } else { filterMatcher = postFilter.makeMatcher(columnSelectorFactory); } } incrementIfNeededOnCreationOrReset(); }
index ); Preconditions.checkArgument(filter.supportsBitmapIndex(selector), "filter[%s] should support bitmap", filter); baseFilter = filter.getBitmapIndex(selector);
@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { return baseFilter.supportsBitmapIndex(selector); }
@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { for (Filter filter : filters) { if (!filter.supportsBitmapIndex(selector)) { return false; } } return true; }
@Override public boolean supportsBitmapIndex(BitmapIndexSelector selector) { for (Filter filter : filters) { if (!filter.supportsBitmapIndex(selector)) { return false; } } return true; }
@Override public ValueMatcher makeMatcher( BitmapIndexSelector selector, ColumnSelectorFactory columnSelectorFactory, RowOffsetMatcherFactory rowOffsetMatcherFactory ) { final List<ValueMatcher> matchers = new ArrayList<>(); final List<ImmutableBitmap> bitmaps = new ArrayList<>(); for (Filter filter : filters) { if (filter.supportsBitmapIndex(selector)) { bitmaps.add(filter.getBitmapIndex(selector)); } else { ValueMatcher matcher = filter.makeMatcher(columnSelectorFactory); matchers.add(matcher); } } if (bitmaps.size() > 0) { ImmutableBitmap combinedBitmap = selector.getBitmapFactory().union(bitmaps); ValueMatcher offsetMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher(combinedBitmap); matchers.add(0, offsetMatcher); } return makeMatcher(matchers.toArray(AndFilter.EMPTY_VALUE_MATCHER_ARRAY)); }
@Override public ValueMatcher makeMatcher( BitmapIndexSelector selector, ColumnSelectorFactory columnSelectorFactory, RowOffsetMatcherFactory rowOffsetMatcherFactory ) { final List<ValueMatcher> matchers = new ArrayList<>(); final List<ImmutableBitmap> bitmaps = new ArrayList<>(); for (Filter filter : filters) { if (filter.supportsBitmapIndex(selector)) { bitmaps.add(filter.getBitmapIndex(selector)); } else { ValueMatcher matcher = filter.makeMatcher(columnSelectorFactory); matchers.add(matcher); } } if (bitmaps.size() > 0) { ImmutableBitmap combinedBitmap = selector.getBitmapFactory().intersection(bitmaps); ValueMatcher offsetMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher(combinedBitmap); matchers.add(0, offsetMatcher); } return makeMatcher(matchers.toArray(EMPTY_VALUE_MATCHER_ARRAY)); }
static boolean supportsSelectivityEstimation( Filter filter, String dimension, ColumnSelector columnSelector, BitmapIndexSelector indexSelector ) { if (filter.supportsBitmapIndex(indexSelector)) { final ColumnHolder columnHolder = columnSelector.getColumnHolder(dimension); if (columnHolder != null) { return !columnHolder.getCapabilities().hasMultipleValues(); } } return false; }
private static <T> T getBitmapResult( BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory, List<Filter> filters ) { if (filters.size() == 1) { return filters.get(0).getBitmapResult(selector, bitmapResultFactory); } final List<T> bitmapResults = Lists.newArrayListWithCapacity(filters.size()); for (final Filter filter : filters) { Preconditions.checkArgument(filter.supportsBitmapIndex(selector), "Filter[%s] does not support bitmap index", filter ); final T bitmapResult = filter.getBitmapResult(selector, bitmapResultFactory); if (bitmapResultFactory.isEmpty(bitmapResult)) { // Short-circuit. return bitmapResultFactory.wrapAllFalse(Filters.allFalse(selector)); } bitmapResults.add(bitmapResult); } return bitmapResultFactory.intersection(bitmapResults); }
if (filter == null || filter.supportsBitmapIndex(selector)) { final ImmutableBitmap timeFilteredBitmap = makeTimeFilteredBitmap(index, segment, filter, interval); builder.add(new IndexOnlyExecutor(query, segment, timeFilteredBitmap, bitmapSuppDims));
FilteredOffset( Offset baseOffset, ColumnSelectorFactory columnSelectorFactory, boolean descending, Filter postFilter, ColumnSelectorBitmapIndexSelector bitmapIndexSelector ) { this.baseOffset = baseOffset; RowOffsetMatcherFactory rowOffsetMatcherFactory = new CursorOffsetHolderRowOffsetMatcherFactory( baseOffset.getBaseReadableOffset(), descending ); if (postFilter instanceof BooleanFilter) { filterMatcher = ((BooleanFilter) postFilter).makeMatcher( bitmapIndexSelector, columnSelectorFactory, rowOffsetMatcherFactory ); } else { if (postFilter.supportsBitmapIndex(bitmapIndexSelector)) { filterMatcher = rowOffsetMatcherFactory.makeRowOffsetMatcher( postFilter.getBitmapIndex(bitmapIndexSelector) ); } else { filterMatcher = postFilter.makeMatcher(columnSelectorFactory); } } incrementIfNeededOnCreationOrReset(); }