Class FetchPlan

java.lang.Object
org.datanucleus.FetchPlan
All Implemented Interfaces:
Serializable

public class FetchPlan extends Object implements Serializable
FetchPlan for fields for use internally. A FetchPlan has a series of FetchPlanForClass objects being the fetch plan for particular classes. Each FetchPlanForClass defines a series of fields of that class that are part of the fetch plan. There are two types of fetch groups under consideration here.
  • Static fetch groups, defined in MetaData (XML/Annotations).
  • Dynamic fetch groups, defined via an API.
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • DEFAULT

      public static final String DEFAULT
      Constant defining the fields in the default fetch group.
      See Also:
    • ALL

      public static final String ALL
      Constant defining all fields
      See Also:
    • NONE

      public static final String NONE
      Constant defing no fields.
      See Also:
    • DETACH_UNLOAD_FIELDS

      public static final int DETACH_UNLOAD_FIELDS
      Members that are loaded but not in current fetch plan should be unloaded before detachment.
      See Also:
    • DETACH_LOAD_FIELDS

      public static final int DETACH_LOAD_FIELDS
      Members that are not loaded but are in the current fetch plan should be loaded before detachment.
      See Also:
    • FETCH_SIZE_GREEDY

      public static final int FETCH_SIZE_GREEDY
      Fetch size to load all possible.
      See Also:
    • FETCH_SIZE_OPTIMAL

      public static final int FETCH_SIZE_OPTIMAL
      Fetch size for the implementation to decide how many to load.
      See Also:
    • RECURSION_DEPTH_UNLIMITED

      public static final int RECURSION_DEPTH_UNLIMITED
      See Also:
    • RECURSION_DEPTH_FK_ONLY

      public static final int RECURSION_DEPTH_FK_ONLY
      See Also:
    • ec

      final transient ExecutionContext ec
      Execution Context that this FetchPlan relates to.
    • clr

      final transient ClassLoaderResolver clr
      ClassLoader resolver.
    • groupNames

      final Set<String> groupNames
      Names of the "defined" fetch groups in the current FetchPlan.
    • dynamicGroups

      transient Set<FetchGroup> dynamicGroups
      The "dynamic" fetch groups in the current FetchPlan.
    • fetchSize

      int fetchSize
      The Fetch size. For use when using large result sets.
    • detachmentOptions

      int detachmentOptions
      Options to be used during detachment. Spec 12.7 says that the default is DETACH_LOAD_FIELDS.
    • fetchPlansByClassName

      final transient Map<String,FetchPlanForClass> fetchPlansByClassName
      FetchPlanForClass keyed by the class name.
    • maxFetchDepth

      int maxFetchDepth
      Maximum depth to fetch from the root object.
    • detachmentRootClasses

      Class[] detachmentRootClasses
      The classes used as the roots for detachment (DetachAllOnCommit).
    • detachmentRoots

      Collection<Object> detachmentRoots
      The instances used as the roots for detachment (DetachAllOnCommit).
    • isToCallPostLoadFetchPlanByCmd

      private transient Map<AbstractClassMetaData,Map<BitSet,Boolean>> isToCallPostLoadFetchPlanByCmd
      Cache the result of FetchPlanImpl.isToCallPostLoadFetchPlan(): for a given set of loaded members of a certain class. Must be invalidated with any change of fields to load, e.g. adding a fetchgroup.
  • Constructor Details

    • FetchPlan

      public FetchPlan(ExecutionContext ec, ClassLoaderResolver clr)
      Constructor. Initially has the default fetch group.
      Parameters:
      ec - execution context
      clr - ClassLoader Resolver
  • Method Details

    • markDirty

      private void markDirty()
      Mark all managed fetch plans to be dirty, so the active members need to be recomputed.
    • getFetchPlanForClass

      public FetchPlanForClass getFetchPlanForClass(AbstractClassMetaData cmd)
      Access the fetch plan for the class.
      Parameters:
      cmd - metadata for the class
      Returns:
      the FetchPlanForClass
    • addGroup

      public FetchPlan addGroup(String grpName)
      Method to add a group to the fetch plan.
      Parameters:
      grpName - The fetch group to add
      Returns:
      Updated Fetch Plan
    • removeGroup

      public FetchPlan removeGroup(String grpName)
      Method to remove a group from the fetch plan.
      Parameters:
      grpName - The fetch group to remove
      Returns:
      Updated Fetch Plan
    • clearGroups

      public FetchPlan clearGroups()
      Method to clear the current groups and activate the DFG.
      Returns:
      The FetchPlan
    • getGroups

      public Set<String> getGroups()
      Accessor for the static groups for this FetchPlan. Doesn't return the dynamic groups.
      Returns:
      The fetch plan groups (unmodifiable)
    • setGroups

      public FetchPlan setGroups(Collection<String> grpNames)
      Method to set the groups of the fetch plan.
      Parameters:
      grpNames - Names of the groups
      Returns:
      Updated Fetch Plan
    • setGroups

      public FetchPlan setGroups(String[] grpNames)
      Method to set the groups using an array.
      Parameters:
      grpNames - Names of the groups
      Returns:
      The Fetch Plan
    • setGroup

      public FetchPlan setGroup(String grpName)
      Method to set the fetch group.
      Parameters:
      grpName - Name of the group
      Returns:
      The Fetch Plan
    • clearDynamicGroups

      private void clearDynamicGroups()
      Convenience method to clear all dynamic groups.
    • addDynamicGroup

      private boolean addDynamicGroup(String grpName)
      Convenience method to add dynamic fetch groups for the specified name.
      Parameters:
      grpName - Name of group
      Returns:
      Whether the groups were changed
    • notifyFetchGroupChange

      public void notifyFetchGroupChange(FetchGroup group)
      Method to notify this FetchPlan that the specified FetchGroup has been updated. dynamic fetch groups extension
      Parameters:
      group - The dynamic FetchGroup
    • notifyFetchGroupRemove

      public void notifyFetchGroupRemove(FetchGroup group)
      Method to notify this FetchPlan that the specified FetchGroup has been updated. dynamic fetch groups extension
      Parameters:
      group - The dynamic FetchGroup
    • setDetachmentRoots

      public FetchPlan setDetachmentRoots(Collection<Object> roots)
      Set the roots for DetachAllOnCommit
      Parameters:
      roots - The roots of the detachment graph.
      Returns:
      The fetch plan with these roots
    • getDetachmentRoots

      public Collection<Object> getDetachmentRoots()
      Accessor for the roots of the detachment graph for DetachAllOnCommit.
      Returns:
      The roots of the detachment graph.
    • setDetachmentRootClasses

      public FetchPlan setDetachmentRootClasses(Class[] rootClasses)
      Set the classes used for roots of the detachment graph for DetachAllOnCommit.
      Parameters:
      rootClasses - Classes to be used as roots of the detachment graph
      Returns:
      The fetch plan with these roots
    • getDetachmentRootClasses

      public Class[] getDetachmentRootClasses()
      Accessor for the root classes of the detachment graph for DetachAllOnCommit.
      Returns:
      The classes to be used as the root of the detachment graph.
    • resetDetachmentRoots

      void resetDetachmentRoots()
      Method called at commit() to clear out the detachment roots.
    • setMaxFetchDepth

      public FetchPlan setMaxFetchDepth(int max)
      Mutator for the maximum fetch depth where -1 implies no restriction on the fetch depth. Throws NucleusUserException when an illegal value (either 0 or ≤ -2)
      Parameters:
      max - The maximum fetch depth to fetch to
      Returns:
      The FetchPlan
    • getMaxFetchDepth

      public int getMaxFetchDepth()
      Accessor for the maximum fetch depth.
      Returns:
      The maximum fetch depth
    • setFetchSize

      public FetchPlan setFetchSize(int fetchSize)
      Method to set the fetch size when using large result sets.
      Parameters:
      fetchSize - the size
      Returns:
      Updated Fetch Plan
    • getFetchSize

      public int getFetchSize()
      Accessor for the fetch size when using large result sets.
      Returns:
      The size
    • getDetachmentOptions

      public int getDetachmentOptions()
      Return the options to be used at detachment.
      Returns:
      Detachment options
    • setDetachmentOptions

      public FetchPlan setDetachmentOptions(int options)
      Set the options to be used at detachment.
      Parameters:
      options - The options
      Returns:
      The updated fetch plan.
    • getCopy

      public FetchPlan getCopy()
      Returns a copy of this FetchPlan with all settings initialized. Used when a Query has to have its own FetchPlan, so takes a copy of that of the ExecutionContext.
      Returns:
      the FetchPlan copy
    • getCachedIsToCallPostLoadFetchPlan

      Boolean getCachedIsToCallPostLoadFetchPlan(AbstractClassMetaData cmd, BitSet loadedFields)
    • cacheIsToCallPostLoadFetchPlan

      void cacheIsToCallPostLoadFetchPlan(AbstractClassMetaData cmd, BitSet loadedFields, Boolean itcplfp)
    • invalidateCachedIsToCallPostLoadFetchPlan

      void invalidateCachedIsToCallPostLoadFetchPlan(AbstractClassMetaData cmd)
    • toStringWithClasses

      public String toStringWithClasses()
    • toString

      public String toString()
      Overrides:
      toString in class Object