Class FKArrayStore<E>

All Implemented Interfaces:
org.datanucleus.store.types.scostore.ArrayStore<E>, org.datanucleus.store.types.scostore.Store

public class FKArrayStore<E> extends AbstractArrayStore<E>
Implementation of an FK ArrayStore.
  • Field Details

    • clearNullifyStmt

      private String clearNullifyStmt
      Statement for nullifying a FK in the element.
    • updateFkStmt

      private String updateFkStmt
      Statement for updating a foreign key in a 1-N unidirectional
  • Constructor Details

    • FKArrayStore

      public FKArrayStore(org.datanucleus.metadata.AbstractMemberMetaData mmd, RDBMSStoreManager storeMgr, org.datanucleus.ClassLoaderResolver clr)
      Parameters:
      mmd - Metadata for the owning field/property
      storeMgr - Manager for the datastore
      clr - ClassLoader resolver
  • Method Details

    • updateElementFk

      private boolean updateElementFk(org.datanucleus.state.DNStateManager ownerSM, E element, Object owner, int index)
      Update a FK and element position in the element.
      Parameters:
      ownerSM - StateManager for the owner
      element - The element to update
      owner - The owner object to set in the FK
      index - The index position (or -1 if not known)
      Returns:
      Whether it was performed successfully
    • getUpdateFkStmt

      private String getUpdateFkStmt()
      Generate statement for updating the owner, index columns in an inverse 1-N. Will result in the statement
       UPDATE ELEMENTTABLE SET FK_COL_1=?, FK_COL_2=?, FK_IDX=? [,DISTINGUISHER=?]
       WHERE ELEMENT_ID=?
       
      when we have a single element table, and
       UPDATE ? SET FK_COL_1=?, FK_COL_2=?, FK_IDX=? [,DISTINGUISHER=?]
       WHERE ELEMENT_ID=?
       
      when we have multiple element tables possible.
      Returns:
      Statement for updating the owner/index of an element in an inverse 1-N
    • clear

      public void clear(org.datanucleus.state.DNStateManager ownerSM)
      Method to clear the Array. This is called when the container object is being deleted and the elements are to be removed (maybe for dependent field).
      Specified by:
      clear in interface org.datanucleus.store.types.scostore.ArrayStore<E>
      Overrides:
      clear in class AbstractArrayStore<E>
      Parameters:
      ownerSM - StateManager
    • getClearNullifyStmt

      protected String getClearNullifyStmt()
      Generates the statement for clearing items by nulling the owner link out. The statement will be
       UPDATE ARRAYTABLE SET OWNERCOL=NULL, INDEXCOL=NULL [,DISTINGUISHER=NULL]
       WHERE OWNERCOL=? [AND DISTINGUISHER=?]
       
      when there is only one element table, and will be
       UPDATE ? SET OWNERCOL=NULL, INDEXCOL=NULL [,DISTINGUISHER=NULL]
       WHERE OWNERCOL=? [AND DISTINGUISHER=?]
       
      when there is more than 1 element table.
      Returns:
      The Statement for clearing items for the owner.
    • set

      public boolean set(org.datanucleus.state.DNStateManager ownerSM, Object array)
      Description copied from class: AbstractArrayStore
      Method to set the array for the specified owner to the passed value.
      Specified by:
      set in interface org.datanucleus.store.types.scostore.ArrayStore<E>
      Overrides:
      set in class AbstractArrayStore<E>
      Parameters:
      ownerSM - StateManager for the owner
      array - the array
      Returns:
      Whether the array was updated successfully
    • iterator

      public Iterator<E> iterator(org.datanucleus.state.DNStateManager ownerSM)
      Description copied from class: AbstractArrayStore
      Accessor for an iterator through the array elements.
      Specified by:
      iterator in interface org.datanucleus.store.types.scostore.ArrayStore<E>
      Specified by:
      iterator in class AbstractArrayStore<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 form
       SELECT ELEM_COLS
       FROM ELEM_TBL
       [WHERE]
         [ELEM_TBL.OWNER_ID = {value}] [AND]
         [ELEM_TBL.DISCRIM = {discrimValue}]
       [ORDER BY {orderClause}]
       
      Parameters:
      ec - ExecutionContext
      fp - FetchPlan to use in determing which fields of element to select
      addRestrictionOnOwner - Whether to restrict to a particular owner (otherwise functions as bulk fetch for many owners).
      Returns:
      The SQLStatement and its associated StatementClassMapping