package me.prettyprint.cassandra.model; import java.util.Collection; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.Serializer; import me.prettyprint.hector.api.query.Query; import org.apache.cassandra.thrift.SlicePredicate; /** * Base type for SliceQuery, RangeSliceQuery and MultigetSliceQuery * @author Ran Tavory * * @param <N> * @param <T> */ public abstract class AbstractSliceQuery<K,N,V,T> extends AbstractQuery<K,N,V,T> implements Query<T> { protected final HSlicePredicate<N> slicePredicate; public AbstractSliceQuery(Keyspace k, Serializer<K> keySerializer, Serializer<N> nameSerializer, Serializer<V> valueSerializer) { super(k, keySerializer, nameSerializer, valueSerializer); slicePredicate = new HSlicePredicate<N>(nameSerializer); } /** * Sets the column names to be retrieved by this query * @param columns a varargs of column names */ public Query<T> setColumnNames(N... columnNames) { if ( columnNames != null && columnNames.length > 0) { slicePredicate.setColumnNames(columnNames); } else { slicePredicate.setKeysOnlyPredicate(); } return this; } /** * Sets the column names to be retrieved by this query * @param columns a Collection of column names */ public Query<T> setColumnNames(Collection<N> columnNames) { if ( columnNames != null && columnNames.size() > 0) { slicePredicate.setColumnNames(columnNames); } else { slicePredicate.setKeysOnlyPredicate(); } return this; } /** * Wraps the underlying call to {@link HSlicePredicate#setKeysOnlyPredicate()} * Use this for a substantial performance increase when you only need the keys returned */ public AbstractSliceQuery<K,N,V,T> setReturnKeysOnly() { slicePredicate.setKeysOnlyPredicate(); return this; } public Collection<N> getColumnNames() { return slicePredicate.getColumnNames(); } /** * Set a predicate of start/finish to retrieve a list of columns in this range. * * @param start Start key * @param finish End key * @param reversed * @param count * @return */ public Query<T> setRange(N start, N finish, boolean reversed, int count) { slicePredicate.setRange(start, finish, reversed, count); return this; } /** * * @return the thrift representation of the predicate */ public SlicePredicate getPredicate() { return slicePredicate.toThrift(); } protected String toStringInternal() { return slicePredicate.toString(); } }