@Override public RangeSet<RowKeyWrapper> getIndexScanHint(FilterList filter) { final List<RangeSet<RowKeyWrapper>> childHints = collectChildHints(filter); if (childHints.isEmpty()) { return ImmutableRangeSet.of(Range.<RowKeyWrapper>all()); } // Optimization else if (childHints.size() == 1) { return childHints.get(0); } TreeRangeSet<RowKeyWrapper> result = TreeRangeSet.create(childHints.get(0)); switch (filter.getOperator()) { case MUST_PASS_ONE: // Union all for (int i = 1; i < childHints.size(); i++) { result.addAll(childHints.get(i)); } break; case MUST_PASS_ALL: // Intersect all for (int i = 1; i < childHints.size(); i++) { result.removeAll(childHints.get(i).complement()); } break; default: throw new IllegalStateException("Unknown operator: " + filter.getOperator()); } // Wrap in an ImmutableRangeSet to keep the singleton RangeSet.all() return ImmutableRangeSet.copyOf(result); }
@Override public RangeSet<RowKeyWrapper> getIndexScanHint(FilterList filter) { final List<RangeSet<RowKeyWrapper>> childHints = collectChildHints(filter); if (childHints.isEmpty()) { return ImmutableRangeSet.of(Range.<RowKeyWrapper>all()); } // Optimization else if (childHints.size() == 1) { return childHints.get(0); } TreeRangeSet<RowKeyWrapper> result = TreeRangeSet.create(childHints.get(0)); switch (filter.getOperator()) { case MUST_PASS_ONE: // Union all for (int i = 1; i < childHints.size(); i++) { result.addAll(childHints.get(i)); } break; case MUST_PASS_ALL: // Intersect all for (int i = 1; i < childHints.size(); i++) { result.removeAll(childHints.get(i).complement()); } break; default: throw new IllegalStateException("Unknown operator: " + filter.getOperator()); } // Wrap in an ImmutableRangeSet to keep the singleton RangeSet.all() return ImmutableRangeSet.copyOf(result); }