Package org.apache.calcite.plan
Class SubstitutionVisitor.UnifyRule
java.lang.Object
org.apache.calcite.plan.SubstitutionVisitor.UnifyRule
- Direct Known Subclasses:
SubstitutionVisitor.AbstractUnifyRule
- Enclosing class:
SubstitutionVisitor
Rule that attempts to match a query relational expression
against a target relational expression.
The rule declares the query and target types; this allows the engine to fire only a few rules in a given context.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final SubstitutionVisitor.Operandprotected final intprotected final SubstitutionVisitor.Operand -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedUnifyRule(int slotCount, SubstitutionVisitor.Operand queryOperand, SubstitutionVisitor.Operand targetOperand) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract @Nullable SubstitutionVisitor.UnifyResultApplies this rule to a particular node in a query.protected <E> com.google.common.collect.ImmutableList<E>copy(E[] slots, int slotCount) protected @Nullable SubstitutionVisitor.UnifyRuleCallmatch(SubstitutionVisitor visitor, MutableRel query, MutableRel target)
-
Field Details
-
slotCount
protected final int slotCount -
queryOperand
-
targetOperand
-
-
Constructor Details
-
UnifyRule
protected UnifyRule(int slotCount, SubstitutionVisitor.Operand queryOperand, SubstitutionVisitor.Operand targetOperand)
-
-
Method Details
-
apply
protected abstract @Nullable SubstitutionVisitor.UnifyResult apply(SubstitutionVisitor.UnifyRuleCall call) Applies this rule to a particular node in a query. The goal is to convertqueryintotarget. Before the rule is invoked, Calcite has made sure that query's children are equivalent to target's children.There are 3 possible outcomes:
queryalready exactly matchestarget; returnstargetqueryis sufficiently close to a match fortarget; returnstargetquerycannot be made to matchtarget; returns null
REVIEW: Is possible that we match query PLUS one or more of its ancestors?
- Parameters:
call- Input parameters
-
match
protected @Nullable SubstitutionVisitor.UnifyRuleCall match(SubstitutionVisitor visitor, MutableRel query, MutableRel target) -
copy
protected <E> com.google.common.collect.ImmutableList<E> copy(E[] slots, int slotCount)
-