Class ScrollableQueryResult<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
org.datanucleus.store.query.AbstractQueryResult<E>
org.datanucleus.store.rdbms.query.AbstractRDBMSQueryResult<E>
org.datanucleus.store.rdbms.query.ScrollableQueryResult<E>
All Implemented Interfaces:
Serializable, Iterable<E>, Collection<E>, List<E>, SequencedCollection<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:
  • Field Details

    • resultsObjsByIndex

      private Map<Integer,E> resultsObjsByIndex
      Map of ResultSet object values, keyed by the list index ("0", "1", etc).
    • resultIdsByPosition

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

      int startIndex
      Position of first result (origin=0).
    • endIndex

      int endIndex
      Position of last result (origin=0, set when known).
  • Constructor Details

    • 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 Details

    • initialise

      public void initialise()
      Specified by:
      initialise in class AbstractRDBMSQueryResult<E>
    • 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
    • equals

      public boolean equals(Object o)
      Specified by:
      equals in interface Collection<E>
      Specified by:
      equals in interface List<E>
      Overrides:
      equals in class AbstractRDBMSQueryResult<E>
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in interface Collection<E>
      Specified by:
      hashCode in interface List<E>
      Overrides:
      hashCode in class AbstractRDBMSQueryResult<E>
    • 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 <T> T[] toArray(T[] 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>
    • toArrayInternal

      private <T> T[] toArrayInternal(T[] a)
    • 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