Class SubstitutionVisitor.UnifyRule

java.lang.Object
org.apache.calcite.plan.SubstitutionVisitor.UnifyRule
Direct Known Subclasses:
SubstitutionVisitor.AbstractUnifyRule
Enclosing class:
SubstitutionVisitor

public abstract static class SubstitutionVisitor.UnifyRule extends Object
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 Details

  • Constructor Details

  • 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 convert query into target. 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 matches target; returns target
      • query is sufficiently close to a match for target; returns target
      • query cannot be made to match target; 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)