package me.prettyprint.cassandra.model; import java.util.Map; 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 org.apache.cassandra.thrift.ColumnParent; /** * Does a multi_get_count within a given superColumn * * @author zznate */ public class MultigetSubCountQuery<K,SN,N> extends MultigetCountQuery<K, N> { private final Serializer<SN> superNameSerializer; private SN superColumnName; public MultigetSubCountQuery(Keyspace ko, Serializer<SN> superNameSerializer, Serializer<K> keySerializer, Serializer<N> nameSerializer) { super(ko, keySerializer, nameSerializer); Assert.notNull(superNameSerializer, "superNameSerializer is null"); this.superNameSerializer = superNameSerializer; } public MultigetSubCountQuery<K,SN,N> setSuperColumn(SN sc) { superColumnName = sc; return this; } @Override public QueryResult<Map<K, Integer>> execute() { Assert.notNull(keys, "keys list is null"); Assert.notNull(columnFamily, "columnFamily is null"); Assert.notNull(superColumnName, "superColumnName is null"); return new QueryResultImpl<Map<K,Integer>>(keyspace.doExecute( new KeyspaceOperationCallback<Map<K,Integer>>() { @Override public Map<K,Integer> doInKeyspace(KeyspaceService ks) throws HectorException { ColumnParent columnParent = new ColumnParent(columnFamily); columnParent.setSuper_column(superNameSerializer.toByteBuffer(superColumnName)); Map<K,Integer> counts = keySerializer.fromBytesMap( ks.multigetCount(keySerializer.toBytesList(keys), columnParent, slicePredicate.toThrift())); return counts; } }, consistency), this); } }