package me.prettyprint.cassandra.model.thrift; import me.prettyprint.cassandra.model.ExecutingKeyspace; import me.prettyprint.cassandra.model.HSlicePredicate; 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.HConsistencyLevel; 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.Query; import me.prettyprint.hector.api.query.QueryResult; import org.apache.cassandra.thrift.ColumnParent; /** * A base and abstract class to the count querues * @author Ran Tavory * */ /*package*/ abstract class AbstractThriftCountQuery<K, N> implements Query<Integer>{ protected final ExecutingKeyspace keyspace; protected String columnFamily; protected K key; protected final Serializer<K> keySerializer; /** The slice predicate for which the count it performed*/ protected final HSlicePredicate<N> slicePredicate; protected HConsistencyLevel consistency; public AbstractThriftCountQuery(Keyspace k, Serializer<K> keySerializer, Serializer<N> nameSerializer) { Assert.notNull(k, "keyspaceOperator can't be null"); Assert.notNull(nameSerializer, "nameSerializer is null"); Assert.notNull(keySerializer, "keySerializer is null"); this.keyspace = (ExecutingKeyspace) k; this.keySerializer = keySerializer; this.slicePredicate = new HSlicePredicate<N>(nameSerializer); } public Query<Integer> setKey(K key) { this.key = key; return this; } public Query<Integer> setColumnFamily(String cf) { this.columnFamily = cf; return this; } @Override public HConsistencyLevel getConsistencyLevel() { return this.consistency; } @Override public void setConsistencyLevel(HConsistencyLevel level) { this.consistency = level; } protected QueryResult<Integer> countColumns() { Assert.notNull(key, "key is null"); Assert.notNull(columnFamily, "columnFamily is null"); return new QueryResultImpl<Integer>(keyspace.doExecute( new KeyspaceOperationCallback<Integer>() { @Override public Integer doInKeyspace(KeyspaceService ks) throws HectorException { ColumnParent columnParent = new ColumnParent(columnFamily); return ks.getCount(keySerializer.toByteBuffer(key), columnParent, slicePredicate.toThrift()); } }, consistency), this); } public Query<Integer> setColumnNames(N... columnNames) { slicePredicate.setColumnNames(columnNames); return this; } public Query<Integer> setRange(N start, N finish, int count) { slicePredicate.setRange(start, finish, false, count); return this; } }