@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { if (filters.size() == 1) { return filters.get(0).getBitmapResult(selector, bitmapResultFactory); } List<T> bitmapResults = new ArrayList<>(); for (Filter filter : filters) { bitmapResults.add(filter.getBitmapResult(selector, bitmapResultFactory)); } return bitmapResultFactory.union(bitmapResults); }
@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { return bitmapResultFactory.complement( baseFilter.getBitmapResult(selector, bitmapResultFactory), selector.getNumRows() ); }
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); }
/** * Get a bitmap index, indicating rows that match this filter. Do not call this method unless * {@link #supportsBitmapIndex(BitmapIndexSelector)} returns true. Behavior in the case that * {@link #supportsBitmapIndex(BitmapIndexSelector)} returns false is undefined. * * This method is OK to be called, but generally should not be overridden, override {@link #getBitmapResult} instead. * * @param selector Object used to retrieve bitmap indexes * * @return A bitmap indicating rows that match this filter. * * @see Filter#estimateSelectivity(BitmapIndexSelector) */ default ImmutableBitmap getBitmapIndex(BitmapIndexSelector selector) { return getBitmapResult(selector, new DefaultBitmapResultFactory(selector.getBitmapFactory())); }
@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { if (filters.size() == 1) { return filters.get(0).getBitmapResult(selector, bitmapResultFactory); } List<T> bitmapResults = Lists.newArrayList(); for (Filter filter : filters) { bitmapResults.add(filter.getBitmapResult(selector, bitmapResultFactory)); } return bitmapResultFactory.union(bitmapResults); }
@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { return bitmapResultFactory.complement( baseFilter.getBitmapResult(selector, bitmapResultFactory), selector.getNumRows() ); }
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); }
/** * Get a bitmap index, indicating rows that match this filter. Do not call this method unless * {@link #supportsBitmapIndex(BitmapIndexSelector)} returns true. Behavior in the case that * {@link #supportsBitmapIndex(BitmapIndexSelector)} returns false is undefined. * * This method is OK to be called, but generally should not be overridden, override {@link #getBitmapResult} instead. * * @param selector Object used to retrieve bitmap indexes * * @return A bitmap indicating rows that match this filter. * * @see Filter#estimateSelectivity(BitmapIndexSelector) */ default ImmutableBitmap getBitmapIndex(BitmapIndexSelector selector) { return getBitmapResult(selector, new DefaultBitmapResultFactory(selector.getBitmapFactory())); }