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 boolean
Whether the list is indexed.protected String
protected String
protected String
protected String
protected String
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
ConstructorsModifierConstructorDescriptionprotected
AbstractListStore
(RDBMSStoreManager storeMgr, org.datanucleus.ClassLoaderResolver clr) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionboolean
void
boolean
addAll
(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int size) boolean
addAll
(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int index, int size) get
(org.datanucleus.state.DNStateManager ownerSM, int index) private String
getIndexOfStatementString
(Object element) protected String
getIndexOfStmt
(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 String
getIndicesOfStmt
(Collection elements) Generates the statement for getting the indices of a collection of element.private String
getLastIndexOfStatementString
(Object element) protected String
getLastIndexOfStmt
(Object element) Generates the statement for getting the index of the last item.protected String
Generates the statement for removing an item.protected String
Generates the statement for shifting items in bulk.protected String
Generates the statement for shifting items.int
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.protected int
internalIndexOf
(org.datanucleus.state.DNStateManager ownerSM, Object element, String stmt) Internal method to find the index of an element.protected abstract boolean
internalRemove
(org.datanucleus.state.DNStateManager ownerSM, Object element, int size) Internal method to remove the specified element from the List.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.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.int
lastIndexOf
(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.boolean
remove
(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 org.datanucleus.store.rdbms.scostore.AbstractCollectionStore
contains, getRemoveStmt, getUpdateEmbeddedElementStmt, update, 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, getOwnerMapping, getOwnerMemberMetaData, getRelationType, getStateManagerForEmbeddedPCObject, getStoreManager, isEmbeddedMapping, setOwner
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.datanucleus.store.types.scostore.CollectionStore
clear, contains, hasOrderMapping, removeAll, size, update, updateEmbeddedElement
Methods inherited from interface org.datanucleus.store.types.scostore.ListStore
remove, removeAll, set
Methods 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:ElementContainerStore
Accessor for an iterator through the container elements.- Specified by:
iterator
in interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>
- Specified by:
iterator
in classElementContainerStore
- Parameters:
ownerSM
- StateManager for the container.- Returns:
- The Iterator
-
listIterator
- Specified by:
listIterator
in 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
- Specified by:
add
in interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>
-
add
- Specified by:
add
in interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
addAll
public boolean addAll(org.datanucleus.state.DNStateManager ownerSM, Collection<? extends E> elements, int size) - Specified by:
addAll
in 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:
addAll
in 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
- Specified by:
get
in interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
indexOf
- Specified by:
indexOf
in interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
lastIndexOf
- Specified by:
lastIndexOf
in interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
remove
public boolean remove(org.datanucleus.state.DNStateManager ownerSM, Object element, int size, boolean allowDependentField) - Specified by:
remove
in interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>
-
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
- Specified by:
subList
in interfaceorg.datanucleus.store.types.scostore.ListStore<E>
-
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
protected int internalIndexOf(org.datanucleus.state.DNStateManager ownerSM, Object element, String stmt) Internal method to find the index of an element.- Parameters:
ownerSM
- StateManagerelement
- The elementstmt
- The statement to find the element.- Returns:
- The index of the element in the List.
-
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
-