Class AbstractConverter

All Implemented Interfaces:
Cloneable, RelOptNode, Converter, RelNode

@Enclosing public class AbstractConverter extends ConverterImpl
Converts a relational expression to any given output convention.

Unlike most Converters, an abstract converter is always abstract. You would typically create an AbstractConverter when it is necessary to transform a relational expression immediately; later, rules will transform it into relational expressions which can be implemented.

If an abstract converter cannot be satisfied immediately (because the source subset is abstract), the set is flagged, so this converter will be expanded as soon as a non-abstract relexp is added to the set.

  • Constructor Details

  • Method Details

    • copy

      public RelNode copy(RelTraitSet traitSet, List<RelNode> inputs)
      Description copied from interface: RelNode
      Creates a copy of this relational expression, perhaps changing traits and inputs.

      Sub-classes with other important attributes are encouraged to create variants of this method with more parameters.

      Specified by:
      copy in interface RelNode
      copy in class AbstractRelNode
      traitSet - Trait set
      inputs - Inputs
      Copy of this relational expression, substituting traits and inputs
    • computeSelfCost

      public @Nullable RelOptCost computeSelfCost(RelOptPlanner planner, RelMetadataQuery mq)
      Description copied from interface: RelNode
      Returns the cost of this plan (not including children). The base implementation throws an error; derived classes should override.

      NOTE jvs 29-Mar-2006: Don't call this method directly. Instead, use RelMetadataQuery.getNonCumulativeCost(org.apache.calcite.rel.RelNode), which gives plugins a chance to override the rel's default ideas about cost.

      Specified by:
      computeSelfCost in interface RelNode
      computeSelfCost in class ConverterImpl
      planner - Planner for cost calculation
      mq - Metadata query
      Cost of this plan (not including children)
    • explainTerms

      public RelWriter explainTerms(RelWriter pw)
      Description copied from class: AbstractRelNode
      Describes the inputs and attributes of this relational expression. Each node should call super.explainTerms, then call the RelWriter.input(String, RelNode) and RelWriter.item(String, Object) methods for each input and attribute.
      explainTerms in class SingleRel
      pw - Plan writer
      Plan writer for fluent-explain pattern
    • isEnforcer

      public boolean isEnforcer()
      Description copied from interface: RelNode
      Indicates whether it is an enforcer operator, e.g. PhysicalSort, PhysicalHashDistribute, etc. As an enforcer, the operator must be created only when required traitSet is not satisfied by its input.
      Specified by:
      isEnforcer in interface RelNode
      isEnforcer in class AbstractRelNode
      Whether it is an enforcer operator