| 
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.eigenbase.relopt.AbstractRelOptPlanner
org.eigenbase.relopt.hep.HepPlanner
public class HepPlanner
HepPlanner is a heuristic implementation of the RelOptPlanner
 interface.
| Field Summary | |
|---|---|
private  Set<RelOptRule> | 
allRules
 | 
private  HepProgram | 
currentProgram
 | 
private  org.jgrapht.DirectedGraph<HepRelVertex,org.jgrapht.graph.DefaultEdge> | 
graph
Query graph, with edges directed from parent to child.  | 
private  int | 
graphSizeLastGC
 | 
private  HepProgram | 
mainProgram
 | 
private  Map<String,HepRelVertex> | 
mapDigestToVertex
 | 
private  boolean | 
noDAG
 | 
private  int | 
nTransformations
 | 
private  int | 
nTransformationsLastGC
 | 
private  RelTraitSet | 
requestedRootTraits
 | 
private  HepRelVertex | 
root
 | 
| Fields inherited from interface org.eigenbase.relopt.RelOptPlanner | 
|---|
tracer | 
| Constructor Summary | |
|---|---|
HepPlanner(HepProgram program)
Creates a new HepPlanner that allows DAG.  | 
|
HepPlanner(HepProgram program,
           boolean noDAG)
Creates a new HepPlanner with the option to keep the graph a tree(noDAG=true) or allow DAG(noDAG=false).  | 
|
| Method Summary | |
|---|---|
private  HepRelVertex | 
addRelToGraph(RelNode rel)
 | 
 boolean | 
addRule(RelOptRule rule)
Registers a rule.  | 
private  HepRelVertex | 
applyRule(RelOptRule rule,
          HepRelVertex vertex,
          boolean forceConversions)
 | 
private  void | 
applyRules(Collection<RelOptRule> rules,
           boolean forceConversions)
 | 
private  HepRelVertex | 
applyTransformationResults(HepRelVertex vertex,
                           HepRuleCall call,
                           RelTrait parentTrait)
 | 
private  void | 
assertNoCycles()
 | 
private  RelNode | 
buildFinalPlan(HepRelVertex vertex)
 | 
 RelNode | 
changeTraits(RelNode rel,
             RelTraitSet toTraits)
Changes a relational expression to an equivalent one with a different set of traits.  | 
private  void | 
collectGarbage()
 | 
private  void | 
contractVertices(HepRelVertex preservedVertex,
                 HepRelVertex discardedVertex,
                 List<HepRelVertex> parents)
 | 
private  boolean | 
doesConverterApply(ConverterRule converterRule,
                   HepRelVertex vertex)
 | 
private  void | 
dumpGraph()
 | 
 RelNode | 
ensureRegistered(RelNode rel,
                 RelNode equivRel)
Registers a relational expression if it is not already registered.  | 
(package private)  void | 
executeInstruction(HepInstruction.BeginGroup instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.CommonRelSubExprRules instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.ConverterRules instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.EndGroup instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.MatchLimit instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.MatchOrder instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.RuleClass instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.RuleCollection instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.RuleInstance instruction)
 | 
(package private)  void | 
executeInstruction(HepInstruction.Subprogram instruction)
 | 
private  void | 
executeProgram(HepProgram program)
 | 
 RelNode | 
findBestExp()
Finds the most efficient expression to implement this query.  | 
private  Iterator<HepRelVertex> | 
getGraphIterator(HepRelVertex start)
 | 
 long | 
getRelMetadataTimestamp(RelNode rel)
Gets a timestamp for a given rel's metadata.  | 
 RelNode | 
getRoot()
Returns the root node of this query.  | 
private  List<HepRelVertex> | 
getVertexParents(HepRelVertex vertex)
Retrieves the parent vertices of a vertex.  | 
 boolean | 
isRegistered(RelNode rel)
Determines whether a relational expression has been registered.  | 
private  boolean | 
matchOperands(RelOptRuleOperand operand,
              RelNode rel,
              List<RelNode> bindings,
              Map<RelNode,List<RelNode>> nodeChildren)
 | 
 RelNode | 
register(RelNode rel,
         RelNode equivRel)
Registers a relational expression in the expression bank.  | 
 void | 
registerMetadataProviders(ChainedRelMetadataProvider chain)
Gives this planner a chance to register one or more RelMetadataProviders in the chain which will be used to answer metadata
 queries. | 
 boolean | 
removeRule(RelOptRule rule)
Removes a rule.  | 
 void | 
setRoot(RelNode rel)
Sets the root node of this query.  | 
private  boolean | 
skippingGroup()
 | 
private  void | 
updateVertex(HepRelVertex vertex,
             RelNode rel)
 | 
