use of org.apache.cassandra.cql3.ColumnIdentifier in project cassandra by apache.
the class KeyspaceTest method assertRowsInSlice.
private static void assertRowsInSlice(ColumnFamilyStore cfs, String key, int sliceStart, int sliceEnd, int limit, boolean reversed, String columnValuePrefix) {
Clustering startClustering = Clustering.make(ByteBufferUtil.bytes(sliceStart));
Clustering endClustering = Clustering.make(ByteBufferUtil.bytes(sliceEnd));
Slices slices = Slices.with(cfs.getComparator(), Slice.make(startClustering, endClustering));
ClusteringIndexSliceFilter filter = new ClusteringIndexSliceFilter(slices, reversed);
SinglePartitionReadCommand command = singlePartitionSlice(cfs, key, filter, limit);
try (ReadExecutionController executionController = command.executionController();
PartitionIterator iterator = command.executeInternal(executionController)) {
try (RowIterator rowIterator = iterator.next()) {
if (reversed) {
for (int i = sliceEnd; i >= sliceStart; i--) {
Row row = rowIterator.next();
Cell cell = row.getCell(cfs.metadata().getColumn(new ColumnIdentifier("c", false)));
assertEquals(ByteBufferUtil.bytes(columnValuePrefix + i), cell.value());
}
} else {
for (int i = sliceStart; i <= sliceEnd; i++) {
Row row = rowIterator.next();
Cell cell = row.getCell(cfs.metadata().getColumn(new ColumnIdentifier("c", false)));
assertEquals(ByteBufferUtil.bytes(columnValuePrefix + i), cell.value());
}
}
assertFalse(rowIterator.hasNext());
}
}
}
use of org.apache.cassandra.cql3.ColumnIdentifier in project cassandra by apache.
the class KeyspaceTest method assertRowsInResult.
private static void assertRowsInResult(ColumnFamilyStore cfs, SinglePartitionReadCommand command, int... columnValues) {
try (ReadExecutionController executionController = command.executionController();
PartitionIterator iterator = command.executeInternal(executionController)) {
if (columnValues.length == 0) {
if (iterator.hasNext())
fail("Didn't expect any results, but got rows starting with: " + iterator.next().next().toString(cfs.metadata()));
return;
}
try (RowIterator rowIterator = iterator.next()) {
for (int expected : columnValues) {
Row row = rowIterator.next();
Cell cell = row.getCell(cfs.metadata().getColumn(new ColumnIdentifier("c", false)));
assertEquals(String.format("Expected %s, but got %s", ByteBufferUtil.bytesToHex(ByteBufferUtil.bytes(expected)), ByteBufferUtil.bytesToHex(cell.value())), ByteBufferUtil.bytes(expected), cell.value());
}
assertFalse(rowIterator.hasNext());
}
}
}
use of org.apache.cassandra.cql3.ColumnIdentifier in project cassandra by apache.
the class SecondaryIndexTest method testUpdatesToMemtableData.
@Test
public void testUpdatesToMemtableData() throws Throwable {
// verify the contract specified by Index.Indexer::updateRow(oldRowData, newRowData),
// when a row in the memtable is updated, the indexer should be informed of:
// * new columns
// * removed columns
// * columns whose value, timestamp or ttl have been modified.
// Any columns which are unchanged by the update are not passed to the Indexer
// Note that for simplicity this test resets the index between each scenario
createTable("CREATE TABLE %s (k int, c int, v1 int, v2 int, PRIMARY KEY (k,c))");
createIndex(String.format("CREATE CUSTOM INDEX test_index ON %%s() USING '%s'", StubIndex.class.getName()));
execute("INSERT INTO %s (k, c, v1, v2) VALUES (0, 0, 0, 0) USING TIMESTAMP 0");
ColumnMetadata v1 = getCurrentColumnFamilyStore().metadata().getColumn(new ColumnIdentifier("v1", true));
ColumnMetadata v2 = getCurrentColumnFamilyStore().metadata().getColumn(new ColumnIdentifier("v2", true));
StubIndex index = (StubIndex) getCurrentColumnFamilyStore().indexManager.getIndexByName("test_index");
assertEquals(1, index.rowsInserted.size());
// Overwrite a single value, leaving the other untouched
execute("UPDATE %s USING TIMESTAMP 1 SET v1=1 WHERE k=0 AND c=0");
assertEquals(1, index.rowsUpdated.size());
Row oldRow = index.rowsUpdated.get(0).left;
assertEquals(1, oldRow.size());
validateCell(oldRow.getCell(v1), v1, ByteBufferUtil.bytes(0), 0);
Row newRow = index.rowsUpdated.get(0).right;
assertEquals(1, newRow.size());
validateCell(newRow.getCell(v1), v1, ByteBufferUtil.bytes(1), 1);
index.reset();
// Overwrite both values
execute("UPDATE %s USING TIMESTAMP 2 SET v1=2, v2=2 WHERE k=0 AND c=0");
assertEquals(1, index.rowsUpdated.size());
oldRow = index.rowsUpdated.get(0).left;
assertEquals(2, oldRow.size());
validateCell(oldRow.getCell(v1), v1, ByteBufferUtil.bytes(1), 1);
validateCell(oldRow.getCell(v2), v2, ByteBufferUtil.bytes(0), 0);
newRow = index.rowsUpdated.get(0).right;
assertEquals(2, newRow.size());
validateCell(newRow.getCell(v1), v1, ByteBufferUtil.bytes(2), 2);
validateCell(newRow.getCell(v2), v2, ByteBufferUtil.bytes(2), 2);
index.reset();
// Delete one value
execute("DELETE v1 FROM %s USING TIMESTAMP 3 WHERE k=0 AND c=0");
assertEquals(1, index.rowsUpdated.size());
oldRow = index.rowsUpdated.get(0).left;
assertEquals(1, oldRow.size());
validateCell(oldRow.getCell(v1), v1, ByteBufferUtil.bytes(2), 2);
newRow = index.rowsUpdated.get(0).right;
assertEquals(1, newRow.size());
Cell newCell = newRow.getCell(v1);
assertTrue(newCell.isTombstone());
assertEquals(3, newCell.timestamp());
index.reset();
// Modify the liveness of the primary key, the delta rows should contain
// no cell data as only the pk was altered, but it should illustrate the
// change to the liveness info
execute("INSERT INTO %s(k, c) VALUES (0, 0) USING TIMESTAMP 4");
assertEquals(1, index.rowsUpdated.size());
oldRow = index.rowsUpdated.get(0).left;
assertEquals(0, oldRow.size());
assertEquals(0, oldRow.primaryKeyLivenessInfo().timestamp());
newRow = index.rowsUpdated.get(0).right;
assertEquals(0, newRow.size());
assertEquals(4, newRow.primaryKeyLivenessInfo().timestamp());
}
use of org.apache.cassandra.cql3.ColumnIdentifier in project stargate-core by tuplejump.
the class RowIndexSupport method loadOldRow.
private void loadOldRow(DecoratedKey dk, ByteBuffer pkBuf, List<Field> fields) {
CellName clusteringKey = tableMapper.makeClusteringKey(pkBuf);
Composite start = tableMapper.start(clusteringKey);
Composite end = tableMapper.end(start);
ColumnSlice columnSlice = new ColumnSlice(start, end);
SliceQueryFilter sliceQueryFilter = new SliceQueryFilter(columnSlice, false, Integer.MAX_VALUE);
QueryFilter queryFilter = new QueryFilter(dk, tableMapper.table.name, sliceQueryFilter, new Date().getTime());
ColumnFamily columnFamily = tableMapper.table.getColumnFamily(queryFilter);
Map<CellName, ColumnFamily> fullSlice = tableMapper.getRows(columnFamily);
ColumnFamily oldDocument = fullSlice.get(clusteringKey);
for (Cell cell : oldDocument) {
CellName cellName = cell.name();
ColumnIdentifier cql3ColName = cellName.cql3ColumnName(tableMapper.cfMetaData);
String actualColName = cql3ColName.toString();
ColumnDefinition columnDefinition = tableMapper.cfMetaData.getColumnDefinition(cql3ColName);
if (options.shouldIndex(actualColName)) {
addFields(cell, actualColName, columnDefinition, fields);
}
}
}
Aggregations