Class AbstractListStore<E>
- java.lang.Object
-
- org.datanucleus.store.rdbms.scostore.BaseContainerStore
-
- org.datanucleus.store.rdbms.scostore.ElementContainerStore
-
- org.datanucleus.store.rdbms.scostore.AbstractCollectionStore<E>
-
- org.datanucleus.store.rdbms.scostore.AbstractListStore<E>
-
- All Implemented Interfaces:
org.datanucleus.store.types.scostore.CollectionStore<E>,org.datanucleus.store.types.scostore.ListStore<E>,org.datanucleus.store.types.scostore.Store
- Direct Known Subclasses:
FKListStore,JoinListStore
public abstract class AbstractListStore<E> extends AbstractCollectionStore<E> implements org.datanucleus.store.types.scostore.ListStore<E>
Abstract representation of a backing store for a List.
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanindexedListWhether the list is indexed.protected StringindexOfStmtprotected StringlastIndexOfStmtprotected StringremoveAtStmtprotected StringshiftBulkStmtprotected StringshiftStmt-
Fields inherited from class org.datanucleus.store.rdbms.scostore.AbstractCollectionStore
containsStmt
-
Fields inherited from class org.datanucleus.store.rdbms.scostore.ElementContainerStore
addStmt, clearStmt, containerTable, elementCmd, elementInfo, elementIsPersistentInterface, elementMapping, elementsAreEmbedded, elementsAreSerialised, elementType, iterateUsingDiscriminator, orderMapping, relationDiscriminatorMapping, relationDiscriminatorValue, removeStmt, sizeStmt
-
Fields inherited from class org.datanucleus.store.rdbms.scostore.BaseContainerStore
allowNulls, clr, dba, ownerMapping, ownerMemberMetaData, relationType, storeMgr
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedAbstractListStore(RDBMSStoreManager storeMgr, org.datanucleus.ClassLoaderResolver clr)Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanadd(org.datanucleus.state.ObjectProvider op, E element, int size)Method to add an element to the List.voidadd(org.datanucleus.state.ObjectProvider op, E element, int index, int size)Method to add an element to the List.booleanaddAll(org.datanucleus.state.ObjectProvider op, Collection<E> elements, int size)Method to add a collection of elements to the List.booleanaddAll(org.datanucleus.state.ObjectProvider op, Collection<E> elements, int index, int size)Method to add all elements from a Collection to the List.Eget(org.datanucleus.state.ObjectProvider op, int index)Method to retrieve an element from the List.protected StringgetIndexOfStmt(Object element)Generate statement for getting the index of an item.protected int[]getIndicesOf(org.datanucleus.state.ObjectProvider op, Collection elements)Utility to find the indices of a collection of elements.protected StringgetIndicesOfStmt(Collection elements)Generates the statement for getting the indices of a collection of element.protected StringgetLastIndexOfStmt(Object element)Generates the statement for getting the index of the last item.protected StringgetRemoveAtStmt()Generates the statement for removing an item.protected StringgetShiftBulkStmt()Generates the statement for shifting items in bulkprotected StringgetShiftStmt()Generates the statement for shifting items.intindexOf(org.datanucleus.state.ObjectProvider op, Object element)Accessor for the indexOf an object in the List.protected abstract booleaninternalAdd(org.datanucleus.state.ObjectProvider op, int startAt, boolean atEnd, Collection<E> elements, int size)Internal method for adding an item to the List.protected intinternalIndexOf(org.datanucleus.state.ObjectProvider op, Object element, String stmt)Internal method to find the index of an element.protected abstract booleaninternalRemove(org.datanucleus.state.ObjectProvider op, Object element, int size)Internal method to remove the specified element from the List.protected abstract voidinternalRemoveAt(org.datanucleus.state.ObjectProvider op, int index, int size)Internal method to remove an object at a location from the List.protected voidinternalRemoveAt(org.datanucleus.state.ObjectProvider op, int index, String stmt, int size)Internal method to remove an object at a location in the List.protected int[]internalShift(org.datanucleus.state.ObjectProvider op, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int oldIndex, int amount, boolean executeNow)Method to process a "shift" statement, updating the index in the list of the specified index.protected int[]internalShiftBulk(org.datanucleus.state.ObjectProvider op, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int start, int amount, boolean executeNow)Method to process a "shift" statement for all rows from the start point, updating the index in the list for the specified owner.Iterator<E>iterator(org.datanucleus.state.ObjectProvider op)Accessor for an iterator through the list elements.intlastIndexOf(org.datanucleus.state.ObjectProvider op, Object element)Method to retrieve the last index of an object in the list.ListIterator<E>listIterator(org.datanucleus.state.ObjectProvider op)Accessor for an iterator through the list elements.protected abstract ListIterator<E>listIterator(org.datanucleus.state.ObjectProvider op, int startIdx, int endIdx)Accessor for an iterator through the list elements.Eremove(org.datanucleus.state.ObjectProvider op, int index, int size)Method to remove an object at an index in the List.booleanremove(org.datanucleus.state.ObjectProvider op, Object element, int size, boolean allowDependentField)Method to remove the specified element from the List.List<E>subList(org.datanucleus.state.ObjectProvider op, int startIdx, int endIdx)Method to retrieve a list of elements in a range.-
Methods inherited from class org.datanucleus.store.rdbms.scostore.AbstractCollectionStore
contains, getRemoveStmt, getUpdateEmbeddedElementStmt, update, updateEmbeddedElement, updateEmbeddedElement
-
Methods inherited from class org.datanucleus.store.rdbms.scostore.ElementContainerStore
clear, getAddStmtForJoinTable, getClearStmt, getComponentInfoForElement, getContainerTable, getElementClassMetaData, getElementMapping, getRelationDiscriminatorMapping, getRelationDiscriminatorValue, getSize, getSizeStmt, hasOrderMapping, invalidateAddStmt, isElementsAreEmbedded, isElementsAreSerialised, size, usingJoinTable, validateElementForReading, validateElementForWriting, validateElementType
-
Methods inherited from class org.datanucleus.store.rdbms.scostore.BaseContainerStore
allowsBatching, getComponentInformationForClass, getDatastoreAdapter, getObjectProviderForEmbeddedPCObject, getOwnerMapping, getOwnerMemberMetaData, getRelationType, getStoreManager, isEmbeddedMapping, setOwner
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
-
-
-
Field Detail
-
indexedList
protected boolean indexedList
Whether the list is indexed. If false then it will have no orderMapping.
-
indexOfStmt
protected String indexOfStmt
-
lastIndexOfStmt
protected String lastIndexOfStmt
-
removeAtStmt
protected String removeAtStmt
-
shiftStmt
protected String shiftStmt
-
shiftBulkStmt
protected String shiftBulkStmt
-
-
Constructor Detail
-
AbstractListStore
protected AbstractListStore(RDBMSStoreManager storeMgr, org.datanucleus.ClassLoaderResolver clr)
Constructor. Protected to prevent instantiation.- Parameters:
storeMgr- Manager for the storeclr- ClassLoader resolver
-
-
Method Detail
-
iterator
public Iterator<E> iterator(org.datanucleus.state.ObjectProvider op)
Accessor for an iterator through the list elements.- Specified by:
iteratorin interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>- Specified by:
iteratorin classElementContainerStore- Parameters:
op- ObjectProvider for the container.- Returns:
- The Iterator
-
listIterator
public ListIterator<E> listIterator(org.datanucleus.state.ObjectProvider op)
Accessor for an iterator through the list elements.- Specified by:
listIteratorin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProvider for the container.- Returns:
- The List Iterator
-
listIterator
protected abstract ListIterator<E> listIterator(org.datanucleus.state.ObjectProvider op, int startIdx, int endIdx)
Accessor for an iterator through the list elements.- Parameters:
op- ObjectProvider for the container.startIdx- The start point in the list (only for indexed lists).endIdx- The end point in the list (only for indexed lists).- Returns:
- The List Iterator
-
add
public boolean add(org.datanucleus.state.ObjectProvider op, E element, int size)Method to add an element to the List.- Specified by:
addin interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>- Parameters:
op- The ObjectProviderelement- The element to removesize- Size of the current list (if known, -1 if not)- Returns:
- Whether it was added successfully.
-
add
public void add(org.datanucleus.state.ObjectProvider op, E element, int index, int size)Method to add an element to the List.- Specified by:
addin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
element- The element to add.index- The location to add atop- The ObjectProvider.
-
addAll
public boolean addAll(org.datanucleus.state.ObjectProvider op, Collection<E> elements, int size)Method to add a collection of elements to the List.- Specified by:
addAllin interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>- Parameters:
op- The ObjectProviderelements- The elements to removesize- Current size of the list (if known). -1 if not known- Returns:
- Whether they were added successfully.
-
addAll
public boolean addAll(org.datanucleus.state.ObjectProvider op, Collection<E> elements, int index, int size)Method to add all elements from a Collection to the List.- Specified by:
addAllin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- The ObjectProviderelements- The collectionindex- The location to add atsize- Current size of the list (if known). -1 if not known- Returns:
- Whether it was successful
-
internalAdd
protected abstract boolean internalAdd(org.datanucleus.state.ObjectProvider op, int startAt, boolean atEnd, Collection<E> elements, int size)Internal method for adding an item to the List.- Parameters:
op- The ObjectProviderstartAt- The start positionatEnd- Whether to add at the endelements- The Collection of elements to add.size- Current size of List (if known). -1 if not known- Returns:
- Whether it was successful
-
get
public E get(org.datanucleus.state.ObjectProvider op, int index)
Method to retrieve an element from the List.- Specified by:
getin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProvider for the ownerindex- The index of the element required.- Returns:
- The object
-
indexOf
public int indexOf(org.datanucleus.state.ObjectProvider op, Object element)Accessor for the indexOf an object in the List.- Specified by:
indexOfin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProvider for the ownerelement- The element.- Returns:
- The index
-
lastIndexOf
public int lastIndexOf(org.datanucleus.state.ObjectProvider op, Object element)Method to retrieve the last index of an object in the list.- Specified by:
lastIndexOfin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProvider for the ownerelement- The object- Returns:
- The last index
-
remove
public boolean remove(org.datanucleus.state.ObjectProvider op, Object element, int size, boolean allowDependentField)Method to remove the specified element from the List.- Specified by:
removein interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>- Parameters:
op- ObjectProvider for the ownerelement- The element to remove.size- Current size of list if known. -1 if not knownallowDependentField- Whether to allow any cascade deletes caused by this removal- Returns:
- Whether it was removed successfully.
-
remove
public E remove(org.datanucleus.state.ObjectProvider op, int index, int size)
Method to remove an object at an index in the List. If the list is ordered, will remove the element completely since no index positions exist.- Specified by:
removein interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProviderindex- The locationsize- Current size of the list (if known). -1 if not known- Returns:
- The object that was removed
-
internalRemove
protected abstract boolean internalRemove(org.datanucleus.state.ObjectProvider op, Object element, int size)Internal method to remove the specified element from the List.- Parameters:
op- ObjectProvider of the ownerelement- The elementsize- Current size of list if known. -1 if not known- Returns:
- Whether the List was modified
-
internalRemoveAt
protected abstract void internalRemoveAt(org.datanucleus.state.ObjectProvider op, int index, int size)Internal method to remove an object at a location from the List.- Parameters:
op- ObjectProviderindex- The index of the element to removesize- Current list size (if known). -1 if not known
-
subList
public List<E> subList(org.datanucleus.state.ObjectProvider op, int startIdx, int endIdx)
Method to retrieve a list of elements in a range.- Specified by:
subListin interfaceorg.datanucleus.store.types.scostore.ListStore<E>- Parameters:
op- ObjectProviderstartIdx- From index (inclusive).endIdx- To index (exclusive)- Returns:
- Sub List of elements in this range.
-
getIndicesOf
protected int[] getIndicesOf(org.datanucleus.state.ObjectProvider op, Collection elements)Utility to find the indices of a collection of elements. The returned list are in reverse order (highest index first).- Parameters:
op- ObjectProviderelements- The elements- Returns:
- The indices of the elements in the List.
-
internalIndexOf
protected int internalIndexOf(org.datanucleus.state.ObjectProvider op, Object element, String stmt)Internal method to find the index of an element.- Parameters:
op- ObjectProviderelement- The elementstmt- The statement to find the element.- Returns:
- The index of the element in the List.
-
internalRemoveAt
protected void internalRemoveAt(org.datanucleus.state.ObjectProvider op, int index, String stmt, int size)Internal method to remove an object at a location in the List.- Parameters:
op- ObjectProviderindex- The locationstmt- The statement to remove the element from the Listsize- Current list size (if known). -1 if not known
-
internalShiftBulk
protected int[] internalShiftBulk(org.datanucleus.state.ObjectProvider op, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int start, int amount, boolean executeNow) throws MappedDatastoreExceptionMethod to process a "shift" statement for all rows from the start point, updating the index in the list for the specified owner.- Parameters:
op- StateManager of the ownerconn- The connectionbatched- Whether the statement is batchedstart- The start index for the shiftamount- Amount to shift by (negative means shift down)executeNow- Whether to execute the statement now (or wait for batching)- Returns:
- Return code(s) from any executed statements
- Throws:
MappedDatastoreException- Thrown if an error occurs
-
internalShift
protected int[] internalShift(org.datanucleus.state.ObjectProvider op, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int oldIndex, int amount, boolean executeNow) throws MappedDatastoreExceptionMethod to process a "shift" statement, updating the index in the list of the specified index.- Parameters:
op- ObjectProviderconn- The connectionbatched- Whether the statement is batchedoldIndex- The old indexamount- Amount to shift by (negative means shift down)executeNow- Whether to execute the statement now (or wait for batching)- Returns:
- Return code(s) from any executed statements
- Throws:
MappedDatastoreException- Thrown if an error occurs
-
getIndexOfStmt
protected String getIndexOfStmt(Object element)
Generate statement for getting the index of an item.SELECT INDEXCOL FROM LISTTABLE WHERE OWNERCOL=? AND ELEMENTCOL=? [AND EMBEDDEDFIELD1=? AND EMBEDDEDFIELD2=? AND ...] [AND DISTINGUISHER=?] ORDER BY INDEXCOL
- Parameters:
element- The element to get the index of- Returns:
- The Statement for getting the index of an item
-
getLastIndexOfStmt
protected String getLastIndexOfStmt(Object element)
Generates the statement for getting the index of the last item.SELECT INDEXCOL FROM LISTTABLE WHERE OWNERCOL=? AND ELEMENTCOL=? [AND EMBEDDEDFIELD1=? AND EMBEDDEDFIELD2=? AND ...] [AND DISTINGUISHER=?] ORDER BY INDEXCOL DESC
- Parameters:
element- The element to get index of- Returns:
- The Statement for getting the last item
-
getIndicesOfStmt
protected String getIndicesOfStmt(Collection elements)
Generates the statement for getting the indices of a collection of element. Order into descending index order (highest first) so they will NOT be in the same order as they appear in the input collection "elements".SELECT INDEXCOL FROM LISTTABLE WHERE (OWNERCOL=? AND ELEMENT_COL=? [AND DISTINGUISHER=?]) OR (OWNERCOL=? AND ELEMENT_COL=? [AND DISTINGUISHER=?]) OR (OWNERCOL=? AND ELEMENT_COL=? [AND DISTINGUISHER=?]) ORDER BY INDEXCOL DESC- Parameters:
elements- The elements to retrieve the indices for.- Returns:
- The Statement for getting the indices of the collection.
-
getRemoveAtStmt
protected String getRemoveAtStmt()
Generates the statement for removing an item.DELETE FROM LISTTABLE WHERE OWNERCOL = ? AND INDEXCOL = ? [AND DISTINGUISHER=?]
- Returns:
- The Statement for removing an item from a position
-
getShiftStmt
protected String getShiftStmt()
Generates the statement for shifting items.UPDATE LISTTABLE SET INDEXCOL = ? + INDEXCOL WHERE OWNERCOL = ? AND INDEXCOL = ? [AND DISTINGUISHER=?]
- Returns:
- The Statement for shifting elements
-
getShiftBulkStmt
protected String getShiftBulkStmt()
Generates the statement for shifting items in bulkUPDATE LISTTABLE SET INDEXCOL = INDEXCOL + ? WHERE OWNERCOL = ? AND INDEXCOL > ? [AND DISTINGUISHER=?]
- Returns:
- The Statement for shifting elements in bulk
-
-