| Methods inherited from class org.eigenbase.relopt.AbstractRelOptPlanner | 
|---|
addListener, addRelTraitDef, checkCancel, chooseDelegate, fireRule, getCost, getJavaRelImplementor, getListener, getRuleByDescription, isRuleExcluded, makeCost, makeHugeCost, makeInfiniteCost, makeTinyCost, makeZeroCost, mapRuleDescription, notifyChosen, notifyDiscard, notifyEquivalence, notifyTransformation, registerSchema, setCancelFlag, setImportance, setRuleDescExclusionFilter, unmapRuleDescription | 
| Methods inherited from class java.lang.Object | 
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | 
| Field Detail | 
|---|
private HepProgram mainProgram
private HepProgram currentProgram
private HepRelVertex root
private RelTraitSet requestedRootTraits
private Map<String,HepRelVertex> mapDigestToVertex
private Set<RelOptRule> allRules
private int nTransformations
private int graphSizeLastGC
private int nTransformationsLastGC
private boolean noDAG
private org.jgrapht.DirectedGraph<HepRelVertex,org.jgrapht.graph.DefaultEdge> graph
| Constructor Detail | 
|---|
public HepPlanner(HepProgram program)
program - program controlling rule application
public HepPlanner(HepProgram program,
                  boolean noDAG)
program - program controlling rule application| Method Detail | 
|---|
public void setRoot(RelNode rel)
RelOptPlanner
rel - Relational expressionpublic RelNode getRoot()
RelOptPlanner
public boolean addRule(RelOptRule rule)
RelOptPlannerConverterRule and pass the ConverterRule to
 all registered RelTraitDef
 instances.
Collection.add(E)public boolean removeRule(RelOptRule rule)
RelOptPlanner
Collection.remove(Object)
public RelNode changeTraits(RelNode rel,
                            RelTraitSet toTraits)
RelOptPlanner
rel - Relational expression, may or may not have been registeredtoTraits - Trait set to convert relational expression to
public RelNode findBestExp()
RelOptPlanner
private void executeProgram(HepProgram program)
void executeInstruction(HepInstruction.MatchLimit instruction)
void executeInstruction(HepInstruction.MatchOrder instruction)
void executeInstruction(HepInstruction.RuleInstance instruction)
void executeInstruction(HepInstruction.RuleClass instruction)
void executeInstruction(HepInstruction.RuleCollection instruction)
private boolean skippingGroup()
void executeInstruction(HepInstruction.ConverterRules instruction)
void executeInstruction(HepInstruction.CommonRelSubExprRules instruction)
void executeInstruction(HepInstruction.Subprogram instruction)
void executeInstruction(HepInstruction.BeginGroup instruction)
void executeInstruction(HepInstruction.EndGroup instruction)
private void applyRules(Collection<RelOptRule> rules,
                        boolean forceConversions)
private Iterator<HepRelVertex> getGraphIterator(HepRelVertex start)
private HepRelVertex applyRule(RelOptRule rule,
                               HepRelVertex vertex,
                               boolean forceConversions)
private boolean doesConverterApply(ConverterRule converterRule,
                                   HepRelVertex vertex)
private List<HepRelVertex> getVertexParents(HepRelVertex vertex)
vertex - the vertex
private boolean matchOperands(RelOptRuleOperand operand,
                              RelNode rel,
                              List<RelNode> bindings,
                              Map<RelNode,List<RelNode>> nodeChildren)
private HepRelVertex applyTransformationResults(HepRelVertex vertex,
                                                HepRuleCall call,
                                                RelTrait parentTrait)
public RelNode register(RelNode rel,
                        RelNode equivRel)
RelOptPlannerAfter 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).
rel - Relational expression to register (must not already be
 registered)equivRel - Relational expression it is equivalent to (may be null)
public RelNode ensureRegistered(RelNode rel,
                                RelNode equivRel)
RelOptPlanner
rel - Relational expression to registerequivRel - Relational expression it is equivalent to (may be null)
public boolean isRegistered(RelNode rel)
RelOptPlanner
rel - expression to test
private HepRelVertex addRelToGraph(RelNode rel)
private void contractVertices(HepRelVertex preservedVertex,
                              HepRelVertex discardedVertex,
                              List<HepRelVertex> parents)
private void updateVertex(HepRelVertex vertex,
                          RelNode rel)
private RelNode buildFinalPlan(HepRelVertex vertex)
private void collectGarbage()
private void assertNoCycles()
private void dumpGraph()
public void registerMetadataProviders(ChainedRelMetadataProvider chain)
RelOptPlannerRelMetadataProviders 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.
registerMetadataProviders in interface RelOptPlannerregisterMetadataProviders in class AbstractRelOptPlannerchain - receives planner's custom providers, if anypublic long getRelMetadataTimestamp(RelNode rel)
RelOptPlannerCachingRelMetadataProvider to decide whether cached metadata has
 gone stale.
getRelMetadataTimestamp in interface RelOptPlannergetRelMetadataTimestamp in class AbstractRelOptPlannerrel - rel of interest
  | 
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||