Class AbstractQueryResult<E>

  • Type Parameters:
    E - Type of "element" returned by this query result
    All Implemented Interfaces:
    java.io.Serializable, java.lang.Iterable<E>, java.util.Collection<E>, java.util.List<E>, QueryResult<E>
    Direct Known Subclasses:
    CandidateIdsQueryResult

    public abstract class AbstractQueryResult<E>
    extends java.util.AbstractList<E>
    implements QueryResult<E>, java.io.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:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      AbstractQueryResult​(Query query)
      Constructor of the result from a Query.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      void add​(int index, E element)
      Method to add a result.
      boolean add​(E o)
      Method to add results.
      boolean addAll​(int index, java.util.Collection c)
      Method to add results.
      void addConnectionListener​(ManagedConnectionResourceListener listener)
      Method to register a listener to be notified when the query result is closing.
      protected void assertIsOpen()
      Internal method to throw an Exception if the ResultSet is open.
      void clear()
      Method to clear the results.
      void close()
      Method to close the results, meaning that they are inaccessible after this point.
      protected abstract void closeResults()
      Inform the query result that we are closing the results now.
      protected abstract void closingConnection()
      Inform the query result that the connection is being closed so perform any operations now, or rest in peace.
      boolean contains​(java.lang.Object o)
      Method to check if the specified object is contained in this result.
      boolean containsAll​(java.util.Collection c)
      Method to check if all of the specified objects are contained here.
      void disconnect()
      Method to disconnect the results from the ExecutionContext, meaning that thereafter it just behaves like a List.
      abstract boolean equals​(java.lang.Object o)
      Equality operator for QueryResults.
      abstract E get​(int index)
      Method to retrieve a particular element from the list.
      protected int getSizeUsingMethod()
      Method to get the size using the "resultSizeMethod".
      int hashCode()
      Accessor for the hashcode of this object
      int indexOf​(java.lang.Object o)
      Method to check the index of a result.
      boolean isEmpty()
      Returns true if this collection contains no elements.
      protected boolean isOpen()
      Accessor whether the results are open.
      abstract java.util.Iterator<E> iterator()
      Accessor for an iterator for the results.
      int lastIndexOf​(java.lang.Object o)
      Method to check the last index of a result.
      abstract java.util.ListIterator<E> listIterator()
      Accessor for a list iterator for the results.
      E remove​(int index)
      Method to remove a result.
      E set​(int index, E element)
      Method to set the position of a result.
      int size()
      Method to return the size of the result.
      java.util.List<E> subList​(int fromIndex, int toIndex)
      Method return a sub list of results.
      java.lang.Object[] toArray()
      Method to return the results as an array.
      <T> T[] toArray​(T[] a)
      Method to return the results as an array.
      • Methods inherited from class java.util.AbstractList

        listIterator, removeRange
      • Methods inherited from class java.util.AbstractCollection

        addAll, remove, removeAll, retainAll, toString
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.util.Collection

        parallelStream, removeIf, stream
      • Methods inherited from interface java.lang.Iterable

        forEach
      • Methods inherited from interface java.util.List

        addAll, remove, removeAll, replaceAll, retainAll, sort, spliterator
    • Field Detail

      • closed

        protected boolean closed
        Whether the results are close.
      • query

        protected Query query
        The Query object.
      • connectionListeners

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

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

        protected java.lang.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 Detail

      • AbstractQueryResult

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

      • 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​(java.lang.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 java.util.Collection<E>
        Specified by:
        equals in interface java.util.List<E>
        Overrides:
        equals in class java.util.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 java.util.List<E>
        Specified by:
        get in class java.util.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 java.util.Collection<E>
        Specified by:
        hashCode in interface java.util.List<E>
        Overrides:
        hashCode in class java.util.AbstractList<E>
        Returns:
        The hash code
      • iterator

        public abstract java.util.Iterator<E> iterator()
        Accessor for an iterator for the results.
        Specified by:
        iterator in interface java.util.Collection<E>
        Specified by:
        iterator in interface java.lang.Iterable<E>
        Specified by:
        iterator in interface java.util.List<E>
        Overrides:
        iterator in class java.util.AbstractList<E>
        Returns:
        The iterator
      • listIterator

        public abstract java.util.ListIterator<E> listIterator()
        Accessor for a list iterator for the results.
        Specified by:
        listIterator in interface java.util.List<E>
        Overrides:
        listIterator in class java.util.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 java.util.Collection<E>
        Specified by:
        isEmpty in interface java.util.List<E>
        Overrides:
        isEmpty in class java.util.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 java.util.Collection<E>
        Specified by:
        size in interface java.util.List<E>
        Specified by:
        size in class java.util.AbstractCollection<E>
        Returns:
        The size of the result.
      • subList

        public java.util.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 java.util.List<E>
        Overrides:
        subList in class java.util.AbstractList<E>
        Parameters:
        fromIndex - start position
        toIndex - end position (exclusive)
        Returns:
        The list of results
      • toArray

        public java.lang.Object[] toArray()
        Method to return the results as an array.
        Specified by:
        toArray in interface java.util.Collection<E>
        Specified by:
        toArray in interface java.util.List<E>
        Overrides:
        toArray in class java.util.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 java.util.Collection<E>
        Specified by:
        toArray in interface java.util.List<E>
        Overrides:
        toArray in class java.util.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:
        java.lang.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 java.util.List<E>
        Overrides:
        add in class java.util.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 java.util.Collection<E>
        Specified by:
        add in interface java.util.List<E>
        Overrides:
        add in class java.util.AbstractList<E>
        Parameters:
        o - The result to add
        Returns:
        true if added successfully
      • addAll

        public boolean addAll​(int index,
                              java.util.Collection c)
        Method to add results. Unsupported.
        Specified by:
        addAll in interface java.util.List<E>
        Overrides:
        addAll in class java.util.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 java.util.Collection<E>
        Specified by:
        clear in interface java.util.List<E>
        Overrides:
        clear in class java.util.AbstractList<E>
      • contains

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

        public boolean containsAll​(java.util.Collection c)
        Method to check if all of the specified objects are contained here.
        Specified by:
        containsAll in interface java.util.Collection<E>
        Specified by:
        containsAll in interface java.util.List<E>
        Overrides:
        containsAll in class java.util.AbstractCollection<E>
        Parameters:
        c - The collection of objects
        Returns:
        Whether they are all contained here.
      • indexOf

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

        public int lastIndexOf​(java.lang.Object o)
        Method to check the last index of a result. Not supported.
        Specified by:
        lastIndexOf in interface java.util.List<E>
        Overrides:
        lastIndexOf in class java.util.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 java.util.List<E>
        Overrides:
        remove in class java.util.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 java.util.List<E>
        Overrides:
        set in class java.util.AbstractList<E>
        Parameters:
        index - Position of the result
        element - The result
        Returns:
        The element