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.DNStateManager<?> sm,
                           Map<? extends K,​? extends V> m,
                           Map<K,​V> currentMap)
      • putAll

        public void putAll​(org.datanucleus.state.DNStateManager sm,
                           Map<? extends K,​? extends V> m)
        Specified by:
        putAll in interface org.datanucleus.store.types.scostore.MapStore<K,​V>
        Overrides:
        putAll in class AbstractMapStore<K,​V>
      • processPutsAndUpdates

        protected void processPutsAndUpdates​(org.datanucleus.state.DNStateManager sm,
                                             Set<Map.Entry> puts,
                                             Set<Map.Entry> updates)
      • put

        public void put​(org.datanucleus.state.DNStateManager sm,
                        K key,
                        V value,
                        V previousValue,
                        boolean present)
      • put

        public V put​(org.datanucleus.state.DNStateManager sm,
                     K key,
                     V value)
      • remove

        public V remove​(org.datanucleus.state.DNStateManager sm,
                        Object key)
      • remove

        public void remove​(org.datanucleus.state.DNStateManager sm,
                           Object key,
                           Object oldValue)
      • clear

        public void clear​(org.datanucleus.state.DNStateManager ownerSM)
      • keySetStore

        public org.datanucleus.store.types.scostore.SetStore keySetStore()
      • valueCollectionStore

        public org.datanucleus.store.types.scostore.CollectionStore valueCollectionStore()
      • entrySetStore

        public org.datanucleus.store.types.scostore.SetStore entrySetStore()
      • getValue

        protected V getValue​(org.datanucleus.state.DNStateManager ownerSM,
                             Object key)
                      throws NoSuchElementException
        Method to retrieve a value from the Map given the key.
        Specified by:
        getValue in class AbstractMapStore<K,​V>
        Parameters:
        ownerSM - StateManager 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.DNStateManager ownerSM)
        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:
        ownerSM - StateManager for the owning object
        Returns:
        The SQLStatement
      • clearInternal

        protected void clearInternal​(org.datanucleus.state.DNStateManager ownerSM)
      • removeInternal

        protected void removeInternal​(org.datanucleus.state.DNStateManager sm,
                                      Object key)
      • internalUpdate

        protected void internalUpdate​(org.datanucleus.state.DNStateManager ownerSM,
                                      org.datanucleus.store.connection.ManagedConnection conn,
                                      boolean batched,
                                      Object key,
                                      Object value,
                                      boolean executeNow)
        Method to process an "update" statement (where the key already has a value in the join table).
        Parameters:
        ownerSM - StateManager 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
      • internalPut

        protected int[] internalPut​(org.datanucleus.state.DNStateManager ownerSM,
                                    org.datanucleus.store.connection.ManagedConnection conn,
                                    boolean batched,
                                    Object key,
                                    Object value,
                                    boolean executeNow)
        Method to process a "put" statement (where the key has no value in the join table).
        Parameters:
        ownerSM - StateManager 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
      • updateEmbeddedKey

        public boolean updateEmbeddedKey​(org.datanucleus.state.DNStateManager sm,
                                         Object key,
                                         int fieldNumber,
                                         Object newValue)
      • updateEmbeddedValue

        public boolean updateEmbeddedValue​(org.datanucleus.state.DNStateManager sm,
                                           Object value,
                                           int fieldNumber,
                                           Object newValue)
      • 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