Class DistinctResultIterator<T>

java.lang.Object
org.apache.cayenne.access.jdbc.DistinctResultIterator<T>
All Implemented Interfaces:
AutoCloseable, Iterable<T>, ResultIterator<T>

public class DistinctResultIterator<T> extends Object implements ResultIterator<T>
A ResultIterator that does in-memory filtering of rows to return only distinct rows. Distinct comparison is done by comparing ObjectIds created from each row. Internally DistinctResultIterator wraps another ResultIterator that provides the actual rows.
Since:
3.0
  • Field Details

    • delegate

      protected ResultIterator<T> delegate
    • fetchedIds

      protected Set<Object> fetchedIds
    • nextDataRow

      protected T nextDataRow
    • defaultEntity

      protected DbEntity defaultEntity
    • compareFullRows

      protected boolean compareFullRows
  • Constructor Details

    • DistinctResultIterator

      public DistinctResultIterator(ResultIterator<T> delegate, DbEntity defaultEntity, boolean compareFullRows)
      Creates new DistinctResultIterator wrapping another ResultIterator.
      Parameters:
      delegate - actual result iterator, that will be decorated by this DistinctResultIterator
      defaultEntity - an entity needed to build ObjectIds for distinct comparison.
  • Method Details

    • iterator

      public Iterator<T> iterator()
      Specified by:
      iterator in interface Iterable<T>
      Since:
      4.0
    • close

      public void close()
      Closes underlying ResultIterator.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface ResultIterator<T>
    • allRows

      public List<T> allRows()
      Description copied from interface: ResultIterator
      Returns all yet unread rows from ResultSet without closing it.
      Specified by:
      allRows in interface ResultIterator<T>
      Since:
      3.0
    • hasNextRow

      public boolean hasNextRow()
      Description copied from interface: ResultIterator
      Returns true if there is at least one more record that can be read from the iterator.
      Specified by:
      hasNextRow in interface ResultIterator<T>
    • nextRow

      public T nextRow()
      Description copied from interface: ResultIterator
      Returns the next result row that is, depending on the query, may be a scalar value, a DataRow, or an Object[] array containing a mix of scalars and DataRows.
      Specified by:
      nextRow in interface ResultIterator<T>
    • skipRow

      public void skipRow()
      Description copied from interface: ResultIterator
      Goes past current row. If the row is not needed, this may save some time on data conversion.
      Specified by:
      skipRow in interface ResultIterator<T>
      Since:
      3.0