|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eigenbase.relopt.RelOptRule org.eigenbase.rel.rules.NestedLoopsJoinRule
public class NestedLoopsJoinRule
Rule which converts a JoinRel
into a CorrelatorRel
, which can
then be implemented using nested loops.
For example,
select * from emp join dept on emp.deptno =
dept.deptno
becomes a CorrelatorRel which restarts TableAccessRel("DEPT") for each row
read from TableAccessRel("EMP").
This rule is not applicable if for certain types of outer join. For example,
select * from emp right join dept on emp.deptno =
dept.deptno
would require emitting a NULL emp row if a certain department contained no
employees, and CorrelatorRel cannot do that.
Field Summary | |
---|---|
static NestedLoopsJoinRule |
instance
|
Fields inherited from class org.eigenbase.relopt.RelOptRule |
---|
ANY, description, operands |
Constructor Summary | |
---|---|
private |
NestedLoopsJoinRule()
Private constructor; use singleton instance . |
Method Summary | |
---|---|
boolean |
matches(RelOptRuleCall call)
Returns whether this rule could possibly match the given operands. |
void |
onMatch(RelOptRuleCall call)
Receives notification about a rule match. |
Methods inherited from class org.eigenbase.relopt.RelOptRule |
---|
convert, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, mergeTraitsAndConvert, mergeTraitsAndConvert, toString |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final NestedLoopsJoinRule instance
Constructor Detail |
---|
private NestedLoopsJoinRule()
instance
.
Method Detail |
---|
public boolean matches(RelOptRuleCall call)
RelOptRule
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 RelOptRule.onMatch(RelOptRuleCall)
.
In implementations of RelOptPlanner
which may queue up a
matched RelOptRuleCall
for a long time before calling RelOptRule.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
RelOptRule.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
matches
in class RelOptRule
call
- Rule call which has been determined to match all operands of
this rule
public void onMatch(RelOptRuleCall call)
RelOptRule
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.
onMatch
in class RelOptRule
call
- Rule callRelOptRule.matches(RelOptRuleCall)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |