@Override @Nullable public Comparable getMaxValue(String dimension) { ColumnHolder columnHolder = index.getColumnHolder(dimension); if (columnHolder != null && columnHolder.getCapabilities().hasBitmapIndexes()) { BitmapIndex bitmap = columnHolder.getBitmapIndex(); return bitmap.getCardinality() > 0 ? bitmap.getValue(bitmap.getCardinality() - 1) : null; } return null; }
private static long computeTotalCard(final QueryableIndex index, final Iterable<DimensionSpec> dimensionSpecs) { long totalCard = 0; for (DimensionSpec dimension : dimensionSpecs) { final ColumnHolder columnHolder = index.getColumnHolder(dimension.getDimension()); if (columnHolder != null) { final BitmapIndex bitmapIndex = columnHolder.getBitmapIndex(); if (bitmapIndex != null) { totalCard += bitmapIndex.getCardinality(); } } } return totalCard; } }
@Override @Nullable public Comparable getMinValue(String dimension) { ColumnHolder columnHolder = index.getColumnHolder(dimension); if (columnHolder != null && columnHolder.getCapabilities().hasBitmapIndexes()) { BitmapIndex bitmap = columnHolder.getBitmapIndex(); return bitmap.getCardinality() > 0 ? bitmap.getValue(0) : null; } return null; }
jg.writeFieldName(columnName); jg.writeStartObject(); for (int i = 0; i < bitmapIndex.getCardinality(); i++) { String val = NullHandling.nullToEmptyIfNeeded(bitmapIndex.getValue(i)); if (val != null) {
@Override public double estimateSelectivity(BitmapIndexSelector indexSelector) { if (supportShortCircuit()) { final BitmapIndex bitmapIndex = indexSelector.getBitmapIndex(boundDimFilter.getDimension()); if (bitmapIndex == null || bitmapIndex.getCardinality() == 0) { return doesMatch(null) ? 1. : 0.; } return Filters.estimateSelectivity( bitmapIndex, getBitmapIndexList(boundDimFilter, bitmapIndex), indexSelector.getNumRows() ); } else { return Filters.estimateSelectivity( boundDimFilter.getDimension(), indexSelector, getPredicateFactory().makeStringPredicate() ); } }
extractionFn = IdentityExtractionFn.getInstance(); for (int i = 0; i < bitmapIndex.getCardinality(); ++i) { String dimVal = extractionFn.apply(bitmapIndex.getValue(i)); if (!searchQuerySpec.accept(dimVal)) {
private static Pair<Integer, Integer> getStartEndIndexes( final BoundDimFilter boundDimFilter, final BitmapIndex bitmapIndex ) { final int startIndex; // inclusive int endIndex; // exclusive if (!boundDimFilter.hasLowerBound()) { startIndex = 0; } else { final int found = bitmapIndex.getIndex(NullHandling.emptyToNullIfNeeded(boundDimFilter.getLower())); if (found >= 0) { startIndex = boundDimFilter.isLowerStrict() ? found + 1 : found; } else { startIndex = -(found + 1); } } if (!boundDimFilter.hasUpperBound()) { endIndex = bitmapIndex.getCardinality(); } else { final int found = bitmapIndex.getIndex(NullHandling.emptyToNullIfNeeded(boundDimFilter.getUpper())); if (found >= 0) { endIndex = boundDimFilter.isUpperStrict() ? found : found + 1; } else { endIndex = -(found + 1); } } endIndex = startIndex > endIndex ? startIndex : endIndex; return new Pair<>(startIndex, endIndex); }
@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { if (supportShortCircuit()) { final BitmapIndex bitmapIndex = selector.getBitmapIndex(boundDimFilter.getDimension()); if (bitmapIndex == null || bitmapIndex.getCardinality() == 0) { if (doesMatch(null)) { return bitmapResultFactory.wrapAllTrue(Filters.allTrue(selector)); } else { return bitmapResultFactory.wrapAllFalse(Filters.allFalse(selector)); } } return bitmapResultFactory.unionDimensionValueBitmaps(getBitmapIterator(boundDimFilter, bitmapIndex)); } else { return Filters.matchPredicate( boundDimFilter.getDimension(), selector, bitmapResultFactory, getPredicateFactory().makeStringPredicate() ); } }
final int cardinality = bitmapIndex.getCardinality();
@Override @Nullable public Comparable getMaxValue(String dimension) { ColumnHolder columnHolder = index.getColumnHolder(dimension); if (columnHolder != null && columnHolder.getCapabilities().hasBitmapIndexes()) { BitmapIndex bitmap = columnHolder.getBitmapIndex(); return bitmap.getCardinality() > 0 ? bitmap.getValue(bitmap.getCardinality() - 1) : null; } return null; }
private static long computeTotalCard(final QueryableIndex index, final Iterable<DimensionSpec> dimensionSpecs) { long totalCard = 0; for (DimensionSpec dimension : dimensionSpecs) { final ColumnHolder columnHolder = index.getColumnHolder(dimension.getDimension()); if (columnHolder != null) { final BitmapIndex bitmapIndex = columnHolder.getBitmapIndex(); if (bitmapIndex != null) { totalCard += bitmapIndex.getCardinality(); } } } return totalCard; } }
@Override @Nullable public Comparable getMinValue(String dimension) { ColumnHolder columnHolder = index.getColumnHolder(dimension); if (columnHolder != null && columnHolder.getCapabilities().hasBitmapIndexes()) { BitmapIndex bitmap = columnHolder.getBitmapIndex(); return bitmap.getCardinality() > 0 ? bitmap.getValue(0) : null; } return null; }
jg.writeFieldName(columnName); jg.writeStartObject(); for (int i = 0; i < bitmapIndex.getCardinality(); i++) { String val = NullHandling.nullToEmptyIfNeeded(bitmapIndex.getValue(i)); if (val != null) {
@Override public double estimateSelectivity(BitmapIndexSelector indexSelector) { if (supportShortCircuit()) { final BitmapIndex bitmapIndex = indexSelector.getBitmapIndex(boundDimFilter.getDimension()); if (bitmapIndex == null || bitmapIndex.getCardinality() == 0) { return doesMatch(null) ? 1. : 0.; } return Filters.estimateSelectivity( bitmapIndex, getBitmapIndexList(boundDimFilter, bitmapIndex), indexSelector.getNumRows() ); } else { return Filters.estimateSelectivity( boundDimFilter.getDimension(), indexSelector, getPredicateFactory().makeStringPredicate() ); } }
private static Pair<Integer, Integer> getStartEndIndexes( final BoundDimFilter boundDimFilter, final BitmapIndex bitmapIndex ) { final int startIndex; // inclusive int endIndex; // exclusive if (!boundDimFilter.hasLowerBound()) { startIndex = 0; } else { final int found = bitmapIndex.getIndex(NullHandling.emptyToNullIfNeeded(boundDimFilter.getLower())); if (found >= 0) { startIndex = boundDimFilter.isLowerStrict() ? found + 1 : found; } else { startIndex = -(found + 1); } } if (!boundDimFilter.hasUpperBound()) { endIndex = bitmapIndex.getCardinality(); } else { final int found = bitmapIndex.getIndex(NullHandling.emptyToNullIfNeeded(boundDimFilter.getUpper())); if (found >= 0) { endIndex = boundDimFilter.isUpperStrict() ? found : found + 1; } else { endIndex = -(found + 1); } } endIndex = startIndex > endIndex ? startIndex : endIndex; return new Pair<>(startIndex, endIndex); }
extractionFn = IdentityExtractionFn.getInstance(); for (int i = 0; i < bitmapIndex.getCardinality(); ++i) { String dimVal = extractionFn.apply(bitmapIndex.getValue(i)); if (!searchQuerySpec.accept(dimVal)) {
@Override public <T> T getBitmapResult(BitmapIndexSelector selector, BitmapResultFactory<T> bitmapResultFactory) { if (supportShortCircuit()) { final BitmapIndex bitmapIndex = selector.getBitmapIndex(boundDimFilter.getDimension()); if (bitmapIndex == null || bitmapIndex.getCardinality() == 0) { if (doesMatch(null)) { return bitmapResultFactory.wrapAllTrue(Filters.allTrue(selector)); } else { return bitmapResultFactory.wrapAllFalse(Filters.allFalse(selector)); } } return bitmapResultFactory.unionDimensionValueBitmaps(getBitmapIterator(boundDimFilter, bitmapIndex)); } else { return Filters.matchPredicate( boundDimFilter.getDimension(), selector, bitmapResultFactory, getPredicateFactory().makeStringPredicate() ); } }
final int cardinality = bitmapIndex.getCardinality();