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
FieldsModifier and TypeFieldDescriptionprotected booleanWhether the list is indexed.protected Stringprotected Stringprotected Stringprotected Stringprotected StringFields inherited from class AbstractCollectionStore
containsStmtFields inherited from class ElementContainerStore
addStmt, clearStmt, containerTable, elementCmd, elementInfo, elementIsPersistentInterface, elementMapping, elementsAreEmbedded, elementsAreSerialised, elementType, iterateUsingDiscriminator, orderMapping, relationDiscriminatorMapping, relationDiscriminatorValue, removeStmt, sizeStmtFields inherited from class BaseContainerStore
allowNulls, clr, dba, ownerMapping, ownerMemberMetaData, relationType, storeMgr -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractListStore(RDBMSStoreManager storeMgr, org.datanucleus.ClassLoaderResolver clr) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionbooleanvoidbooleanaddAll(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int size) booleanaddAll(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int index, int size) get(org.datanucleus.state.DNStateManager ownerSM, int index) private StringgetIndexOfStatementString(Object element) protected StringgetIndexOfStmt(Object element) Generate statement for getting the index of an item.protected int[]getIndicesOf(org.datanucleus.state.DNStateManager ownerSM, 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.private StringgetLastIndexOfStatementString(Object element) protected StringgetLastIndexOfStmt(Object element) Generates the statement for getting the index of the last item.protected StringGenerates the statement for removing an item.protected StringGenerates the statement for shifting items in bulk.protected StringGenerates the statement for shifting items.intprotected abstract booleaninternalAdd(org.datanucleus.state.DNStateManager ownerSM, int startAt, boolean atEnd, Collection<? extends E> elements, int size) Internal method for adding an item to the List.protected intinternalIndexOf(org.datanucleus.state.DNStateManager ownerSM, Object element, String stmt) Internal method to find the index of an element.protected abstract booleaninternalRemove(org.datanucleus.state.DNStateManager ownerSM, Object element, int size) Internal method to remove the specified element from the List.protected voidinternalRemoveAt(org.datanucleus.state.DNStateManager ownerSM, int index, String stmt, int size) Internal method to remove an object at a location in the List.protected int[]internalShift(org.datanucleus.state.DNStateManager ownerSM, int oldIndex, int amount, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, boolean executeNow) Method to process a "shift" statement, updating the index in the list of the specified index.protected int[]internalShiftBulk(org.datanucleus.state.DNStateManager ownerSM, int start, int amount, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, 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(org.datanucleus.state.DNStateManager ownerSM) Accessor for an iterator through the container elements.intlastIndexOf(org.datanucleus.state.DNStateManager ownerSM, Object element) listIterator(org.datanucleus.state.DNStateManager ownerSM) protected abstract ListIterator<E> listIterator(org.datanucleus.state.DNStateManager ownerSM, int startIdx, int endIdx) Accessor for an iterator through the list elements.booleanremove(org.datanucleus.state.DNStateManager ownerSM, Object element, int size, boolean allowDependentField) subList(org.datanucleus.state.DNStateManager sm, int startIdx, int endIdx) Methods inherited from class AbstractCollectionStore
contains, getRemoveStmt, getUpdateEmbeddedElementStmt, update, updateEmbeddedElementMethods inherited from class ElementContainerStore
clear, getAddStmtForJoinTable, getClearStmt, getComponentInfoForElement, getContainerTable, getElementClassMetaData, getElementMapping, getRelationDiscriminatorMapping, getRelationDiscriminatorValue, getSize, getSizeStmt, hasOrderMapping, invalidateAddStmt, isElementsAreEmbedded, isElementsAreSerialised, size, usingJoinTable, validateElementForReading, validateElementForWriting, validateElementTypeMethods inherited from class BaseContainerStore
allowsBatching, getComponentInformationForClass, getDatastoreAdapter, getOwnerMapping, getOwnerMemberMetaData, getRelationType, getStateManagerForEmbeddedPCObject, getStoreManager, isEmbeddedMapping, setOwnerMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.datanucleus.store.types.scostore.CollectionStore
clear, contains, hasOrderMapping, removeAll, size, update, updateEmbeddedElementMethods inherited from interface org.datanucleus.store.types.scostore.ListStore
remove, removeAll, setMethods inherited from interface org.datanucleus.store.types.scostore.Store
getOwnerMemberMetaData, getStoreManager
-
Field Details
-
indexedList
protected boolean indexedListWhether the list is indexed. If false then it will have no orderMapping. -
indexOfStmt
-
lastIndexOfStmt
-
removeAtStmt
-
shiftStmt
-
shiftBulkStmt
-
-
Constructor Details
-
AbstractListStore
Constructor. Protected to prevent instantiation.- Parameters:
storeMgr- Manager for the storeclr- ClassLoader resolver
-
-
Method Details
-
iterator
Description copied from class:ElementContainerStoreAccessor for an iterator through the container elements.- Specified by:
iteratorin interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>- Specified by:
iteratorin classElementContainerStore- Parameters:
ownerSM- StateManager for the container.- Returns:
- The Iterator
-
listIterator
- Specified by:
listIteratorin interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
listIterator
protected abstract ListIterator<E> listIterator(org.datanucleus.state.DNStateManager ownerSM, int startIdx, int endIdx) Accessor for an iterator through the list elements.- Parameters:
ownerSM- StateManager 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
-
add
-
addAll
public boolean addAll(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int size) - Specified by:
addAllin interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>
-
addAll
public boolean addAll(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int index, int size) - Specified by:
addAllin interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
internalAdd
protected abstract boolean internalAdd(org.datanucleus.state.DNStateManager ownerSM, int startAt, boolean atEnd, Collection<? extends E> elements, int size) Internal method for adding an item to the List.- Parameters:
ownerSM- StateManagerstartAt- 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
-
indexOf
-
lastIndexOf
-
remove
-
internalRemove
protected abstract boolean internalRemove(org.datanucleus.state.DNStateManager ownerSM, Object element, int size) Internal method to remove the specified element from the List.- Parameters:
ownerSM- StateManager of the ownerelement- The elementsize- Current size of list if known. -1 if not known- Returns:
- Whether the List was modified
-
subList
-
getIndicesOf
Utility to find the indices of a collection of elements. The returned list are in reverse order (highest index first).- Parameters:
ownerSM- StateManagerelements- The elements- Returns:
- The indices of the elements in the List.
-
internalIndexOf
-
internalRemoveAt
protected void internalRemoveAt(org.datanucleus.state.DNStateManager ownerSM, int index, String stmt, int size) Internal method to remove an object at a location in the List.- Parameters:
ownerSM- StateManager for the list ownerindex- 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.DNStateManager ownerSM, int start, int amount, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, 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.- Parameters:
ownerSM- StateManager for the list ownerstart- The start index for the shiftamount- Amount to shift by (negative means shift down)conn- The connectionbatched- Whether the statement is batchedexecuteNow- Whether to execute the statement now (or wait for batching)- Returns:
- Return code(s) from any executed statements
- Throws:
org.datanucleus.exceptions.NucleusDataStoreException- Thrown if an error occurs
-
internalShift
protected int[] internalShift(org.datanucleus.state.DNStateManager ownerSM, int oldIndex, int amount, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, boolean executeNow) Method to process a "shift" statement, updating the index in the list of the specified index.- Parameters:
ownerSM- StateManager for the list owneroldIndex- The old indexamount- Amount to shift by (negative means shift down)conn- The connectionbatched- Whether the statement is batchedexecuteNow- Whether to execute the statement now (or wait for batching)- Returns:
- Return code(s) from any executed statements
- Throws:
org.datanucleus.exceptions.NucleusDataStoreException- Thrown if an error occurs
-
getIndexOfStmt
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
-
getIndexOfStatementString
-
getLastIndexOfStmt
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
-
getLastIndexOfStatementString
-
getIndicesOfStmt
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
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
Generates the statement for shifting items.UPDATE LISTTABLE SET INDEXCOL = ? + INDEXCOL WHERE OWNERCOL = ? AND INDEXCOL = ? [AND DISTINGUISHER=?]
- Returns:
- The Statement for shifting elements
-
getShiftBulkStmt
Generates the statement for shifting items in bulk.UPDATE LISTTABLE SET INDEXCOL = INDEXCOL + ? WHERE OWNERCOL = ? AND INDEXCOL > ? [AND DISTINGUISHER=?]
- Returns:
- The Statement for shifting elements in bulk
-