Class AbstractQueryResult<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
org.datanucleus.store.query.AbstractQueryResult<E>
Type Parameters:
E - Type of "element" returned by this query result
All Implemented Interfaces:
Serializable, Iterable<E>, Collection<E>, List<E>, QueryResult<E>
Direct Known Subclasses:
CandidateIdsQueryResult

public abstract class AbstractQueryResult<E> extends AbstractList<E> implements QueryResult<E>, Serializable
Abstract representation of a QueryResult. Provides default implementations of the majority of list methods that we aren't likely to be providing in a concrete query result. This class is used where your query implementation needs to return a wrapper to a List so that you can intercept calls and convert a row of the results into object(s), to avoid full instantiation at creation. Supports the following query extensions :-
  • datanucleus.query.resultSizeMethod The method used to find the size of the result set.
  • datanucleus.query.loadResultsAtCommit Whether to load all results when the connection is closing. Has no effect if caching is not used.
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • closed

      protected boolean closed
      Whether the results are close.
    • query

      protected Query query
      The Query object.
    • connectionListeners

      protected List<ManagedConnectionResourceListener> connectionListeners
      List of listeners to notify when the query results are closed.
    • api

      protected ApiAdapter api
    • size

      protected int size
      size of the query results. Is -1 until known.
    • resultSizeMethod

      protected String resultSizeMethod
      Method for getting the size of the results.
    • loadResultsAtCommit

      protected boolean loadResultsAtCommit
      Whether to load any unread results at commit (when connection is closed).
  • Constructor Details

    • AbstractQueryResult

      public AbstractQueryResult(Query query)
      Constructor of the result from a Query.
      Parameters:
      query - The Query
  • Method Details

    • disconnect

      public void disconnect()
      Method to disconnect the results from the ExecutionContext, meaning that thereafter it just behaves like a List. All remaining results are read in at this point (unless selected not to be).
      Specified by:
      disconnect in interface QueryResult<E>
    • closingConnection

      protected abstract void closingConnection()
      Inform the query result that the connection is being closed so perform any operations now, or rest in peace.
    • closeResults

      protected abstract void closeResults()
      Inform the query result that we are closing the results now.
    • close

      public void close()
      Method to close the results, meaning that they are inaccessible after this point.
      Specified by:
      close in interface QueryResult<E>
    • addConnectionListener

      public void addConnectionListener(ManagedConnectionResourceListener listener)
      Method to register a listener to be notified when the query result is closing.
      Parameters:
      listener - The listener
    • isOpen

      protected boolean isOpen()
      Accessor whether the results are open.
      Returns:
      Whether it is open.
    • assertIsOpen

      protected void assertIsOpen()
      Internal method to throw an Exception if the ResultSet is open.
    • equals

      public abstract boolean equals(Object o)
      Equality operator for QueryResults. Overrides the AbstractList implementation since that uses size() and iterator() and that would cause problems when closed.
      Specified by:
      equals in interface Collection<E>
      Specified by:
      equals in interface List<E>
      Overrides:
      equals in class AbstractList<E>
      Parameters:
      o - The object to compare against
      Returns:
      Whether they are equal
    • get

      public abstract 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 AbstractList<E>
      Parameters:
      index - The index of the element
      Returns:
      The element at index
    • hashCode

      public int hashCode()
      Accessor for the hashcode of this object
      Specified by:
      hashCode in interface Collection<E>
      Specified by:
      hashCode in interface List<E>
      Overrides:
      hashCode in class AbstractList<E>
      Returns:
      The hash code
    • iterator

      public abstract 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>
      Overrides:
      iterator in class AbstractList<E>
      Returns:
      The iterator
    • listIterator

      public abstract ListIterator<E> listIterator()
      Accessor for a list iterator for the results.
      Specified by:
      listIterator in interface List<E>
      Overrides:
      listIterator in class AbstractList<E>
      Returns:
      a ListIterator with the query results
    • isEmpty

      public boolean isEmpty()
      Returns true if this collection contains no elements.
      Specified by:
      isEmpty in interface Collection<E>
      Specified by:
      isEmpty in interface List<E>
      Overrides:
      isEmpty in class AbstractCollection<E>
      Returns:
      true if this collection contains no elements.
    • size

      public int size()
      Method to return the size of the result. Hands off the calculation of the size to getSizeUsingMethod() which should be overridden if you want to support other methods.
      Specified by:
      size in interface Collection<E>
      Specified by:
      size in interface List<E>
      Specified by:
      size in class AbstractCollection<E>
      Returns:
      The size of the result.
    • subList

      public List<E> subList(int fromIndex, int toIndex)
      Method return a sub list of results. Method create new ArrayList, iterate and call get() in subclass for optimum performance.
      Specified by:
      subList in interface List<E>
      Overrides:
      subList in class AbstractList<E>
      Parameters:
      fromIndex - start position
      toIndex - end position (exclusive)
      Returns:
      The list of results
    • 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 AbstractCollection<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 AbstractCollection<E>
      Parameters:
      a - The array to copy into.
      Returns:
      The array.
    • getSizeUsingMethod

      protected int getSizeUsingMethod()
      Method to get the size using the "resultSizeMethod". This implementation supports "COUNT" method. Override this in subclasses to implement other methods.
      Returns:
      The size
      Throws:
      ArithmeticException - if the size overflows the integer return type
    • add

      public void add(int index, E element)
      Method to add a result. Unsupported.
      Specified by:
      add in interface List<E>
      Overrides:
      add in class AbstractList<E>
      Parameters:
      index - The position to add
      element - The results to add
    • add

      public boolean add(E o)
      Method to add results. Unsupported.
      Specified by:
      add in interface Collection<E>
      Specified by:
      add in interface List<E>
      Overrides:
      add in class AbstractList<E>
      Parameters:
      o - The result to add
      Returns:
      true if added successfully
    • addAll

      public boolean addAll(int index, Collection c)
      Method to add results. Unsupported.
      Specified by:
      addAll in interface List<E>
      Overrides:
      addAll in class AbstractList<E>
      Parameters:
      index - The position to add
      c - The results to add
      Returns:
      true if added successfully
    • clear

      public void clear()
      Method to clear the results.
      Specified by:
      clear in interface Collection<E>
      Specified by:
      clear in interface List<E>
      Overrides:
      clear in class AbstractList<E>
    • 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 AbstractCollection<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 AbstractCollection<E>
      Parameters:
      c - The collection of objects
      Returns:
      Whether they are all contained here.
    • indexOf

      public int indexOf(Object o)
      Method to check the index of a result. Not supported.
      Specified by:
      indexOf in interface List<E>
      Overrides:
      indexOf in class AbstractList<E>
      Parameters:
      o - The result
      Returns:
      The position
    • lastIndexOf

      public int lastIndexOf(Object o)
      Method to check the last index of a result. Not supported.
      Specified by:
      lastIndexOf in interface List<E>
      Overrides:
      lastIndexOf in class AbstractList<E>
      Parameters:
      o - The result
      Returns:
      The last index
    • remove

      public E remove(int index)
      Method to remove a result. Not supported.
      Specified by:
      remove in interface List<E>
      Overrides:
      remove in class AbstractList<E>
      Parameters:
      index - The position of the result.
      Returns:
      The removed object.
    • set

      public E set(int index, E element)
      Method to set the position of a result. Not supported.
      Specified by:
      set in interface List<E>
      Overrides:
      set in class AbstractList<E>
      Parameters:
      index - Position of the result
      element - The result
      Returns:
      The element