| 
 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.eigenbase.relopt.RelOptRule
public abstract class RelOptRule
A RelOptRule transforms an expression into another. It has a
 list of RelOptRuleOperands, which determine whether the rule can be
 applied to a particular section of the tree.
 
The optimizer figures out which rules are applicable, then calls onMatch(org.eigenbase.relopt.RelOptRuleCall) on each of them.
| Field Summary | |
|---|---|
| static RelOptRuleOperand.Dummy | ANYShorthand for RelOptRuleOperand.Dummy.ANY. | 
| protected  String | descriptionDescription of rule, must be unique within planner. | 
| private  RelOptRuleOperand | operandRoot of operand tree. | 
|  RelOptRuleOperand[] | operandsFlattened list of operands. | 
| Constructor Summary | |
|---|---|
| RelOptRule(RelOptRuleOperand operand)Creates a rule. | |
| RelOptRule(RelOptRuleOperand operand,
           String description)Creates a rule with an explicit description. | |
| Method Summary | |
|---|---|
| private  void | assignSolveOrder()Builds each operand's solve-order. | 
| static RelNode | convert(RelNode rel,
        RelTraitSet toTraits)Converts a relation expression to a give set of traits, if it does not already have those traits. | 
|  boolean | equals(Object obj) | 
| protected  boolean | equals(RelOptRule that)Returns whether this rule is equal to another rule. | 
| private  RelOptRuleOperand[] | flattenOperands(RelOptRuleOperand rootOperand)Creates a flattened list of this operand and its descendants in prefix order. | 
| private  void | flattenRecurse(List<RelOptRuleOperand> operandList,
               RelOptRuleOperand parentOperand)Adds the operand and its descendants to the list in prefix order. | 
|  RelOptRuleOperand | getOperand()Returns the root operand of this rule | 
|  List<RelOptRuleOperand> | getOperands()Returns a flattened list of operands of this rule. | 
|  CallingConvention | getOutConvention()Returns the calling convention of the result of firing this rule, null if not known. | 
|  RelTrait | getOutTrait()Returns the trait which will be modified as a result of firing this rule, or null if the rule is not a converter rule. | 
| (package private) static String | guessDescription(String className)Deduces a name for a rule by taking the name of its class and returning the segment after the last '.' or '$'. | 
|  int | hashCode() | 
|  boolean | matches(RelOptRuleCall call)Returns whether this rule could possibly match the given operands. | 
| static RelNode | mergeTraitsAndConvert(RelTraitSet baseTraits,
                      RelTrait newTrait,
                      RelNode rel)Creates a new RelTraitSet based on the given traits and converts the relational expression to that trait set. | 
| static RelNode | mergeTraitsAndConvert(RelTraitSet baseTraits,
                      RelTraitSet newTraits,
                      RelNode rel)Creates a new RelTraitSet based on the given traits and converts the relational expression to that trait set. | 
| abstract  void | onMatch(RelOptRuleCall call)Receives notification about a rule match. | 
|  String | toString() | 
| Methods inherited from class java.lang.Object | 
|---|
| clone, finalize, getClass, notify, notifyAll, wait, wait, wait | 
| Field Detail | 
|---|
public static final RelOptRuleOperand.Dummy ANY
RelOptRuleOperand.Dummy.ANY.
protected final String description
private final RelOptRuleOperand operand
public RelOptRuleOperand[] operands
| Constructor Detail | 
|---|
public RelOptRule(RelOptRuleOperand operand)
operand - root operand, must not be null
public RelOptRule(RelOptRuleOperand operand,
                  String description)
operand - root operand, must not be nulldescription - Description, or null to guess description| Method Detail | 
|---|
private RelOptRuleOperand[] flattenOperands(RelOptRuleOperand rootOperand)
rootOperand - Root operand
private void flattenRecurse(List<RelOptRuleOperand> operandList,
                            RelOptRuleOperand parentOperand)
operandList - Flattened list of operandsparentOperand - Parent of this operandprivate void assignSolveOrder()
public RelOptRuleOperand getOperand()
public List<RelOptRuleOperand> getOperands()
public int hashCode()
hashCode in class Objectpublic boolean equals(Object obj)
equals in class Objectprotected boolean equals(RelOptRule that)
The base implementation checks that the rules have the same class and that the operands are equal; derived classes can override.
public boolean matches(RelOptRuleCall call)
This method is an opportunity to apply side-conditions to a rule. The
 RelOptPlanner calls this method after matching all operands of
 the rule, and before calling onMatch(RelOptRuleCall).
 
In implementations of RelOptPlanner which may queue up a
 matched RelOptRuleCall for a long time before calling onMatch(RelOptRuleCall), this method is beneficial because it allows
 the planner to discard rules earlier in the process.
 
The default implementation of this method returns true.
 It is acceptable for any implementation of this method to give a false
 positives, that is, to say that the rule matches the operands but have
 onMatch(RelOptRuleCall) subsequently not generate any
 successors.
 
The following script is useful to identify rules which commonly produce no successors. You should override this method for these rules:
awk ' /Apply rule/ {rule=$4; ruleCount[rule]++;} /generated 0 successors/ {ruleMiss[rule]++;} END { printf "%-30s %s %s\n", "Rule", "Fire", "Miss"; for (i in ruleCount) { printf "%-30s %5d %5d\n", i, ruleCount[i], ruleMiss[i]; } } ' FarragoTrace.log
call - Rule call which has been determined to match all operands of
 this rule
public abstract void onMatch(RelOptRuleCall call)
call.rels holds the set of relational
 expressions which match the operands to the rule; 
 call.rels[0] is the root expression.
 Typically a rule would check that the nodes are valid matches, creates
 a new expression, then calls back RelOptRuleCall.transformTo(org.eigenbase.rel.RelNode) to
 register the expression.
call - Rule callmatches(RelOptRuleCall)public CallingConvention getOutConvention()
public RelTrait getOutTrait()
public String toString()
toString in class Object
public static RelNode convert(RelNode rel,
                              RelTraitSet toTraits)
rel - Relexp to converttoTraits - desired traits
public static RelNode mergeTraitsAndConvert(RelTraitSet baseTraits,
                                            RelTraitSet newTraits,
                                            RelNode rel)
baseTraits
 and merges newTraits with the cloned set, then converts rel
 to that set. Normally, during a rule call, baseTraits are the traits of
 the rel's parent and newTraits are the traits that the rule wishes to
 guarantee.
baseTraits - base traits for converted relnewTraits - altered traitsrel - the rel to convert
public static RelNode mergeTraitsAndConvert(RelTraitSet baseTraits,
                                            RelTrait newTrait,
                                            RelNode rel)
baseTraits
 and merges newTrait with the cloned set, then converts rel
 to that set. Normally, during a rule call, baseTraits are the traits of
 the rel's parent and newTrait is the trait that the rule wishes to
 guarantee.
baseTraits - base traits for converted relnewTrait - altered traitrel - the rel to convert
static String guessDescription(String className)
Examples:
className - Name of the rule's class
| 
 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||