org.eigenbase.rel.rules
Class PushSemiJoinPastJoinRule
java.lang.Object
org.eigenbase.relopt.RelOptRule
org.eigenbase.rel.rules.PushSemiJoinPastJoinRule
public class PushSemiJoinPastJoinRule
- extends RelOptRule
PushSemiJoinPastJoinRule implements the rule for pushing semijoins down in a
tree past a join in order to trigger other rules that will convert semijoins.
SemiJoinRel(JoinRel(X, Y), Z) --> JoinRel(SemiJoinRel(X, Z), Y) or
SemiJoinRel(JoinRel(X, Y), Z) --> JoinRel(X, SemiJoinRel(Y, Z)) Whether this
first or second conversion is applied depends on which operands actually
participate in the semijoin.
- Version:
- $Id: //open/dev/farrago/src/org/eigenbase/rel/rules/PushSemiJoinPastJoinRule.java#15 $
- Author:
- Zelaine Fong
Method Summary |
void |
onMatch(RelOptRuleCall call)
Receives notification about a rule match. |
private void |
setJoinAdjustments(int[] adjustments,
int nFieldsX,
int nFieldsY,
int nFieldsZ,
int adjustY,
int adjustZ)
Sets an array to reflect how much each index corresponding to a field
needs to be adjusted. |
Methods inherited from class org.eigenbase.relopt.RelOptRule |
convert, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, mergeTraitsAndConvert, mergeTraitsAndConvert, toString |
instance
public static final PushSemiJoinPastJoinRule instance
PushSemiJoinPastJoinRule
private PushSemiJoinPastJoinRule()
- Creates a PushSemiJoinPastJoinRule.
onMatch
public void onMatch(RelOptRuleCall call)
- Description copied from class:
RelOptRule
- Receives notification about a rule match. At the time that this method is
called,
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.
- Specified by:
onMatch
in class RelOptRule
- Parameters:
call
- Rule call- See Also:
RelOptRule.matches(RelOptRuleCall)
setJoinAdjustments
private void setJoinAdjustments(int[] adjustments,
int nFieldsX,
int nFieldsY,
int nFieldsZ,
int adjustY,
int adjustZ)
- Sets an array to reflect how much each index corresponding to a field
needs to be adjusted. The array corresponds to fields in a 3-way join
between (X, Y, and Z). X remains unchanged, but Y and Z need to be
adjusted by some fixed amount as determined by the input.
- Parameters:
adjustments
- array to be filled outnFieldsX
- number of fields in XnFieldsY
- number of fields in YnFieldsZ
- number of fields in ZadjustY
- the amount to adjust Y byadjustZ
- the amount to adjust Z by