Package org.datanucleus.store.query
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:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected ApiAdapter
api
protected boolean
closed
Whether the results are close.protected List<ManagedConnectionResourceListener>
connectionListeners
List of listeners to notify when the query results are closed.protected boolean
loadResultsAtCommit
Whether to load any unread results at commit (when connection is closed).protected Query
query
The Query object.protected String
resultSizeMethod
Method for getting the size of the results.protected int
size
size of the query results.-
Fields inherited from class java.util.AbstractList
modCount
-
-
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, 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(Object o)
Method to check if the specified object is contained in this result.boolean
containsAll(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(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 objectint
indexOf(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 Iterator<E>
iterator()
Accessor for an iterator for the results.int
lastIndexOf(Object o)
Method to check the last index of a result.abstract 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.List<E>
subList(int fromIndex, int toIndex)
Method return a sub list of results.Object[]
toArray()
Method to return the results as an array.Object[]
toArray(Object[] 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, toArray
-
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 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 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 interfaceQueryResult<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 interfaceQueryResult<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 interfaceCollection<E>
- Specified by:
equals
in interfaceList<E>
- Overrides:
equals
in classAbstractList<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.
-
hashCode
public int hashCode()
Accessor for the hashcode of this object- Specified by:
hashCode
in interfaceCollection<E>
- Specified by:
hashCode
in interfaceList<E>
- Overrides:
hashCode
in classAbstractList<E>
- Returns:
- The hash code
-
listIterator
public abstract ListIterator<E> listIterator()
Accessor for a list iterator for the results.- Specified by:
listIterator
in interfaceList<E>
- Overrides:
listIterator
in classAbstractList<E>
- Returns:
- a ListIterator with the query results
-
isEmpty
public boolean isEmpty()
Returns true if this collection contains no elements.- Specified by:
isEmpty
in interfaceCollection<E>
- Specified by:
isEmpty
in interfaceList<E>
- Overrides:
isEmpty
in classAbstractCollection<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 interfaceCollection<E>
- Specified by:
size
in interfaceList<E>
- Specified by:
size
in classAbstractCollection<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.
-
toArray
public Object[] toArray()
Method to return the results as an array.- Specified by:
toArray
in interfaceCollection<E>
- Specified by:
toArray
in interfaceList<E>
- Overrides:
toArray
in classAbstractCollection<E>
- Returns:
- The array.
-
toArray
public Object[] toArray(Object[] a)
Method to return the results as an array.- Specified by:
toArray
in interfaceCollection<E>
- Specified by:
toArray
in interfaceList<E>
- Overrides:
toArray
in classAbstractCollection<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.
-
add
public boolean add(E o)
Method to add results. Unsupported.- Specified by:
add
in interfaceCollection<E>
- Specified by:
add
in interfaceList<E>
- Overrides:
add
in classAbstractList<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.
-
clear
public void clear()
Method to clear the results.- Specified by:
clear
in interfaceCollection<E>
- Specified by:
clear
in interfaceList<E>
- Overrides:
clear
in classAbstractList<E>
-
contains
public boolean contains(Object o)
Method to check if the specified object is contained in this result.- Specified by:
contains
in interfaceCollection<E>
- Specified by:
contains
in interfaceList<E>
- Overrides:
contains
in classAbstractCollection<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 interfaceCollection<E>
- Specified by:
containsAll
in interfaceList<E>
- Overrides:
containsAll
in classAbstractCollection<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.
-
lastIndexOf
public int lastIndexOf(Object o)
Method to check the last index of a result. Not supported.- Specified by:
lastIndexOf
in interfaceList<E>
- Overrides:
lastIndexOf
in classAbstractList<E>
- Parameters:
o
- The result- Returns:
- The last index
-
remove
public E remove(int index)
Method to remove a result. Not supported.
-
-