Class 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:
    Serialized Form
    • Field Detail

      • closed

        protected boolean closed
        Whether the results are close.
      • query

        protected Query query
        The Query object.
      • 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 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​(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
      • 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
      • 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
      • 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.
      • 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