Class HepPlanner

    • Constructor Detail

      • 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 Detail

      • 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
      • 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
      • 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
      • 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