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
Modifier and TypeFieldDescriptionprotected final SubstitutionVisitor.Operand
protected final int
protected final SubstitutionVisitor.Operand
-
Constructor Summary
ModifierConstructorDescriptionprotected
UnifyRule
(int slotCount, SubstitutionVisitor.Operand queryOperand, SubstitutionVisitor.Operand targetOperand) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract @Nullable SubstitutionVisitor.UnifyResult
Applies 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.UnifyRuleCall
match
(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 convertquery
intotarget
. Before the rule is invoked, Calcite has made sure that query's children are equivalent to target's children.There are 3 possible outcomes:
query
already exactly matchestarget
; returnstarget
query
is sufficiently close to a match fortarget
; returnstarget
query
cannot 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)
-