.setStartKeyClosed(ByteStringer.wrap(startkey.getBytes())) .build();
@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()); }
/** * 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 START_KEY_CLOSED: setStartKeyClosed(other.getStartKeyClosed()); break;
.addRowRanges( 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(); .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("3-range-2-start")) .setEndKeyOpen(ByteString.copyFromUtf8("4-range-2-end"))) .build(), .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("8-range-1-start")) .setEndKeyOpen(ByteString.copyFromUtf8("9-range-1-end"))) .build());
switch (range.lowerBoundType()) { case CLOSED: rowRange.setStartKeyClosed(ByteString.copyFromUtf8(range.lowerEndpoint())); break; case OPEN:
.addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("j")))) .build());
.addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("j")))) .build());
break; case CLOSED: rangeBuilder.setStartKeyClosed(range.getStart()); break; case UNBOUNDED:
@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 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 startOnSplitPointTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder().setStartKeyClosed(ByteString.copyFromUtf8("3-split"))) .build(); // Inclusive start on a split point should generate 2 segments SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("3-split")) .build(); verifySplit( rowSet, splitPoints, RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("3-split")) .setEndKeyClosed(ByteString.copyFromUtf8("3-split"))) .build(), RowSet.newBuilder() .addRowRanges(RowRange.newBuilder().setStartKeyOpen(ByteString.copyFromUtf8("3-split"))) .build()); }
@Test public void testFromProto() { ReadRowsRequest request = ReadRowsRequest.newBuilder() .setTableName(NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, TABLE_ID)) .setAppProfileId(APP_PROFILE_ID) .setFilter(RowFilter.newBuilder().setRowKeyRegexFilter(ByteString.copyFromUtf8(".*"))) .setRows( RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("row-key")) .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("j")) .setEndKeyClosed(ByteString.copyFromUtf8("z")))) .build(); Query query = Query.fromProto(request); assertThat(query.toProto(requestContext)).isEqualTo(request); }
/** * 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 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); }
@Test public void singleRangeUnbounded1BoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges(RowRange.newBuilder().setStartKeyClosed(ByteString.copyFromUtf8("a"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().startClosed("a")); }
@Test public void singleClosedClosedRangeBoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("b"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().startClosed("a").endClosed("b")); }
@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")); }