@Test public void multipleRangeBoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyOpen(ByteString.copyFromUtf8("m"))) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("q")) .setEndKeyOpen(ByteString.copyFromUtf8("z"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.create("a", "z")); }
@Test public void rowRangeTest() { Query query = Query.create(TABLE_ID) .range("simple-begin", "simple-end") .range(ByteString.copyFromUtf8("byte-begin"), ByteString.copyFromUtf8("byte-end")) .range(ByteStringRange.create("range-begin", "range-end")); Builder expectedProto = expectedProtoBuilder(); expectedProto .getRowsBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("simple-begin")) .setEndKeyOpen(ByteString.copyFromUtf8("simple-end"))) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("byte-begin")) .setEndKeyOpen(ByteString.copyFromUtf8("byte-end"))) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("range-begin")) .setEndKeyOpen(ByteString.copyFromUtf8("range-end"))); ReadRowsRequest actualProto = query.toProto(requestContext); assertThat(actualProto).isEqualTo(expectedProto.build()); }
@Test public void noSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("a")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("p")) .setEndKeyOpen(ByteString.copyFromUtf8("q"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE).build(); verifySplit(rowSet, splitPoints, rowSet); }
/** * Adds a range to be looked up. * * @param start The beginning of the range (inclusive). Can be null to represent negative * infinity. * @param end The end of the range (exclusive). Can be null to represent positive infinity. */ public Query range(ByteString start, ByteString end) { RowRange.Builder rangeBuilder = RowRange.newBuilder(); if (start != null) { rangeBuilder.setStartKeyClosed(start); } if (end != null) { rangeBuilder.setEndKeyOpen(end); } builder.getRowsBuilder().addRowRanges(rangeBuilder.build()); return this; }
@Override public boolean start() throws IOException { RowSet.Builder rowSetBuilder = RowSet.newBuilder(); for (ByteKeyRange sourceRange : source.getRanges()) { rowSetBuilder = rowSetBuilder.addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFrom(sourceRange.getStartKey().getValue())) .setEndKeyOpen(ByteString.copyFrom(sourceRange.getEndKey().getValue()))); } RowSet rowSet = rowSetBuilder.build(); String tableNameSr = session.getOptions().getInstanceName().toTableNameStr(source.getTableId().get()); ReadRowsRequest.Builder requestB = ReadRowsRequest.newBuilder().setRows(rowSet).setTableName(tableNameSr); if (source.getRowFilter() != null) { requestB.setFilter(source.getRowFilter()); } results = session.getDataClient().readRows(requestB.build()); return advance(); }
/** * Adds a range to scan. This is similar to calling a combination of * {@link Scan#setStartRow(byte[])} and {@link Scan#setStopRow(byte[])}. Other ranges can be * constructed by creating a {@link RowRange} and calling {@link #addRange(RowRange)} * @param startRow * @param stopRow */ public void addRange(byte[] startRow, byte[] stopRow) { addRange(RowRange.newBuilder() .setStartKeyClosed(ByteStringer.wrap(startRow)) .setEndKeyOpen(ByteStringer.wrap(stopRow)) .build()); }
/** * Adds a range to scan. This is similar to calling a combination of * {@link Scan#setStartRow(byte[])} and {@link Scan#setStopRow(byte[])}. Other ranges can be * constructed by creating a {@link RowRange} and calling {@link #addRange(RowRange)} * @param startRow * @param stopRow */ public void addRange(byte[] startRow, byte[] stopRow) { addRange(RowRange.newBuilder() .setStartKeyClosed(ByteStringer.wrap(startRow)) .setEndKeyOpen(ByteStringer.wrap(stopRow)) .build()); }
case END_KEY_OPEN: setEndKeyOpen(other.getEndKeyOpen()); break;
RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("8-range-1-start")) .setEndKeyOpen(ByteString.copyFromUtf8("9-range-1-end"))) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("3-range-2-start")) .setEndKeyOpen(ByteString.copyFromUtf8("4-range-2-end"))) .build(); RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("3-range-2-start")) .setEndKeyOpen(ByteString.copyFromUtf8("4-range-2-end"))) .build(), RowSet.newBuilder() RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("8-range-1-start")) .setEndKeyOpen(ByteString.copyFromUtf8("9-range-1-end"))) .build());
RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("j")) .setEndKeyOpen(ByteString.copyFromUtf8("z")))) .build());
break; case OPEN: rowRange.setEndKeyOpen(ByteString.copyFromUtf8(range.upperEndpoint())); break; default:
rangeBuilder.setEndKeyOpen(range.getEnd()); break; case CLOSED:
RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("j")) .setEndKeyOpen(ByteString.copyFromUtf8("z")))) .build());
@Test public void rangeLeftOfSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("0-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("1-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("2-range-end"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("3-split")) .build(); verifySplit( rowSet, splitPoints, RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("0-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("1-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("2-range-end"))) .build(), null); }
@Test public void rangeRightOfSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("9-row-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("5-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("7-range-end"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("3-split")) .build(); verifySplit( rowSet, splitPoints, null, RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("9-row-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("5-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("7-range-end"))) .build()); }
@Test public void rangeImmediatelyLeftOfSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("0-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("1-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("2-range-end"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("2-range-end")) .build(); verifySplit( rowSet, splitPoints, RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("0-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("1-range-start")) .setEndKeyOpen(ByteString.copyFromUtf8("2-range-end"))) .build(), null); }
@Test public void unboundedRangeLeftOfSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder().setEndKeyOpen(ByteString.copyFromUtf8("1-range-end"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("5-split")) .build(); verifySplit( rowSet, splitPoints, RowSet.newBuilder() .addRowRanges( RowRange.newBuilder().setEndKeyOpen(ByteString.copyFromUtf8("1-range-end"))) .build(), null); }
/** * Adds a range to be looked up. * * @param start The beginning of the range (inclusive). Can be null to represent negative * infinity. * @param end The end of the range (exclusive). Can be null to represent positive infinity. */ public Query range(ByteString start, ByteString end) { RowRange.Builder rangeBuilder = RowRange.newBuilder(); if (start != null) { rangeBuilder.setStartKeyClosed(start); } if (end != null) { rangeBuilder.setEndKeyOpen(end); } builder.getRowsBuilder().addRowRanges(rangeBuilder.build()); return this; }
@Test public void singleClosedOpenRangeBoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyOpen(ByteString.copyFromUtf8("b"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().startClosed("a").endOpen("b")); }
@Test public void singleOpenOpenRangeBoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("a")) .setEndKeyOpen(ByteString.copyFromUtf8("b"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().startOpen("a").endOpen("b")); }