Class ForwardQueryResult<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.ForwardQueryResult<E>
All Implemented Interfaces:
Serializable, Iterable<E>, Collection<E>, List<E>, SequencedCollection<E>, org.datanucleus.store.query.QueryResult<E>

public final class ForwardQueryResult<E> extends AbstractRDBMSQueryResult<E> implements Serializable
Lazy collection results from a Query with the ResultSet in a forward direction. In general the actual result elements are only loaded when accessed with the exception of non-transactional or optimistic contexts that load the elements at initialisation.

If the query had a range defined and this was not handled in the datastore query then this QueryResult will skip the unrequired records and just return the range requested.

See Also:
  • Field Details

    • moreResultSetRows

      protected boolean moreResultSetRows
      Whether there are still more rows to be processed in the ResultSet.
    • resultObjs

      protected List<E> resultObjs
      The Result Objects.
    • resultIds

      protected List<Object> resultIds
    • candidates

      private Collection<Object> candidates
      The candidate list restriction (optional).
  • Constructor Details

    • ForwardQueryResult

      public ForwardQueryResult(org.datanucleus.store.query.Query query, ResultObjectFactory<E> rof, ResultSet rs, org.datanucleus.FetchPlan fp, Collection<Object> 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 - Candidate elements
  • Method Details

    • initialise

      public void initialise() throws SQLException
      Specified by:
      initialise in class AbstractRDBMSQueryResult<E>
      Throws:
      SQLException
    • processNumberOfResults

      private void processNumberOfResults(int number)
      Method to advance through the results, processing the specified number of results.
      Parameters:
      number - Number of results (-1 means process all)
    • advanceToEndOfResultSet

      private void advanceToEndOfResultSet()
      Internal method to advance to the end of the ResultSet, populating the resultObjs, and close the ResultSet when complete.
    • nextResultSetElement

      protected E nextResultSetElement()
      Accessor for the next object from the ResultSet.
      Returns:
      The next element from the ResultSet.
    • closeResults

      protected void closeResults()
      Internal method to close the ResultSet.
      Overrides:
      closeResults in class AbstractRDBMSQueryResult<E>
    • 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()
      Method called to inform the query result that the connection is being closed so perform any required operations now, or rest in peace.
      Specified by:
      closingConnection in class org.datanucleus.store.query.AbstractQueryResult<E>
    • 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
    • contains

      public boolean contains(Object o)
      Method to check if the specified object is contained in this result.
      Specified by:
      contains in interface Collection<E>
      Specified by:
      contains in interface List<E>
      Overrides:
      contains in class org.datanucleus.store.query.AbstractQueryResult<E>
      Parameters:
      o - The object
      Returns:
      Whether it is contained here.
    • containsAll

      public boolean containsAll(Collection c)
      Method to check if all of the specified objects are contained here.
      Specified by:
      containsAll in interface Collection<E>
      Specified by:
      containsAll in interface List<E>
      Overrides:
      containsAll in class org.datanucleus.store.query.AbstractQueryResult<E>
      Parameters:
      c - The collection of objects
      Returns:
      Whether they are all contained here.
    • 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
    • isEmpty

      public boolean isEmpty()
      Accessor for whether there are any results.
      Specified by:
      isEmpty in interface Collection<E>
      Specified by:
      isEmpty in interface List<E>
      Overrides:
      isEmpty in class org.datanucleus.store.query.AbstractQueryResult<E>
      Returns:
      true if these results are empty.
    • 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()
      Method to return the results as an array.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class org.datanucleus.store.query.AbstractQueryResult<E>
      Returns:
      The array.
    • toArray

      public <T> T[] toArray(T[] a)
      Method to return the results as an array.
      Specified by:
      toArray in interface Collection<E>
      Specified by:
      toArray in interface List<E>
      Overrides:
      toArray in class org.datanucleus.store.query.AbstractQueryResult<E>
      Parameters:
      a - The array to copy into.
      Returns:
      The array.
    • 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