package me.prettyprint.cassandra.model.thrift;
import me.prettyprint.cassandra.model.AbstractColumnQuery;
import me.prettyprint.cassandra.model.HColumnImpl;
import me.prettyprint.cassandra.model.KeyspaceOperationCallback;
import me.prettyprint.cassandra.model.QueryResultImpl;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.cassandra.serializers.TypeInferringSerializer;
import me.prettyprint.cassandra.service.KeyspaceService;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HNotFoundException;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.QueryResult;
import org.apache.cassandra.thrift.Column;
/**
* Thrift implementation of the ColumnQuery type.
*
* @author Ran Tavory
*
* @param <N>
* column name type
* @param <V>
* value type
*/
public class ThriftColumnQuery<K, N, V> extends AbstractColumnQuery<K, N, V> implements
ColumnQuery<K, N, V> {
public ThriftColumnQuery(Keyspace keyspace, Serializer<K> keySerializer,
Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
super(keyspace, keySerializer, nameSerializer, valueSerializer);
}
public ThriftColumnQuery(Keyspace keyspace, Serializer<V> valueSerializer) {
super(keyspace, TypeInferringSerializer.<K> get(), TypeInferringSerializer.<N> get(),
valueSerializer);
}
@SuppressWarnings("unchecked")
public ThriftColumnQuery(Keyspace keyspaceOperator) {
super(keyspaceOperator, TypeInferringSerializer.<K> get(), TypeInferringSerializer.<N> get(),
(Serializer<V>) StringSerializer.get());
}
@Override
public QueryResult<HColumn<N, V>> execute() {
return new QueryResultImpl<HColumn<N, V>>(
keyspace.doExecute(new KeyspaceOperationCallback<HColumn<N, V>>() {
@Override
public HColumn<N, V> doInKeyspace(KeyspaceService ks) throws HectorException {
try {
Column thriftColumn = ks.getColumn(keySerializer.toByteBuffer(key),
ThriftFactory.createColumnPath(columnFamilyName, name, columnNameSerializer));
return new HColumnImpl<N, V>(thriftColumn, columnNameSerializer, valueSerializer);
} catch (HNotFoundException e) {
return null;
}
}
}, consistency), this);
}
}