Class HepPlanner

java.lang.Object
org.apache.calcite.plan.AbstractRelOptPlanner
org.apache.calcite.plan.hep.HepPlanner
All Implemented Interfaces:
RelOptPlanner

public class HepPlanner
extends AbstractRelOptPlanner
HepPlanner is a heuristic implementation of the RelOptPlanner interface.
  • Constructor Details

    • HepPlanner

      public HepPlanner​(HepProgram program)
      Creates a new HepPlanner that allows DAG.
      Parameters:
      program - program controlling rule application
    • HepPlanner

      public HepPlanner​(HepProgram program, Context context)
      Creates a new HepPlanner that allows DAG.
      Parameters:
      program - program controlling rule application
      context - to carry while planning
    • HepPlanner

      public HepPlanner​(HepProgram program, Context context, boolean noDag, Function2<RelNode,​RelNode,​Void> onCopyHook, RelOptCostFactory costFactory)
      Creates a new HepPlanner with the option to keep the graph a tree (noDag = true) or allow DAG (noDag = false).
      Parameters:
      noDag - If false, create shared nodes if expressions are identical
      program - Program controlling rule application
      onCopyHook - Function to call when a node is copied
  • Method Details

    • setRoot

      public void setRoot​(RelNode rel)
      Description copied from interface: RelOptPlanner
      Sets the root node of this query.
      Parameters:
      rel - Relational expression
    • getRoot

      public RelNode getRoot()
      Description copied from interface: RelOptPlanner
      Returns the root node of this query.
      Returns:
      Root node
    • clear

      public void clear()
      Description copied from interface: RelOptPlanner
      Removes all internal state, including all registered rules, materialized views, and lattices.
      Specified by:
      clear in interface RelOptPlanner
      Overrides:
      clear in class AbstractRelOptPlanner
    • changeTraits

      public RelNode changeTraits​(RelNode rel, RelTraitSet toTraits)
      Description copied from interface: RelOptPlanner
      Changes a relational expression to an equivalent one with a different set of traits.
      Parameters:
      rel - Relational expression (may or may not have been registered; must not have the desired traits)
      toTraits - Trait set to convert the relational expression to
      Returns:
      Relational expression with desired traits. Never null, but may be abstract
    • findBestExp

      public RelNode findBestExp()
      Description copied from interface: RelOptPlanner
      Finds the most efficient expression to implement this query.
    • register

      public RelNode register​(RelNode rel, RelNode equivRel)
      Description copied from interface: RelOptPlanner
      Registers a relational expression in the expression bank.

      After it has been registered, you may not modify it.

      The expression must not already have been registered. If you are not sure whether it has been registered, call RelOptPlanner.ensureRegistered(RelNode, RelNode).

      Parameters:
      rel - Relational expression to register (must not already be registered)
      equivRel - Relational expression it is equivalent to (may be null)
      Returns:
      the same expression, or an equivalent existing expression
    • onCopy

      public void onCopy​(RelNode rel, RelNode newRel)
      Description copied from interface: RelOptPlanner
      Called when a relational expression is copied to a similar expression.
      Specified by:
      onCopy in interface RelOptPlanner
      Overrides:
      onCopy in class AbstractRelOptPlanner
    • ensureRegistered

      public RelNode ensureRegistered​(RelNode rel, RelNode equivRel)
      Description copied from interface: RelOptPlanner
      Registers a relational expression if it is not already registered.

      If equivRel is specified, rel is placed in the same equivalence set. It is OK if equivRel has different traits; rel will end up in a different subset of the same set.

      It is OK if rel is a subset.

      Parameters:
      rel - Relational expression to register
      equivRel - Relational expression it is equivalent to (may be null)
      Returns:
      Registered relational expression
    • isRegistered

      public boolean isRegistered​(RelNode rel)
      Description copied from interface: RelOptPlanner
      Determines whether a relational expression has been registered.
      Parameters:
      rel - expression to test
      Returns:
      whether rel has been registered
    • registerMetadataProviders

      public void registerMetadataProviders​(List<RelMetadataProvider> list)
      Description copied from interface: RelOptPlanner
      Gives this planner a chance to register one or more RelMetadataProviders in the chain which will be used to answer metadata queries.

      Planners which use their own relational expressions internally to represent concepts such as equivalence classes will generally need to supply corresponding metadata providers.

      Specified by:
      registerMetadataProviders in interface RelOptPlanner
      Overrides:
      registerMetadataProviders in class AbstractRelOptPlanner
      Parameters:
      list - receives planner's custom providers, if any
    • getRelMetadataTimestamp

      public long getRelMetadataTimestamp​(RelNode rel)
      Description copied from interface: RelOptPlanner
      Gets a timestamp for a given rel's metadata. This timestamp is used by CachingRelMetadataProvider to decide whether cached metadata has gone stale.
      Specified by:
      getRelMetadataTimestamp in interface RelOptPlanner
      Overrides:
      getRelMetadataTimestamp in class AbstractRelOptPlanner
      Parameters:
      rel - rel of interest
      Returns:
      timestamp of last change which might affect metadata derivation
    • getMaterializations

      public com.google.common.collect.ImmutableList<RelOptMaterialization> getMaterializations()
      Description copied from interface: RelOptPlanner
      Returns the materializations that have been registered with the planner.
      Specified by:
      getMaterializations in interface RelOptPlanner
      Overrides:
      getMaterializations in class AbstractRelOptPlanner
    • addMaterialization

      public void addMaterialization​(RelOptMaterialization materialization)
      Description copied from interface: RelOptPlanner
      Defines a pair of relational expressions that are equivalent.

      Typically tableRel is a LogicalTableScan representing a table that is a materialized view and queryRel is the SQL expression that populates that view. The intention is that tableRel is cheaper to evaluate and therefore if the query being optimized uses (or can be rewritten to use) queryRel as a sub-expression then it can be optimized by using tableRel instead.

      Specified by:
      addMaterialization in interface RelOptPlanner
      Overrides:
      addMaterialization in class AbstractRelOptPlanner