package me.prettyprint.cassandra.model.thrift; import static me.prettyprint.cassandra.utils.Assert.notNull; import me.prettyprint.cassandra.model.AbstractSuperColumnQuery; import me.prettyprint.cassandra.model.HSuperColumnImpl; import me.prettyprint.cassandra.model.KeyspaceOperationCallback; import me.prettyprint.cassandra.model.QueryResultImpl; import me.prettyprint.cassandra.service.KeyspaceService; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.Serializer; import me.prettyprint.hector.api.beans.HSuperColumn; import me.prettyprint.hector.api.exceptions.HNotFoundException; import me.prettyprint.hector.api.exceptions.HectorException; import me.prettyprint.hector.api.query.QueryResult; import me.prettyprint.hector.api.query.SuperColumnQuery; import org.apache.cassandra.thrift.ColumnPath; import org.apache.cassandra.thrift.SuperColumn; /** * Thrift implementation of the SuperColumnQuery * * @author Ran Tavory * * @param <SN> * @param <N> * @param <V> */ public final class ThriftSuperColumnQuery<K, SN,N,V> extends AbstractSuperColumnQuery<K, SN, N, V> implements SuperColumnQuery<K, SN, N, V> { /*package*/ public ThriftSuperColumnQuery(Keyspace keyspace, Serializer<K> keySerializer, Serializer<SN> sNameSerializer, Serializer<N> nameSerializer, Serializer<V> valueSerializer) { super(keyspace, keySerializer, sNameSerializer, nameSerializer, valueSerializer); } @Override public QueryResult<HSuperColumn<SN, N, V>> execute() { notNull(columnFamilyName, "columnFamilyName is null"); notNull(superName, "superName is null"); return new QueryResultImpl<HSuperColumn<SN, N, V>>(keyspace.doExecute( new KeyspaceOperationCallback<HSuperColumn<SN, N, V>>() { @Override public HSuperColumn<SN, N, V> doInKeyspace(KeyspaceService ks) throws HectorException { try { ColumnPath cpath = ThriftFactory.createSuperColumnPath(columnFamilyName, superName, (N) null, sNameSerializer, columnNameSerializer); SuperColumn thriftSuperColumn = ks.getSuperColumn(keySerializer.toByteBuffer(key), cpath); if (thriftSuperColumn == null) { return null; } return new HSuperColumnImpl<SN, N, V>(thriftSuperColumn, sNameSerializer, columnNameSerializer, valueSerializer); } catch (HNotFoundException e) { return null; } } }, consistency), this); } }