Class CursoredStream

  • All Implemented Interfaces:
    java.io.Serializable, java.util.Enumeration, java.util.Iterator

    public class CursoredStream
    extends Cursor

    Purpose: Stream class which is used to deal with large collections returned from TOPLink queries more efficiently.

    Responsibilities: Wraps a database result set cursor to provide a stream on the resulting selected objects.

    See Also:
    Serialized Form
    Author:
    Yvon Lavoie
    Since:
    TOPLink/Java 1.0
    • Field Detail

      • marker

        protected int marker
        Marker for backing up.
    • Constructor Detail

      • CursoredStream

        public CursoredStream()
        INTERNAL: Initialize the state of the stream
      • CursoredStream

        public CursoredStream​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call,
                              CursoredStreamPolicy policy)
        INTERNAL: Initialize the state of the stream
    • Method Detail

      • available

        public int available()
                      throws DatabaseException
        PUBLIC: Returns the number of objects that can be read from this input without blocking.
        Throws:
        DatabaseException
      • buildCountDistinctExpression

        public Expression buildCountDistinctExpression​(java.util.List includeFields,
                                                       ExpressionBuilder builder)
        INTERNAL: Must build the count on the primary key fields, not * as * is not allowed if there was a distinct. This require a manually defined operator. added for CR 2900
      • copy

        protected java.util.List<java.lang.Object> copy​(int startIndex,
                                                        int endIndex)
                                                 throws QueryException
        INTERNAL: Answer a list of the elements of the receiver's collection from startIndex to endIndex.
        Throws:
        QueryException
      • getInitialReadSize

        protected int getInitialReadSize()
        INTERNAL: Return the threshold for the stream.
      • getMarker

        protected int getMarker()
        INTERNAL: Return the marker used for mark() & reset() operations.
      • getPageSize

        public int getPageSize()
        INTERNAL: Return the page size for the stream.
        Overrides:
        getPageSize in class Cursor
      • getPosition

        public int getPosition()
        INTERNAL: Return the position of the stream inside the object collection
        Specified by:
        getPosition in class Cursor
      • hasMoreElements

        public boolean hasMoreElements()
        PUBLIC: Return whether the cursored stream has any more elements.
      • hasNext

        public boolean hasNext()
        PUBLIC: Return whether the cursored stream has any more elements.
      • mark

        public void mark​(int readAheadLimit)
        PUBLIC: Mark the present position in the stream. Subsequent calls to reset() will attempt to reposition the stream to this point.
        Parameters:
        readAheadLimit - Limit on the number of characters that may be read while still preserving the mark. Because the stream's input comes from the database, there is no actual limit, so this argument is ignored.
      • markSupported

        public boolean markSupported()
        PUBLIC: Tests if this input stream supports the mark and reset methods. The markSupported method of InputStream returns false.
      • nextElement

        public java.lang.Object nextElement()
        PUBLIC: Return the next object from the collection, if beyond the read limit read from the cursor.
        Returns:
        the next object in stream
      • next

        public java.lang.Object next()
        PUBLIC: Return the next object from the collection, if beyond the read limit read from the cursor.
        Returns:
        the next object in stream
      • nextElements

        public java.util.Vector nextElements​(int numberOfElements)
        PUBLIC: Return a Vector of at most numberOfElements of the next objects from the collection. If there aren't that many objects left to read, just return what is available.
        Returns:
        the next objects in stream
      • next

        public java.util.List<java.lang.Object> next​(int numberOfElements)
        PUBLIC: Return a Vector of at most numberOfElements of the next objects from the collection. If there aren't that many objects left to read, just return what is available.
        Returns:
        the next objects in stream
      • peek

        public java.lang.Object peek()
                              throws DatabaseException
        PUBLIC: Return the next object in the stream, without incrementing the stream's position.
        Throws:
        DatabaseException
      • read

        public java.lang.Object read()
                              throws DatabaseException,
                                     QueryException
        PUBLIC: This method differs slightly from conventional read() operation on a Java stream. This method return the next object in the collection rather than specifying the number of bytes to be read in. Return the next object from the collection, if beyond the read limit read from the cursor
        Returns:
        - next object in stream
        Throws:
        DatabaseException - if read pass end of stream
        QueryException
      • read

        public java.util.List<java.lang.Object> read​(int number)
                                              throws DatabaseException
        PUBLIC: This method differs slightly from conventional read() operation on a Java stream. This method returns the next number of objects in the collection in a vector. Return the next object from the collection, if beyond the read limit read from the cursor
        Parameters:
        number - - number of objects to be returned
        Returns:
        - vector containing next number of objects
        Throws:
        DatabaseException - if read pass end of stream
      • clear

        public void clear()
        PUBLIC: Release all objects read in so far. This should be performed when reading in a large collection of objects in order to preserve memory.
        Overrides:
        clear in class Cursor
      • releasePrevious

        public void releasePrevious()
        PUBLIC: Release all objects read in so far. This should be performed when reading in a large collection of objects in order to preserve memory.
      • reset

        public void reset()
        PUBLIC: Repositions this stream to the position at the time the mark method was last called on this stream.
      • retrieveNextPage

        protected java.lang.Object retrieveNextPage()
                                             throws DatabaseException
        INTERNAL: Retrieve and add the next page size of rows to the vector. Return the last object, or null if at end.
        Throws:
        DatabaseException
      • setLimits

        protected void setLimits()
        INTERNAL: Initialize the stream size and position
      • setMarker

        protected void setMarker​(int value)
        INTERNAL: Set the marker used for mark() & reset() operations