You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/08/02 17:05:11 UTC
svn commit: r981541 -
/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
Author: jbellis
Date: Mon Aug 2 15:05:11 2010
New Revision: 981541
URL: http://svn.apache.org/viewvc?rev=981541&view=rev
Log:
make ColumnGroupReader implement Iterator<IColumn>
patch by jbellis; reviewed by gdusbabek for CASSANDRA-1338
Modified:
cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java?rev=981541&r1=981540&r2=981541&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/SSTableSliceIterator.java Mon Aug 2 15:05:11 2010
@@ -41,13 +41,13 @@ import org.apache.cassandra.utils.FBUtil
/**
* A Column Iterator over SSTable
*/
-class SSTableSliceIterator extends AbstractIterator<IColumn> implements IColumnIterator
+class SSTableSliceIterator implements IColumnIterator
{
private final boolean reversed;
private final byte[] startColumn;
private final byte[] finishColumn;
private final AbstractType comparator;
- private ColumnGroupReader reader;
+ private IColumnIterator reader;
private boolean closeFileWhenDone = false;
private DecoratedKey decoratedKey;
@@ -105,42 +105,24 @@ class SSTableSliceIterator extends Abstr
return decoratedKey;
}
- private boolean isColumnNeeded(IColumn column)
+ public ColumnFamily getColumnFamily() throws IOException
{
- if (startColumn.length == 0 && finishColumn.length == 0)
- return true;
- else if (startColumn.length == 0 && !reversed)
- return comparator.compare(column.name(), finishColumn) <= 0;
- else if (startColumn.length == 0 && reversed)
- return comparator.compare(column.name(), finishColumn) >= 0;
- else if (finishColumn.length == 0 && !reversed)
- return comparator.compare(column.name(), startColumn) >= 0;
- else if (finishColumn.length == 0 && reversed)
- return comparator.compare(column.name(), startColumn) <= 0;
- else if (!reversed)
- return comparator.compare(column.name(), startColumn) >= 0 && comparator.compare(column.name(), finishColumn) <= 0;
- else // if reversed
- return comparator.compare(column.name(), startColumn) <= 0 && comparator.compare(column.name(), finishColumn) >= 0;
+ return reader == null ? null : reader.getColumnFamily();
}
- public ColumnFamily getColumnFamily()
+ public boolean hasNext()
{
- return reader == null ? null : reader.getEmptyColumnFamily();
+ return reader.hasNext();
}
- protected IColumn computeNext()
+ public IColumn next()
{
- if (reader == null)
- return endOfData();
+ return reader.next();
+ }
- while (true)
- {
- IColumn column = reader.pollColumn();
- if (column == null)
- return endOfData();
- if (isColumnNeeded(column))
- return column;
- }
+ public void remove()
+ {
+ throw new UnsupportedOperationException();
}
public void close() throws IOException
@@ -154,7 +136,7 @@ class SSTableSliceIterator extends Abstr
* blocks before/after it for each next call. This function assumes that
* the CF is sorted by name and exploits the name index.
*/
- class ColumnGroupReader
+ class ColumnGroupReader extends AbstractIterator<IColumn> implements IColumnIterator
{
private final ColumnFamily emptyColumnFamily;
@@ -186,27 +168,51 @@ class SSTableSliceIterator extends Abstr
curRangeIndex--;
}
- public ColumnFamily getEmptyColumnFamily()
+ public ColumnFamily getColumnFamily()
{
return emptyColumnFamily;
}
- public IColumn pollColumn()
+ public DecoratedKey getKey()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ private boolean isColumnNeeded(IColumn column)
+ {
+ if (startColumn.length == 0 && finishColumn.length == 0)
+ return true;
+ else if (startColumn.length == 0 && !reversed)
+ return comparator.compare(column.name(), finishColumn) <= 0;
+ else if (startColumn.length == 0 && reversed)
+ return comparator.compare(column.name(), finishColumn) >= 0;
+ else if (finishColumn.length == 0 && !reversed)
+ return comparator.compare(column.name(), startColumn) >= 0;
+ else if (finishColumn.length == 0 && reversed)
+ return comparator.compare(column.name(), startColumn) <= 0;
+ else if (!reversed)
+ return comparator.compare(column.name(), startColumn) >= 0 && comparator.compare(column.name(), finishColumn) <= 0;
+ else // if reversed
+ return comparator.compare(column.name(), startColumn) <= 0 && comparator.compare(column.name(), finishColumn) >= 0;
+ }
+
+ protected IColumn computeNext()
{
- IColumn column = blockColumns.poll();
- if (column == null)
+ while (true)
{
+ IColumn column = blockColumns.poll();
+ if (column != null && isColumnNeeded(column))
+ return column;
try
{
- if (getNextBlock())
- column = blockColumns.poll();
+ if (column == null && !getNextBlock())
+ return endOfData();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
- return column;
}
public boolean getNextBlock() throws IOException