Class ScrollableQueryResult<E>

  • All Implemented Interfaces:
    Serializable, Iterable<E>, Collection<E>, List<E>, org.datanucleus.store.query.QueryResult<E>

    public final class ScrollableQueryResult<E>
    extends AbstractRDBMSQueryResult<E>
    implements Serializable
    Lazy collection results from a Query with the ResultSet scrollable. Supports the following query extensions (in addition to those supported by superclasses) :-
    • datanucleus.query.resultCacheType Type of caching of result objects. Supports strong, weak, soft, none
    If there is no transaction present, or if the FetchPlan is in "greedy" mode, and where caching is being used will load all results at startup. Otherwise results are only loaded when accessed.
    See Also:
    Serialized Form
    • Field Detail

      • resultIdsByPosition

        protected Map<Integer,​Object> resultIdsByPosition
        Map of persistable object id, keyed by the result position (0, 1, 2, ...).
    • Constructor Detail

      • ScrollableQueryResult

        public ScrollableQueryResult​(org.datanucleus.store.query.Query query,
                                     ResultObjectFactory<E> rof,
                                     ResultSet rs,
                                     org.datanucleus.FetchPlan fp,
                                     Collection candidates)
        Constructor of the result from a Query.
        Parameters:
        query - The Query
        rof - The factory to retrieve results from
        rs - The ResultSet from the Query Statement
        fp - FetchPlan
        candidates - the Candidates collection. Pass this argument only when distinct = false
    • Method Detail

      • loadObjects

        protected void loadObjects​(int start,
                                   int maxNumber)
        Convenience method to load up rows starting at the specified position. Optionally takes a maximum number of rows to process.
        Parameters:
        start - Start row
        maxNumber - Max number to process (-1 means no maximum)
      • getObjectForIndex

        protected E getObjectForIndex​(int index)
        Accessor for the result object at an index. If the object has already been processed will return that object, otherwise will retrieve the object using the factory.
        Parameters:
        index - The list index position
        Returns:
        The result object
      • close

        public void close()
        Method to close the results, making the results unusable thereafter.
        Specified by:
        close in interface org.datanucleus.store.query.QueryResult<E>
        Overrides:
        close in class AbstractRDBMSQueryResult<E>
      • closingConnection

        protected void closingConnection()
        Inform the query result that the connection is being closed so perform any operations now, or rest in peace.
        Specified by:
        closingConnection in class org.datanucleus.store.query.AbstractQueryResult<E>
      • cacheQueryResults

        protected void cacheQueryResults()
      • iterator

        public Iterator<E> iterator()
        Accessor for an iterator for the results.
        Specified by:
        iterator in interface Collection<E>
        Specified by:
        iterator in interface Iterable<E>
        Specified by:
        iterator in interface List<E>
        Specified by:
        iterator in class org.datanucleus.store.query.AbstractQueryResult<E>
        Returns:
        The iterator
      • listIterator

        public ListIterator<E> listIterator()
        Accessor for an iterator for the results.
        Specified by:
        listIterator in interface List<E>
        Specified by:
        listIterator in class org.datanucleus.store.query.AbstractQueryResult<E>
        Returns:
        The iterator
      • get

        public E get​(int index)
        Method to retrieve a particular element from the list.
        Specified by:
        get in interface List<E>
        Specified by:
        get in class org.datanucleus.store.query.AbstractQueryResult<E>
        Parameters:
        index - The index of the element
        Returns:
        The element at index
      • getSizeUsingMethod

        protected int getSizeUsingMethod()
        Method to get the size using the "resultSizeMethod". This implementation supports "LAST" method. Override this in subclasses to implement other methods.
        Overrides:
        getSizeUsingMethod in class org.datanucleus.store.query.AbstractQueryResult<E>
        Returns:
        The size
      • toArray

        public Object[] toArray()
        Specified by:
        toArray in interface Collection<E>
        Specified by:
        toArray in interface List<E>
        Overrides:
        toArray in class org.datanucleus.store.query.AbstractQueryResult<E>
      • toArray

        public Object[] toArray​(Object[] a)
        Specified by:
        toArray in interface Collection<E>
        Specified by:
        toArray in interface List<E>
        Overrides:
        toArray in class org.datanucleus.store.query.AbstractQueryResult<E>
      • writeReplace

        protected Object writeReplace()
                               throws ObjectStreamException
        Handle serialisation by returning a java.util.ArrayList of all of the results for this query after disconnecting the query which has the consequence of enforcing the load of all objects.
        Returns:
        The object to serialise
        Throws:
        ObjectStreamException - thrown if an error occurs