package me.prettyprint.cassandra.service;
import java.util.Iterator;
import me.prettyprint.cassandra.model.IndexedSlicesQuery;
import me.prettyprint.hector.api.beans.Row;
/**
* This class will soon be removed, use {@link RangeSlicesIterator} instead.<br>
* <br>
* Iterates over the index slices, automatically refreshing the query until all matching rows are returned.
*
* @author thrykol
*/
@Deprecated
public class IndexedSlicesIterator<K, N, V> implements Iterator<Row<K, N, V>> {
private IndexedSlicesQuery<K, N, V> query;
private K startKey;
private Iterator<Row<K, N, V>> iterator;
private int rows = 0;
public IndexedSlicesIterator(IndexedSlicesQuery<K, N, V> query, K startKey) {
this.query = query;
this.startKey = startKey;
this.query.setStartKey(startKey);
}
@Override
public boolean hasNext() {
if (iterator == null) {
// First time through
iterator = query.execute().get().getList().iterator();
} else if (!iterator.hasNext() && rows == query.getRowCount()) { // only need to do another query if maximum rows were retrieved
query.setStartKey(startKey);
iterator = query.execute().get().getList().iterator();
rows = 0;
if (iterator.hasNext()) {
// First element is startKey which was the last element on the previous query result - skip it
next();
}
}
return iterator.hasNext();
}
@Override
public Row<K, N, V> next() {
Row<K, N, V> row = iterator.next();
startKey = row.getKey();
rows++;
return row;
}
@Override
public void remove() {
iterator.remove();
}
}