Class JoinSetStore<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.AbstractSetStore<E>
-
- org.datanucleus.store.rdbms.scostore.JoinSetStore<E>
-
- All Implemented Interfaces:
org.datanucleus.store.types.scostore.CollectionStore<E>
,org.datanucleus.store.types.scostore.SetStore<E>
,org.datanucleus.store.types.scostore.Store
public class JoinSetStore<E> extends AbstractSetStore<E>
Implementation of aSetStore
using join table.
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
locateStmt
Statement to check the existence of an owner-element relation.protected java.lang.String
maxOrderColumnIdStmt
Statement to get the maximum order column id so we can set the next insert value.-
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 Constructor Description JoinSetStore(org.datanucleus.metadata.AbstractMemberMetaData mmd, CollectionTable joinTable, org.datanucleus.ClassLoaderResolver clr)
Constructor for a join set store for RDBMS.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
add(org.datanucleus.state.DNStateManager sm, E element, int size)
boolean
addAll(org.datanucleus.state.DNStateManager sm, java.util.Collection<? extends E> elements, int size)
protected int[]
doInternalAdd(org.datanucleus.state.DNStateManager sm, E element, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int orderId, boolean executeNow)
private boolean
elementAlreadyContainsOwnerInMtoN(org.datanucleus.state.DNStateManager ownerSM, java.lang.Object element)
Convenience method to check if an element already refers to the owner in an M-N relation (i.e added from other side).ElementIteratorStatement
getIteratorStatement(org.datanucleus.ExecutionContext ec, org.datanucleus.FetchPlan fp, boolean addRestrictionOnOwner)
Method to return the SQLStatement and mapping for an iterator for this backing store.private java.lang.String
getLocateStatementString(java.lang.Object element)
Generate statement for checking the existence of an owner-element relation (used for M-N).private java.lang.String
getLocateStmt(java.lang.Object element)
private java.lang.String
getMaxOrderColumnIdStmt()
Generate statement for obtaining the maximum id for the order column.protected int
getNextIDForOrderColumn(org.datanucleus.state.DNStateManager sm)
protected java.lang.String
getRemoveAllStmt(org.datanucleus.state.DNStateManager sm, java.util.Collection elements)
Generate statement for removing a collection of items from the Set.protected java.lang.String
getRemoveStmt(java.lang.Object element)
Generate statement for deleting items from the Set.java.util.Iterator<E>
iterator(org.datanucleus.state.DNStateManager ownerSM)
Accessor for an iterator through the container elements.private boolean
locate(org.datanucleus.state.DNStateManager sm, java.lang.Object element)
boolean
removeAll(org.datanucleus.state.DNStateManager sm, java.util.Collection elements, int size)
void
update(org.datanucleus.state.DNStateManager sm, java.util.Collection<? extends E> coll)
-
Methods inherited from class org.datanucleus.store.rdbms.scostore.AbstractSetStore
remove
-
Methods inherited from class org.datanucleus.store.rdbms.scostore.AbstractCollectionStore
contains, getUpdateEmbeddedElementStmt, 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
-
-
-
-
Constructor Detail
-
JoinSetStore
public JoinSetStore(org.datanucleus.metadata.AbstractMemberMetaData mmd, CollectionTable joinTable, org.datanucleus.ClassLoaderResolver clr)
Constructor for a join set store for RDBMS.- Parameters:
mmd
- Metadata for the member that has the set with join tablejoinTable
- The join tableclr
- The ClassLoaderResolver
-
-
Method Detail
-
update
public void update(org.datanucleus.state.DNStateManager sm, java.util.Collection<? extends E> coll)
- Specified by:
update
in interfaceorg.datanucleus.store.types.scostore.CollectionStore<E>
- Overrides:
update
in classAbstractCollectionStore<E>
-
elementAlreadyContainsOwnerInMtoN
private boolean elementAlreadyContainsOwnerInMtoN(org.datanucleus.state.DNStateManager ownerSM, java.lang.Object element)
Convenience method to check if an element already refers to the owner in an M-N relation (i.e added from other side).- Parameters:
ownerSM
- StateManager of the ownerelement
- The element- Returns:
- Whether the element contains the owner
-
add
public boolean add(org.datanucleus.state.DNStateManager sm, E element, int size)
-
addAll
public boolean addAll(org.datanucleus.state.DNStateManager sm, java.util.Collection<? extends E> elements, int size)
-
removeAll
public boolean removeAll(org.datanucleus.state.DNStateManager sm, java.util.Collection elements, int size)
-
getRemoveStmt
protected java.lang.String getRemoveStmt(java.lang.Object element)
Generate statement for deleting items from the Set. The EMBEDDEDFIELDX is only present when the elements are PC(embedded).DELETE FROM SETTABLE WHERE OWNERCOL=? AND ELEMENTCOL = ? [AND EMBEDDEDFIELD1 = ? AND EMBEDDEDFIELD2 = ? AND EMBEDDEDFIELD3 = ?] [AND RELATION_DISCRIM = ?]
- Overrides:
getRemoveStmt
in classAbstractCollectionStore<E>
- Parameters:
element
- The element to remove- Returns:
- Statement for deleting items from the Set.
-
getRemoveAllStmt
protected java.lang.String getRemoveAllStmt(org.datanucleus.state.DNStateManager sm, java.util.Collection elements)
Generate statement for removing a collection of items from the Set.DELETE FROM SETTABLE WHERE (OWNERCOL=? AND ELEMENTCOL=?) OR (OWNERCOL=? AND ELEMENTCOL=?) OR (OWNERCOL=? AND ELEMENTCOL=?)
- Parameters:
sm
- StateManager for the ownerelements
- Collection of elements to remove- Returns:
- Statement for deleting items from the Set.
-
locate
private boolean locate(org.datanucleus.state.DNStateManager sm, java.lang.Object element)
-
doInternalAdd
protected int[] doInternalAdd(org.datanucleus.state.DNStateManager sm, E element, org.datanucleus.store.connection.ManagedConnection conn, boolean batched, int orderId, boolean executeNow)
-
getLocateStmt
private java.lang.String getLocateStmt(java.lang.Object element)
-
getLocateStatementString
private java.lang.String getLocateStatementString(java.lang.Object element)
Generate statement for checking the existence of an owner-element relation (used for M-N).SELECT 1 FROM JOINTABLE WHERE OWNERCOL = ? AND ELEMENTCOL = ?
- Parameters:
element
- The element to locate- Returns:
- Statement for locating an owner-element relation in the join table
-
getNextIDForOrderColumn
protected int getNextIDForOrderColumn(org.datanucleus.state.DNStateManager sm)
-
getMaxOrderColumnIdStmt
private java.lang.String getMaxOrderColumnIdStmt()
Generate statement for obtaining the maximum id for the order column.SELECT MAX(SCOID) FROM SETTABLE WHERE OWNERCOL=? [AND RELATION_DISCRIM=?]
- Returns:
- The Statement returning the higher id
-
iterator
public java.util.Iterator<E> iterator(org.datanucleus.state.DNStateManager ownerSM)
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 classAbstractSetStore<E>
- Parameters:
ownerSM
- StateManager for the container.- Returns:
- The Iterator
-
getIteratorStatement
public ElementIteratorStatement getIteratorStatement(org.datanucleus.ExecutionContext ec, org.datanucleus.FetchPlan fp, boolean addRestrictionOnOwner)
Method to return the SQLStatement and mapping for an iterator for this backing store. Create a statement of the formSELECT ELEM_COLS FROM JOIN_TBL [JOIN ELEM_TBL ON ELEM_TBL.ID = JOIN_TBL.ELEM_ID] [WHERE] [JOIN_TBL.OWNER_ID = {value}] [AND] [JOIN_TBL.DISCRIM = {discrimValue}] [ORDER BY {orderClause}]
This is public to provide access for BulkFetchXXXHandler class(es).- Parameters:
ec
- ExecutionContextfp
- FetchPlan to use in determining which fields of element to selectaddRestrictionOnOwner
- Whether to restrict to a particular owner (otherwise functions as bulk fetch for many owners).- Returns:
- The SQLStatement and its associated StatementClassMapping
-
-