package me.prettyprint.cassandra.model.thrift;
import me.prettyprint.cassandra.model.KeyspaceOperationCallback;
import me.prettyprint.cassandra.model.QueryResultImpl;
import me.prettyprint.cassandra.service.KeyspaceService;
import me.prettyprint.cassandra.utils.Assert;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.QueryResult;
import me.prettyprint.hector.api.query.SubCountQuery;
import org.apache.cassandra.thrift.ColumnParent;
/**
* Counts sub columns for a of a key and a super column in a super column family
*
* @author Ran Tavory
*
* @param <SN> super column name tyoe
*/
public final class ThriftSubCountQuery<K,SN,N> extends AbstractThriftCountQuery<K,N>
implements SubCountQuery<K, SN, N> {
private final Serializer<SN> superNameSerializer;
private SN superColumnName;
public ThriftSubCountQuery(Keyspace keyspace, Serializer<K> keySerializer,
Serializer<SN> superNameExtractor, Serializer<N> nameSerializer) {
super(keyspace, keySerializer, nameSerializer);
Assert.notNull(superNameExtractor, "superNameExtractor is null");
this.superNameSerializer = superNameExtractor;
}
@Override
public SubCountQuery<K,SN,N> setSuperColumn(SN sc) {
superColumnName = sc;
return this;
}
@Override
public QueryResult<Integer> execute() {
Assert.notNull(key, "key is null");
Assert.notNull(columnFamily, "columnFamily is null");
Assert.notNull(superColumnName, "superColumnName is null");
return new QueryResultImpl<Integer>(keyspace.doExecute(
new KeyspaceOperationCallback<Integer>() {
@Override
public Integer doInKeyspace(KeyspaceService ks) throws HectorException {
ColumnParent columnParent = new ColumnParent(columnFamily);
columnParent.setSuper_column(superNameSerializer.toByteBuffer(superColumnName));
Integer count = ks.getCount(keySerializer.toByteBuffer(key), columnParent,
slicePredicate.toThrift());
return count;
}
}, consistency), this);
}
@Override
public String toString() {
return "SubCountQuery(" + columnFamily + "," + key + "," + superColumnName + ")";
}
@SuppressWarnings("unchecked")
@Override
public SubCountQuery<K,SN,N> setKey(K key) {
return (SubCountQuery<K,SN,N>) super.setKey(key);
}
@SuppressWarnings("unchecked")
@Override
public SubCountQuery<K,SN,N> setColumnFamily(String cf) {
return (SubCountQuery<K,SN,N>) super.setColumnFamily(cf);
}
@SuppressWarnings("unchecked")
@Override
public SubCountQuery<K,SN,N> setColumnNames(N... columnNames) {
return (SubCountQuery<K, SN, N>) super.setColumnNames(columnNames);
}
@SuppressWarnings("unchecked")
@Override
public SubCountQuery<K,SN,N> setRange(N start, N finish, int count) {
return (SubCountQuery<K, SN, N>) super.setRange(start, finish, count);
}
}