|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eigenbase.relopt.RelOptRule
public abstract class RelOptRule
A RelOptRule
transforms an expression into another. It has a
list of RelOptRuleOperand
s, 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 |
ANY
Shorthand for RelOptRuleOperand.Dummy.ANY . |
protected String |
description
Description of rule, must be unique within planner. |
private RelOptRuleOperand |
operand
Root of operand tree. |
RelOptRuleOperand[] |
operands
Flattened 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 nullpublic RelOptRule(RelOptRuleOperand operand, String description)
operand
- root operand, must not be nulldescription
- Description, or null to guess descriptionMethod 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 Object
public boolean equals(Object obj)
equals
in class Object
protected 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 |