private void verifyRowsDeletedFromSweepQueue(List<SweepableCellsRow> rows) { ArgumentCaptor<RangeRequest> captor = ArgumentCaptor.forClass(RangeRequest.class); verify(spiedKvs, atLeast(0)).deleteRange(eq(SWEEP_QUEUE_TABLE), captor.capture()); List<RangeRequest> expectedRangesToDelete = rows.stream() .map(row -> RangeRequest.builder() .startRowInclusive(row) .endRowExclusive(RangeRequests.nextLexicographicName(row.persistToBytes())) .build()) .collect(Collectors.toList()); assertThat(captor.getAllValues()).hasSameElementsAs(expectedRangesToDelete); }
@Test public void testKeyValueEmptyRange() { putDirect("row1", "col1", "v1", 0); byte[] rowBytes = PtBytes.toBytes("row1"); ImmutableList<RowResult<Value>> list = ImmutableList.copyOf(keyValueService.getRange(TEST_TABLE, RangeRequest.builder().startRowInclusive(rowBytes).endRowExclusive(rowBytes).build(), 1)); assertTrue(list.isEmpty()); }
@JsonIgnore public Builder getBuilder() { return new Builder(reverse) .endRowExclusive(endExclusive) .startRowInclusive(startInclusive) .batchHint(batchHint) .retainColumns(columns); }
public RangeRequest getRangeRequest() { return RangeRequest.builder().startRowInclusive(startRow).endRowExclusive(endRow).build(); }
@Override protected List<byte[]> getRange(Transaction txn, long startInclusive, long endExclusive) { KvRowsTable table = BenchmarksTableFactory.of().getKvRowsTable(txn); return table.getRange( RangeRequest.builder() .startRowInclusive(KvRowsRow.of(bucket, startInclusive)) .endRowExclusive(KvRowsRow.of(bucket, endExclusive)) .batchHint(batchSize) .build()) .hintBatchSize(batchSize) .transform(KvRowsRowResult::getData) .immutableCopy(); }
@Test public void getRangeThrows() { RangeRequest range = RangeRequest.builder().endRowExclusive(SECOND_ROW).build(); ClosableIterator<RowResult<Value>> resultIterator = getTestKvs().getRange(TEST_TABLE, range, Long.MAX_VALUE); assertThrowsAtlasDbDependencyExceptionAndDoesNotChangeCassandraSchema(resultIterator::hasNext); }
@Test public void canGetRange() { RangeRequest range = RangeRequest.builder().endRowExclusive(SECOND_ROW).build(); ClosableIterator<RowResult<Value>> resultIterator = getTestKvs().getRange(TEST_TABLE, range, Long.MAX_VALUE); Map<byte[], Value> expectedColumns = ImmutableMap.of(FIRST_COLUMN, VALUE, SECOND_COLUMN, VALUE); RowResult<Value> expectedRowResult = RowResult.create(FIRST_ROW, ImmutableSortedMap.copyOf(expectedColumns, UnsignedBytes.lexicographicalComparator())); assertThat(resultIterator).containsExactlyElementsOf(ImmutableList.of(expectedRowResult)); }
private void setupTestRowsZeroOneAndTwoAndDeleteFrom(byte[] start, byte[] end, boolean reverse) { putTestDataForRowsZeroOneAndTwo(); RangeRequest range = RangeRequest.builder(reverse) .startRowInclusive(start) .endRowExclusive(end) .build(); keyValueService.deleteRange(TEST_TABLE, range); }
@Test public void testEmpty() { RangeRequest request = RangeRequest.builder().endRowExclusive(RangeRequests.getFirstRowName()).build(); Assert.assertTrue(request.isEmptyRange()); request = RangeRequest.reverseBuilder().endRowExclusive(RangeRequests.getLastRowName()).build(); Assert.assertTrue(request.isEmptyRange()); }
@Test public void endOnly() { RangeRequest request = RangeRequest.builder().endRowExclusive(END).build(); WhereClauses whereClauses = WhereClauses.create("i", request); List<String> expectedClauses = ImmutableList.of("i.row_name < ?"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(END)); }
@Test public void getRangeOfTimestampsThrows() { RangeRequest range = RangeRequest.builder().endRowExclusive(SECOND_ROW).build(); try (ClosableIterator<RowResult<Set<Long>>> resultIterator = getTestKvs() .getRangeOfTimestamps(TEST_TABLE, range, Long.MAX_VALUE)) { assertThatThrownBy(resultIterator::next).isInstanceOf(AtlasDbDependencyException.class); } }
static RangeRequest metadataRangeRequestForTable(TableReference tableRef) { byte[] startRow = upperCaseTableReferenceToBytes(tableRef); byte[] endRow = lowerCaseTableReferenceToBytes(tableRef); return RangeRequest.builder() .startRowInclusive(startRow) .endRowExclusive(RangeRequests.nextLexicographicName(endRow)) .retainColumns(ImmutableSet.of(METADATA_COL)) .build(); }
@Test public void usesDifferentTableIdentifier() { RangeRequest request = RangeRequest.builder().startRowInclusive(START).endRowExclusive(END).retainColumns( ColumnSelection.create(ImmutableList.of(COL1))).build(); WhereClauses whereClauses = WhereClauses.create("other", request); List<String> expectedClauses = ImmutableList.of( "other.row_name >= ?", "other.row_name < ?", "other.col_name IN (?)"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(START, END, COL1)); }
@Test public void whereClausesMultiColumn() { RangeRequest request = RangeRequest.builder().startRowInclusive(START).endRowExclusive(END).retainColumns( ColumnSelection.create(ImmutableList.of(COL1, COL2, COL3))).build(); WhereClauses whereClauses = WhereClauses.create("i", request); List<String> expectedClauses = ImmutableList.of("i.row_name >= ?", "i.row_name < ?", "i.col_name IN (?,?,?)"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(START, END, COL1, COL2, COL3)); }
private RangeRequest computeRangeRequestForRows(byte[] startRowInclusive, byte[] endRowInclusive) { return RangeRequest.builder() .startRowInclusive(startRowInclusive) .endRowExclusive(RangeRequests.nextLexicographicName(endRowInclusive)) .retainColumns(ColumnSelection.all()) .build(); }
@Test public void whereClausesWithExtraClause() { RangeRequest request = RangeRequest.builder().startRowInclusive(START).endRowExclusive(END).build(); String extraClause = "i.foo = bar"; WhereClauses whereClauses = WhereClauses.create("i", request, extraClause); List<String> expectedClauses = ImmutableList.of("i.row_name >= ?", "i.row_name < ?", extraClause); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(START, END)); }
@Test public void whereClausesOneColumn() { RangeRequest request = RangeRequest.builder().startRowInclusive(START).endRowExclusive(END).retainColumns( ColumnSelection.create(ImmutableList.of(COL1))).build(); WhereClauses whereClauses = WhereClauses.create("i", request); List<String> expectedClauses = ImmutableList.of("i.row_name >= ?", "i.row_name < ?", "i.col_name IN (?)"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(START, END, COL1)); }
@Test public void withReverseRange() { RangeRequest request = RangeRequest.reverseBuilder().startRowInclusive(END).endRowExclusive(START).build(); WhereClauses whereClauses = WhereClauses.create("i", request); List<String> expectedClauses = ImmutableList.of("i.row_name <= ?", "i.row_name > ?"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(END, START)); }
@Override protected Map<String, StringValue> getRangeSecondColumnOnlyFirstTwoResults( Transaction transaction, String startRowKey, String endRowKey) { SchemaApiTestV2Table table = tableFactory.getSchemaApiTestV2Table(transaction); RangeRequest rangeRequest = RangeRequest.builder() .startRowInclusive(SchemaApiTestTable.SchemaApiTestRow.of(startRowKey).persistToBytes()) .endRowExclusive(SchemaApiTestTable.SchemaApiTestRow.of(endRowKey).persistToBytes()) .build(); return table.getSmallRowRangeColumn2(rangeRequest, 2); }
@Test public void whereClausesNoColumns() { RangeRequest request = RangeRequest.builder().startRowInclusive(START).endRowExclusive(END).build(); WhereClauses whereClauses = WhereClauses.create("i", request); List<String> expectedClauses = ImmutableList.of("i.row_name >= ?", "i.row_name < ?"); assertEquals(whereClauses.getClauses(), expectedClauses); checkWhereArguments(whereClauses, ImmutableList.of(START, END)); }