Class JoinMapStore<K,​V>

  • All Implemented Interfaces:
    org.datanucleus.store.types.scostore.MapStore<K,​V>, org.datanucleus.store.types.scostore.Store

    public class JoinMapStore<K,​V>
    extends AbstractMapStore<K,​V>
    RDBMS-specific implementation of a MapStore using join table.
    • Field Detail

      • mapTable

        protected MapTable mapTable
        Join table storing the map relation between key and value.
      • valueTable

        protected DatastoreClass valueTable
        Table storing the values.
      • adapterMapping

        protected final JavaTypeMapping adapterMapping
        Mapping for when the element mappings columns can't be part of the primary key due to datastore limitations (e.g BLOB types).
    • Constructor Detail

      • JoinMapStore

        public JoinMapStore​(MapTable mapTable,
                            org.datanucleus.ClassLoaderResolver clr)
        Constructor for the backing store of a join map for RDBMS.
        Parameters:
        mapTable - Join table for the Map
        clr - The ClassLoaderResolver
    • Method Detail

      • initialise

        protected void initialise()
      • putAll

        public void putAll​(org.datanucleus.state.ObjectProvider op,
                           Map<? extends K,​? extends V> m)
        Method to put all elements from a Map into our Map.
        Specified by:
        putAll in interface org.datanucleus.store.types.scostore.MapStore<K,​V>
        Overrides:
        putAll in class AbstractMapStore<K,​V>
        Parameters:
        op - ObjectProvider for the Map
        m - The Map to add
      • put

        public V put​(org.datanucleus.state.ObjectProvider op,
                     K key,
                     V value)
        Method to put an item in the Map.
        Parameters:
        op - ObjectProvider for the map.
        key - The key to store the value against
        value - The value to store.
        Returns:
        The value stored.
      • remove

        public V remove​(org.datanucleus.state.ObjectProvider op,
                        Object key)
        Method to remove an entry from the map.
        Parameters:
        op - ObjectProvider for the map.
        key - Key of the entry to remove.
        Returns:
        The value that was removed.
      • remove

        public V remove​(org.datanucleus.state.ObjectProvider op,
                        Object key,
                        Object oldValue)
        Method to remove an item from the map.
        Parameters:
        op - ObjectProvider for the map.
        key - Key of the item to remove.
        Returns:
        The value that was removed.
      • clear

        public void clear​(org.datanucleus.state.ObjectProvider ownerOP)
        Method to clear the map of all values.
        Parameters:
        ownerOP - ObjectProvider for the map.
      • keySetStore

        public org.datanucleus.store.types.scostore.SetStore keySetStore()
        Accessor for the keys in the Map.
        Returns:
        The keys
      • valueCollectionStore

        public org.datanucleus.store.types.scostore.CollectionStore valueCollectionStore()
        Accessor for the values in the Map.
        Returns:
        The values.
      • entrySetStore

        public org.datanucleus.store.types.scostore.SetStore entrySetStore()
        Accessor for the map entries in the Map.
        Returns:
        The map entries.
      • getValue

        protected V getValue​(org.datanucleus.state.ObjectProvider ownerOP,
                             Object key)
                      throws NoSuchElementException
        Method to retrieve a value from the Map given the key.
        Specified by:
        getValue in class AbstractMapStore<K,​V>
        Parameters:
        ownerOP - ObjectProvider for the owner of the map.
        key - The key to retrieve the value for.
        Returns:
        The value for this key
        Throws:
        NoSuchElementException - if the value for the key was not found
      • getSQLStatementForGet

        protected SelectStatement getSQLStatementForGet​(org.datanucleus.state.ObjectProvider ownerOP)
        Method to return an SQLStatement for retrieving the value for a key. Selects the join table and optionally joins to the value table if it has its own table.
        Parameters:
        ownerOP - ObjectProvider for the owning object
        Returns:
        The SQLStatement
      • clearInternal

        protected void clearInternal​(org.datanucleus.state.ObjectProvider ownerOP)
      • removeInternal

        protected void removeInternal​(org.datanucleus.state.ObjectProvider op,
                                      Object key)
      • internalUpdate

        protected void internalUpdate​(org.datanucleus.state.ObjectProvider ownerOP,
                                      org.datanucleus.store.connection.ManagedConnection conn,
                                      boolean batched,
                                      Object key,
                                      Object value,
                                      boolean executeNow)
                               throws MappedDatastoreException
        Method to process an "update" statement (where the key already has a value in the join table).
        Parameters:
        ownerOP - ObjectProvider for the owner
        conn - The Connection
        batched - Whether we are batching it
        key - The key
        value - The new value
        executeNow - Whether to execute the statement now or wait til any batch
        Throws:
        MappedDatastoreException - Thrown if an error occurs
      • internalPut

        protected int[] internalPut​(org.datanucleus.state.ObjectProvider ownerOP,
                                    org.datanucleus.store.connection.ManagedConnection conn,
                                    boolean batched,
                                    Object key,
                                    Object value,
                                    boolean executeNow)
                             throws MappedDatastoreException
        Method to process a "put" statement (where the key has no value in the join table).
        Parameters:
        ownerOP - ObjectProvider for the owner
        conn - The Connection
        batched - Whether we are batching it
        key - The key
        value - The value
        executeNow - Whether to execute the statement now or wait til batching
        Returns:
        The return codes from any executed statement
        Throws:
        MappedDatastoreException - Thrown if an error occurs
      • updateEmbeddedKey

        public boolean updateEmbeddedKey​(org.datanucleus.state.ObjectProvider op,
                                         Object key,
                                         int fieldNumber,
                                         Object newValue)
        Method to update a field of an embedded key.
        Parameters:
        op - ObjectProvider of the owner
        key - The key to update
        fieldNumber - The number of the field to update
        newValue - The new value
      • updateEmbeddedValue

        public boolean updateEmbeddedValue​(org.datanucleus.state.ObjectProvider op,
                                           Object value,
                                           int fieldNumber,
                                           Object newValue)
        Method to update a field of an embedded key.
        Parameters:
        op - ObjectProvider of the owner
        value - The value to update
        fieldNumber - The number of the field to update
        newValue - The new value
      • getUpdateEmbeddedKeyStmt

        protected String getUpdateEmbeddedKeyStmt​(JavaTypeMapping fieldMapping,
                                                  JavaTypeMapping ownerMapping,
                                                  JavaTypeMapping keyMapping,
                                                  Table mapTable)
        Generate statement for update the field of an embedded key.
         UPDATE MAPTABLE
         SET EMBEDDEDKEYCOL1 = ?
         WHERE OWNERCOL=?
         AND EMBEDDEDKEYCOL1 = ?
         AND EMBEDDEDKEYCOL2 = ? ...
         
        Parameters:
        fieldMapping - The mapping for the field (of the key) to be updated
        ownerMapping - The owner mapping
        keyMapping - The key mapping
        mapTable - The map table
        Returns:
        Statement for updating an embedded key in the Set
      • getUpdateEmbeddedValueStmt

        protected String getUpdateEmbeddedValueStmt​(JavaTypeMapping fieldMapping,
                                                    JavaTypeMapping ownerMapping,
                                                    JavaTypeMapping valueMapping,
                                                    Table mapTable)
        Generate statement for update the field of an embedded value.
         UPDATE MAPTABLE
         SET EMBEDDEDVALUECOL1 = ?
         WHERE OWNERCOL=?
         AND EMBEDDEDVALUECOL1 = ?
         AND EMBEDDEDVALUECOL2 = ? ...
         
        Parameters:
        fieldMapping - The mapping for the field to be updated
        ownerMapping - The owner mapping
        valueMapping - mapping for the value
        mapTable - The map table
        Returns:
        Statement for updating an embedded value in the Set