Class UnionEliminatorRule
- All Implemented Interfaces:
SubstitutionRule,TransformationRule
UnionEliminatorRule checks to see if its possible to optimize a
Union call by eliminating the Union operator altogether in the case the call
consists of only one input.
Originally written for Union (hence the name),
but now also applies to Intersect and Minus.
- See Also:
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from class org.apache.calcite.plan.RelRule
RelRule.Done, RelRule.MatchHandler<R extends RelOptRule>, RelRule.OperandBuilder, RelRule.OperandDetailBuilder<R extends RelNode>, RelRule.OperandTransformNested classes/interfaces inherited from class org.apache.calcite.plan.RelOptRule
RelOptRule.ConverterRelOptRuleOperand -
Field Summary
Fields inherited from class org.apache.calcite.plan.RelOptRule
description, operands, relBuilderFactory -
Constructor Summary
ConstructorsModifierConstructorDescriptionUnionEliminatorRule(Class<? extends SetOp> setOpClass, String description, RelBuilderFactory relBuilderFactory) Deprecated.UnionEliminatorRule(Class<? extends Union> unionClass, RelBuilderFactory relBuilderFactory) Deprecated.protectedCreates a UnionEliminatorRule. -
Method Summary
Modifier and TypeMethodDescriptionbooleanWhether the planner should automatically prune old node when there is at least 1 equivalent rel generated by the rule.booleanmatches(RelOptRuleCall call) Returns whether this rule could possibly match the given operands.voidonMatch(RelOptRuleCall call) Receives notification about a rule match.Methods inherited from class org.apache.calcite.plan.RelOptRule
any, convert, convert, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
-
Constructor Details
-
UnionEliminatorRule
Creates a UnionEliminatorRule. -
UnionEliminatorRule
@Deprecated public UnionEliminatorRule(Class<? extends SetOp> setOpClass, String description, RelBuilderFactory relBuilderFactory) Deprecated. -
UnionEliminatorRule
@Deprecated public UnionEliminatorRule(Class<? extends Union> unionClass, RelBuilderFactory relBuilderFactory) Deprecated.
-
-
Method Details
-
matches
Description copied from class:RelOptRuleReturns whether this rule could possibly match the given operands.This method is an opportunity to apply side-conditions to a rule. The
RelOptPlannercalls this method after matching all operands of the rule, and before callingRelOptRule.onMatch(RelOptRuleCall).In implementations of
RelOptPlannerwhich may queue up a matchedRelOptRuleCallfor a long time before callingRelOptRule.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 haveRelOptRule.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- Overrides:
matchesin classRelOptRule- Parameters:
call- Rule call which has been determined to match all operands of this rule- Returns:
- whether this RelOptRule matches a given RelOptRuleCall
-
onMatch
Description copied from class:RelOptRuleReceives notification about a rule match. At the time that this method is called,call.relsholds 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.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>, org.apache.calcite.plan.RelHintsPropagator)to register the expression.- Specified by:
onMatchin classRelOptRule- Parameters:
call- Rule call- See Also:
-
autoPruneOld
public boolean autoPruneOld()Description copied from interface:SubstitutionRuleWhether the planner should automatically prune old node when there is at least 1 equivalent rel generated by the rule.Default is false, the user needs to prune the old node manually in the rule.
- Specified by:
autoPruneOldin interfaceSubstitutionRule
-