@Override public int hashCode() { int result = getDimension().hashCode(); result = 31 * result + (getUpper() != null ? getUpper().hashCode() : 0); result = 31 * result + (getLower() != null ? getLower().hashCode() : 0); result = 31 * result + (isLowerStrict() ? 1 : 0); result = 31 * result + (isUpperStrict() ? 1 : 0); result = 31 * result + (getExtractionFn() != null ? getExtractionFn().hashCode() : 0); result = 31 * result + getOrdering().hashCode(); return result; }
byte[] lowerBytes = this.getLower() == null ? new byte[0] : StringUtils.toUtf8(this.getLower()); byte[] upperBytes = this.getUpper() == null ? new byte[0] : StringUtils.toUtf8(this.getUpper()); byte boundType = 0x1; if (this.getLower() == null) { boundType = 0x2; } else if (this.getUpper() == null) {
@Override public RangeSet<String> getDimensionRangeSet(String dimension) { if (!(Objects.equals(getDimension(), dimension) && getExtractionFn() == null && ordering.equals(StringComparators.LEXICOGRAPHIC))) { return null; } RangeSet<String> retSet = TreeRangeSet.create(); Range<String> range; if (getLower() == null) { range = isUpperStrict() ? Range.lessThan(getUpper()) : Range.atMost(getUpper()); } else if (getUpper() == null) { range = isLowerStrict() ? Range.greaterThan(getLower()) : Range.atLeast(getLower()); } else { range = Range.range(getLower(), isLowerStrict() ? BoundType.OPEN : BoundType.CLOSED, getUpper(), isUpperStrict() ? BoundType.OPEN : BoundType.CLOSED ); } retSet.add(range); return retSet; }
private boolean doesMatch(String input) { if (input == null) { return (!boundDimFilter.hasLowerBound() || (NullHandling.isNullOrEquivalent(boundDimFilter.getLower()) && !boundDimFilter.isLowerStrict())) // lower bound allows null && (!boundDimFilter.hasUpperBound() || !NullHandling.isNullOrEquivalent(boundDimFilter.getUpper()) || !boundDimFilter.isUpperStrict()); // upper bound allows null } int lowerComparing = 1; int upperComparing = 1; if (boundDimFilter.hasLowerBound()) { lowerComparing = comparator.compare(input, boundDimFilter.getLower()); } if (boundDimFilter.hasUpperBound()) { upperComparing = comparator.compare(boundDimFilter.getUpper(), input); } if (boundDimFilter.isLowerStrict() && boundDimFilter.isUpperStrict()) { return ((lowerComparing > 0)) && (upperComparing > 0); } else if (boundDimFilter.isLowerStrict()) { return (lowerComparing > 0) && (upperComparing >= 0); } else if (boundDimFilter.isUpperStrict()) { return (lowerComparing >= 0) && (upperComparing > 0); } return (lowerComparing >= 0) && (upperComparing >= 0); } }
public static Range<BoundValue> toRange(final BoundDimFilter bound) { final BoundValue upper = bound.getUpper() != null ? new BoundValue(bound.getUpper(), bound.getOrdering()) : null; final BoundValue lower = bound.getLower() != null ? new BoundValue(bound.getLower(), bound.getOrdering()) : null; if (lower == null) { return bound.isUpperStrict() ? Range.lessThan(upper) : Range.atMost(upper); } else if (upper == null) { return bound.isLowerStrict() ? Range.greaterThan(lower) : Range.atLeast(lower); } else { BoundType lowerBoundType = bound.isLowerStrict() ? BoundType.OPEN : BoundType.CLOSED; BoundType upperBoundType = bound.isUpperStrict() ? BoundType.OPEN : BoundType.CLOSED; return Range.range(lower, lowerBoundType, upper, upperBoundType); } }
@Override public DimFilter process(DimFilter filter) { if (filter instanceof BoundDimFilter) { final BoundDimFilter bound = (BoundDimFilter) filter; final StringComparator naturalStringComparator = sourceRowSignature.naturalStringComparator( SimpleExtraction.of(bound.getDimension(), bound.getExtractionFn()) ); if (bound.hasUpperBound() && bound.hasLowerBound() && bound.getUpper().equals(bound.getLower()) && !bound.isUpperStrict() && !bound.isLowerStrict() && bound.getOrdering().equals(naturalStringComparator)) { return new SelectorDimFilter( bound.getDimension(), bound.getUpper(), bound.getExtractionFn() ); } else { return filter; } } else { return filter; } } }
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 int hashCode() { int result = getDimension().hashCode(); result = 31 * result + (getUpper() != null ? getUpper().hashCode() : 0); result = 31 * result + (getLower() != null ? getLower().hashCode() : 0); result = 31 * result + (isLowerStrict() ? 1 : 0); result = 31 * result + (isUpperStrict() ? 1 : 0); result = 31 * result + (getExtractionFn() != null ? getExtractionFn().hashCode() : 0); result = 31 * result + getOrdering().hashCode(); return result; }
byte[] lowerBytes = this.getLower() == null ? new byte[0] : StringUtils.toUtf8(this.getLower()); byte[] upperBytes = this.getUpper() == null ? new byte[0] : StringUtils.toUtf8(this.getUpper()); byte boundType = 0x1; if (this.getLower() == null) { boundType = 0x2; } else if (this.getUpper() == null) {
@Override public RangeSet<String> getDimensionRangeSet(String dimension) { if (!(Objects.equals(getDimension(), dimension) && getExtractionFn() == null && ordering.equals(StringComparators.LEXICOGRAPHIC))) { return null; } RangeSet<String> retSet = TreeRangeSet.create(); Range<String> range; if (getLower() == null) { range = isUpperStrict() ? Range.lessThan(getUpper()) : Range.atMost(getUpper()); } else if (getUpper() == null) { range = isLowerStrict() ? Range.greaterThan(getLower()) : Range.atLeast(getLower()); } else { range = Range.range(getLower(), isLowerStrict() ? BoundType.OPEN : BoundType.CLOSED, getUpper(), isUpperStrict() ? BoundType.OPEN : BoundType.CLOSED ); } retSet.add(range); return retSet; }
private boolean doesMatch(String input) { if (input == null) { return (!boundDimFilter.hasLowerBound() || (NullHandling.isNullOrEquivalent(boundDimFilter.getLower()) && !boundDimFilter.isLowerStrict())) // lower bound allows null && (!boundDimFilter.hasUpperBound() || !NullHandling.isNullOrEquivalent(boundDimFilter.getUpper()) || !boundDimFilter.isUpperStrict()); // upper bound allows null } int lowerComparing = 1; int upperComparing = 1; if (boundDimFilter.hasLowerBound()) { lowerComparing = comparator.compare(input, boundDimFilter.getLower()); } if (boundDimFilter.hasUpperBound()) { upperComparing = comparator.compare(boundDimFilter.getUpper(), input); } if (boundDimFilter.isLowerStrict() && boundDimFilter.isUpperStrict()) { return ((lowerComparing > 0)) && (upperComparing > 0); } else if (boundDimFilter.isLowerStrict()) { return (lowerComparing > 0) && (upperComparing >= 0); } else if (boundDimFilter.isUpperStrict()) { return (lowerComparing >= 0) && (upperComparing > 0); } return (lowerComparing >= 0) && (upperComparing >= 0); } }
public static Range<BoundValue> toRange(final BoundDimFilter bound) { final BoundValue upper = bound.getUpper() != null ? new BoundValue(bound.getUpper(), bound.getOrdering()) : null; final BoundValue lower = bound.getLower() != null ? new BoundValue(bound.getLower(), bound.getOrdering()) : null; if (lower == null) { return bound.isUpperStrict() ? Range.lessThan(upper) : Range.atMost(upper); } else if (upper == null) { return bound.isLowerStrict() ? Range.greaterThan(lower) : Range.atLeast(lower); } else { return Range.range( lower, bound.isLowerStrict() ? BoundType.OPEN : BoundType.CLOSED, upper, bound.isUpperStrict() ? BoundType.OPEN : BoundType.CLOSED ); } }
@Override public DimFilter process(DimFilter filter) { if (filter instanceof BoundDimFilter) { final BoundDimFilter bound = (BoundDimFilter) filter; final StringComparator naturalStringComparator = sourceRowSignature.naturalStringComparator( SimpleExtraction.of(bound.getDimension(), bound.getExtractionFn()) ); if (bound.hasUpperBound() && bound.hasLowerBound() && bound.getUpper().equals(bound.getLower()) && !bound.isUpperStrict() && !bound.isLowerStrict() && bound.getOrdering().equals(naturalStringComparator)) { return new SelectorDimFilter( bound.getDimension(), bound.getUpper(), bound.getExtractionFn() ); } else { return filter; } } else { return filter; } } }
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); }