@VisibleForTesting public static Optional<Collection<Object>> extractDiscreteValues(ValueSet valueSet) { return valueSet.getValuesProcessor().transform( ranges -> { ImmutableList.Builder<Object> discreteValues = ImmutableList.builder(); for (Range range : ranges.getOrderedRanges()) { if (!range.isSingleValue()) { return Optional.empty(); } discreteValues.add(range.getSingleValue()); } return Optional.of(discreteValues.build()); }, discreteValues -> Optional.of(discreteValues.getValues()), allOrNone -> allOrNone.isAll() ? Optional.empty() : Optional.of(ImmutableList.of())); }
/** * Gets a collection of Accumulo Range objects from the given Presto domain. * This maps the column constraints of the given Domain to an Accumulo Range scan. * * @param domain Domain, can be null (returns (-inf, +inf) Range) * @param serializer Instance of an {@link AccumuloRowSerializer} * @return A collection of Accumulo Range objects * @throws TableNotFoundException If the Accumulo table is not found */ public static Collection<Range> getRangesFromDomain(Optional<Domain> domain, AccumuloRowSerializer serializer) throws TableNotFoundException { // if we have no predicate pushdown, use the full range if (!domain.isPresent()) { return ImmutableSet.of(new Range()); } ImmutableSet.Builder<Range> rangeBuilder = ImmutableSet.builder(); for (com.facebook.presto.spi.predicate.Range range : domain.get().getValues().getRanges().getOrderedRanges()) { rangeBuilder.add(getRangeFromPrestoRange(range, serializer)); } return rangeBuilder.build(); }
/** * Reduces the number of discrete components in the Domain if there are too many. */ public Domain simplify() { ValueSet simplifiedValueSet = values.getValuesProcessor().<Optional<ValueSet>>transform( ranges -> { if (ranges.getOrderedRanges().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.ofRanges(ranges.getSpan())); }, discreteValues -> { if (discreteValues.getValues().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.all(values.getType())); }, allOrNone -> Optional.empty()) .orElse(values); return Domain.create(simplifiedValueSet, nullAllowed); }
private FormattedDomain parseDomain(Domain domain) { ImmutableSet.Builder<FormattedRange> formattedRanges = ImmutableSet.builder(); Type type = domain.getType(); domain.getValues().getValuesProcessor().consume( ranges -> formattedRanges.addAll( ranges.getOrderedRanges().stream() .map(range -> new FormattedRange(formatMarker(range.getLow()), formatMarker(range.getHigh()))) .collect(toImmutableSet())), discreteValues -> formattedRanges.addAll( discreteValues.getValues().stream() .map(value -> getVarcharValue(type, value)) .map(value -> new FormattedMarker(Optional.of(value), EXACTLY)) .map(marker -> new FormattedRange(marker, marker)) .collect(toImmutableSet())), allOrNone -> { throw new IllegalStateException("Unreachable AllOrNone consumer"); }); return new FormattedDomain(domain.isNullAllowed(), formattedRanges.build()); }
ranges -> { ImmutableSet.Builder<Object> columnValues = ImmutableSet.builder(); for (Range range : ranges.getOrderedRanges()) {
for (Range range : ranges.getOrderedRanges()) { StringBuilder builder = new StringBuilder(); if (range.isSingleValue()) {
List<Range> orderedRanges = ranges.getOrderedRanges();
for (Range range : domain.getValues().getRanges().getOrderedRanges()) { checkState(!range.isAll()); if (range.isSingleValue()) {
for (Range range : domain.getValues().getRanges().getOrderedRanges()) {
String predicate = null; for (Range range : ranges.getOrderedRanges()) { if (range.isAll()) { return null;
for (Range range : domain.getValues().getRanges().getOrderedRanges()) { if (range.isSingleValue()) { singleValues.add(translateValue(range.getSingleValue(), type));
private QueryBuilder buildTermQuery(BoolQueryBuilder queryBuilder, String columnName, Domain domain, Type type) for (Range range : domain.getValues().getRanges().getOrderedRanges()) { BoolQueryBuilder rangeQueryBuilder = new BoolQueryBuilder(); Set<Object> valuesToInclude = new HashSet<>();
public static Collection<Range> getRangesFromDomain(Domain domain) throws TableNotFoundException { Collection<Range> rangeBuilder = domain.getValues().getRanges().getOrderedRanges(); return rangeBuilder; }
/** * Gets a collection of Hbase Range objects from the given Presto domain. * This maps the column constraints of the given Domain to an Hbase Range scan. * * @param domain Domain, can be null (returns (-inf, +inf) Range) * @return A collection of Hbase Range objects * @throws TableNotFoundException If the Hbase table is not found */ public static Collection<Range> getRangesFromDomain(Optional<Domain> domain) throws TableNotFoundException { // if we have no predicate pushdown, use the full range if (!domain.isPresent()) { return ImmutableSet.of(); } Collection<Range> rangeBuilder = domain.get().getValues().getRanges().getOrderedRanges(); return rangeBuilder; }
public static Collection<Range> getRangesFromDomain(Domain domain) throws TableNotFoundException { Collection<Range> rangeBuilder = domain.getValues().getRanges().getOrderedRanges(); return rangeBuilder; }
public static Collection<Range> getRangesFromDomain(Domain domain) throws TableNotFoundException { Collection<Range> rangeBuilder = domain.getValues().getRanges().getOrderedRanges(); return rangeBuilder; }
@VisibleForTesting public static Optional<Collection<Object>> extractDiscreteValues(ValueSet valueSet) { return valueSet.getValuesProcessor().transform( ranges -> { ImmutableList.Builder<Object> discreteValues = ImmutableList.builder(); for (Range range : ranges.getOrderedRanges()) { if (!range.isSingleValue()) { return Optional.empty(); } discreteValues.add(range.getSingleValue()); } return Optional.of(discreteValues.build()); }, discreteValues -> Optional.of(discreteValues.getValues()), allOrNone -> allOrNone.isAll() ? Optional.empty() : Optional.of(ImmutableList.of())); }
private static String createShardPredicate(ImmutableList.Builder<JDBCType> types, ImmutableList.Builder<Object> values, Domain domain, JDBCType jdbcType) { List<Range> ranges = domain.getValues().getRanges().getOrderedRanges(); // only apply predicates if all ranges are single values if (ranges.isEmpty() || !ranges.stream().allMatch(Range::isSingleValue)) { return "true"; } ImmutableList.Builder<Object> valuesBuilder = ImmutableList.builder(); ImmutableList.Builder<JDBCType> typesBuilder = ImmutableList.builder(); StringJoiner rangePredicate = new StringJoiner(" OR "); for (Range range : ranges) { Slice uuidText = (Slice) range.getSingleValue(); try { Slice uuidBytes = uuidStringToBytes(uuidText); typesBuilder.add(jdbcType); valuesBuilder.add(uuidBytes); } catch (IllegalArgumentException e) { return "true"; } rangePredicate.add("shard_uuid = ?"); } types.addAll(typesBuilder.build()); values.addAll(valuesBuilder.build()); return rangePredicate.toString(); }
/** * Reduces the number of discrete components in the Domain if there are too many. */ public Domain simplify() { ValueSet simplifiedValueSet = values.getValuesProcessor().<Optional<ValueSet>>transform( ranges -> { if (ranges.getOrderedRanges().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.ofRanges(ranges.getSpan())); }, discreteValues -> { if (discreteValues.getValues().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.all(values.getType())); }, allOrNone -> Optional.empty()) .orElse(values); return Domain.create(simplifiedValueSet, nullAllowed); }
/** * Reduces the number of discrete components in the Domain if there are too many. */ public static Domain simplifyDomain(Domain domain) { ValueSet values = domain.getValues(); ValueSet simplifiedValueSet = values.getValuesProcessor().<Optional<ValueSet>>transform( ranges -> { if (ranges.getOrderedRanges().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.ofRanges(ranges.getSpan())); }, discreteValues -> { if (discreteValues.getValues().size() <= 32) { return Optional.empty(); } return Optional.of(ValueSet.all(domain.getType())); }, allOrNone -> Optional.empty()) .orElse(values); return Domain.create(simplifiedValueSet, domain.isNullAllowed()); } }