RowRange leftSubRange = rowRange.toBuilder().setEndKeyClosed(splitPoint).build(); segment.addRowRanges(leftSubRange);
@Test public void rangeExactlyFitsSplitTest() { RowSet rowSet = RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("5-split")) .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("3-split")) .setEndKeyClosed(ByteString.copyFromUtf8("5-split"))) .build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("3-split")) .add(ByteString.copyFromUtf8("5-split")) .build(); verifySplit( rowSet, splitPoints, null, RowSet.newBuilder() .addRowKeys(ByteString.copyFromUtf8("5-split")) .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("3-split")) .setEndKeyClosed(ByteString.copyFromUtf8("5-split"))) .build(), null); }
@Test public void singleRangeOpenClosedBoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges( RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("b"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().startOpen("a").endClosed("b")); }
RowRange leftSubRange = rowRange.toBuilder().setEndKeyClosed(splitPoint).build(); segment.addRowRanges(leftSubRange);
switch (guavaRange.upperBoundType()) { case CLOSED: btRange.setEndKeyClosed(guavaRange.upperEndpoint().getKey()); break; case OPEN:
setEndKeyClosed(other.getEndKeyClosed()); break;
break; case CLOSED: rangeBuilder.setEndKeyClosed(range.getEnd()); break; case UNBOUNDED:
range.setEndKeyClosed(stopRow);
setEndKeyClosed(other.getEndKeyClosed()); break;
.addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("a"))) .addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("b"))) .setEndKeyClosed(ByteString.copyFromUtf8("e"))) .setEndKeyClosed(ByteString.copyFromUtf8("f"))) .addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("a"))) .addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("a"))) .build(), RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("b"))) .setEndKeyClosed(ByteString.copyFromUtf8("d"))) .build(), RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("d")) .setEndKeyClosed(ByteString.copyFromUtf8("e"))) .setEndKeyClosed(ByteString.copyFromUtf8("f"))) .build(), RowRange.newBuilder() .setStartKeyOpen(ByteString.copyFromUtf8("m"))
setEndKeyClosed(other.getEndKeyClosed()); break;
RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("j")))) .build()); assertThat(subQueries.get(1).toProto(requestContext))
switch (range.upperBoundType()) { case CLOSED: rowRange.setEndKeyClosed(ByteString.copyFromUtf8(range.upperEndpoint())); break; case OPEN:
RowRange.newBuilder() .setStartKeyClosed(ByteString.copyFromUtf8("a")) .setEndKeyClosed(ByteString.copyFromUtf8("j")))) .build()); assertThat(subQueries.get(1).toProto(requestContext))
break; case CLOSED: rangeBuilder.setEndKeyClosed(range.getEnd()); break; case UNBOUNDED:
@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); }
@Test public void splitEmptyTest() { RowSet rowSet = RowSet.newBuilder().build(); SortedSet<ByteString> splitPoints = ImmutableSortedSet.orderedBy(ByteStringComparator.INSTANCE) .add(ByteString.copyFromUtf8("a")) .build(); verifySplit( rowSet, splitPoints, RowSet.newBuilder() .addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("a"))) .build(), RowSet.newBuilder() .addRowRanges(RowRange.newBuilder().setStartKeyOpen(ByteString.copyFromUtf8("a"))) .build()); }
@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 singleRangeUnbounded2BoundTest() { RowSet rowSet = RowSet.newBuilder() .addRowRanges(RowRange.newBuilder().setEndKeyClosed(ByteString.copyFromUtf8("z"))) .build(); ByteStringRange actual = RowSetUtil.getBound(rowSet); assertThat(actual).isEqualTo(ByteStringRange.unbounded().endClosed("z")); }