@Override
public List find(List<IndexClause> ixClause, EntityMetadata m, boolean isRelation, List<String> relations,
int maxResult, List<String> columns)
{
List<Object> entities = new ArrayList<Object>();
Connection conn = null;
try
{
// ixClause can be 0,1 or more!
SlicePredicate slicePredicate = new SlicePredicate();
if (columns != null && !columns.isEmpty())
{
List asList = new ArrayList(32);
for (String colName : columns)
{
if (colName != null)
{
asList.add(UTF8Type.instance.decompose(colName));
}
}
slicePredicate.setColumn_names(asList);
}
else
{
SliceRange sliceRange = new SliceRange();
sliceRange.setStart(ByteBufferUtil.EMPTY_BYTE_BUFFER);
sliceRange.setFinish(ByteBufferUtil.EMPTY_BYTE_BUFFER);
slicePredicate.setSlice_range(sliceRange);
}
conn = getConnection();
if (ixClause.isEmpty())
{
KeyRange keyRange = new KeyRange(maxResult);
keyRange.setStart_key(ByteBufferUtil.EMPTY_BYTE_BUFFER);
keyRange.setEnd_key(ByteBufferUtil.EMPTY_BYTE_BUFFER);
if (m.isCounterColumnType())
{
List<KeySlice> ks = conn.getClient().get_range_slices(new ColumnParent(m.getTableName()),
slicePredicate, keyRange, getConsistencyLevel());
entities = onCounterColumn(m, isRelation, relations, ks);
}
else
{
List<KeySlice> keySlices = conn.getClient().get_range_slices(new ColumnParent(m.getTableName()),
slicePredicate, keyRange, getConsistencyLevel());
if (m.getType().isSuperColumnFamilyMetadata())
{
Map<ByteBuffer, List<SuperColumn>> qResults = ThriftDataResultHelper.transformThriftResult(
ColumnFamilyType.SUPER_COLUMN, keySlices, null);
entities = new ArrayList<Object>(qResults.size());
computeEntityViaSuperColumns(m, isRelation, relations, entities, qResults);
}
else
{
Map<ByteBuffer, List<Column>> qResults = ThriftDataResultHelper.transformThriftResult(
ColumnFamilyType.COLUMN, keySlices, null);
entities = new ArrayList<Object>(qResults.size());
computeEntityViaColumns(m, isRelation, relations, entities, qResults);
}
}
}
else
{
entities = new ArrayList<Object>();
for (IndexClause ix : ixClause)
{
List<KeySlice> keySlices = conn.getClient().get_indexed_slices(new ColumnParent(m.getTableName()),
ix, slicePredicate, getConsistencyLevel());
Map<ByteBuffer, List<Column>> qResults = ThriftDataResultHelper.transformThriftResult(
ColumnFamilyType.COLUMN, keySlices, null);
// iterate through complete map and populate.