Class JoinPrel

java.lang.Object
org.apache.calcite.rel.AbstractRelNode
org.apache.calcite.rel.BiRel
org.apache.calcite.rel.core.Join
org.apache.drill.exec.planner.common.DrillJoinRelBase
org.apache.drill.exec.planner.physical.JoinPrel
All Implemented Interfaces:
Cloneable, Iterable<Prel>, org.apache.calcite.plan.RelOptNode, org.apache.calcite.rel.hint.Hintable, org.apache.calcite.rel.RelNode, DrillRelNode, DrillJoin, Prel
Direct Known Subclasses:
HashJoinPrel, MergeJoinPrel, NestedLoopJoinPrel, RowKeyJoinPrel

public abstract class JoinPrel extends DrillJoinRelBase implements Prel
Base class for MergeJoinPrel and HashJoinPrel
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.apache.calcite.rel.RelNode

    org.apache.calcite.rel.RelNode.Context
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final boolean
     
     

    Fields inherited from class org.apache.drill.exec.planner.common.DrillJoinRelBase

    filterNulls, leftKeys, rightKeys

    Fields inherited from class org.apache.calcite.rel.core.Join

    condition, hints, joinInfo, joinType, variablesSet

    Fields inherited from class org.apache.calcite.rel.BiRel

    left, right

    Fields inherited from class org.apache.calcite.rel.AbstractRelNode

    digest, id, rowType, traitSet

    Fields inherited from interface org.apache.drill.exec.planner.physical.Prel

    DRILL_PHYSICAL
  • Constructor Summary

    Constructors
    Constructor
    Description
    JoinPrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traits, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rex.RexNode condition, org.apache.calcite.rel.core.JoinRelType joinType)
     
    JoinPrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traits, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rex.RexNode condition, org.apache.calcite.rel.core.JoinRelType joinType, boolean isSemiJoin)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    <T, X, E extends Throwable>
    T
    accept(PrelVisitor<T,X,E> logicalVisitor, X value)
     
    protected void
    buildJoinConditions(List<JoinCondition> conditions, List<String> leftFields, List<String> rightFields, List<Integer> leftKeys, List<Integer> rightKeys)
    Build the list of join conditions for this join.
    org.apache.calcite.rel.type.RelDataType
     
    org.apache.calcite.rel.RelNode
    getJoinInput(int offset, org.apache.calcite.rel.RelNode input)
    Check to make sure that the fields of the inputs are the same as the output field names.
    boolean
     
    boolean
    isValid(org.apache.calcite.util.Litmus litmus, org.apache.calcite.rel.RelNode.Context context)
    A Drill physical rel which is semi join will have output row type with fields from only left side of the join.
     
    boolean
     

    Methods inherited from class org.apache.calcite.rel.core.Join

    accept, analyzeCondition, copy, copy, createJoinType, deepEquals0, deepHashCode0, deriveJoinRowType, estimateJoinedRows, explainTerms, getCondition, getHints, getJoinType, getSystemFieldList, getVariablesSet, isSemiJoinDone

    Methods inherited from class org.apache.calcite.rel.BiRel

    childrenAccept, getInputs, getLeft, getRight, replaceInput

    Methods inherited from class org.apache.calcite.rel.AbstractRelNode

    accept, collectVariablesSet, collectVariablesUsed, deepEquals, deepHashCode, equals, explain, getCluster, getConvention, getCorrelVariable, getDescription, getDigest, getExpectedInputRowType, getId, getInput, getRelDigest, getRelTypeName, getRowType, getTable, getTraitSet, hashCode, isEnforcer, metadata, onRegister, recomputeDigest, register, sole, toString

    Methods inherited from class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.drill.exec.planner.logical.DrillJoin

    getCondition, getJoinType, getLeft, getRight

    Methods inherited from interface org.apache.calcite.rel.hint.Hintable

    attachHints, withHints

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator

    Methods inherited from interface org.apache.drill.exec.planner.physical.Prel

    getEncoding, getPhysicalOperator, getSupportedEncodings, prepareForLateralUnnestPipeline

    Methods inherited from interface org.apache.calcite.rel.RelNode

    accept, accept, childrenAccept, collectVariablesSet, collectVariablesUsed, computeSelfCost, copy, deepEquals, deepHashCode, estimateRowCount, explain, explain, fieldIsNullable, getConvention, getCorrelVariable, getDigest, getExpectedInputRowType, getInput, getInputs, getRelDigest, getRelTypeName, getRowType, getTable, getVariablesSet, isEnforcer, metadata, onRegister, recomputeDigest, register, replaceInput

    Methods inherited from interface org.apache.calcite.plan.RelOptNode

    getCluster, getDescription, getId, getTraitSet
  • Field Details

    • isSemiJoin

      protected final boolean isSemiJoin
    • joincategory

      protected JoinUtils.JoinCategory joincategory
  • Constructor Details

    • JoinPrel

      public JoinPrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traits, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rex.RexNode condition, org.apache.calcite.rel.core.JoinRelType joinType)
    • JoinPrel

      public JoinPrel(org.apache.calcite.plan.RelOptCluster cluster, org.apache.calcite.plan.RelTraitSet traits, org.apache.calcite.rel.RelNode left, org.apache.calcite.rel.RelNode right, org.apache.calcite.rex.RexNode condition, org.apache.calcite.rel.core.JoinRelType joinType, boolean isSemiJoin)
  • Method Details

    • accept

      public <T, X, E extends Throwable> T accept(PrelVisitor<T,X,E> logicalVisitor, X value) throws E
      Specified by:
      accept in interface Prel
      Throws:
      E extends Throwable
    • iterator

      public Iterator<Prel> iterator()
      Specified by:
      iterator in interface Iterable<Prel>
    • getJoinInput

      public org.apache.calcite.rel.RelNode getJoinInput(int offset, org.apache.calcite.rel.RelNode input)
      Check to make sure that the fields of the inputs are the same as the output field names. If not, insert a project renaming them.
    • needsFinalColumnReordering

      public boolean needsFinalColumnReordering()
      Specified by:
      needsFinalColumnReordering in interface Prel
    • buildJoinConditions

      protected void buildJoinConditions(List<JoinCondition> conditions, List<String> leftFields, List<String> rightFields, List<Integer> leftKeys, List<Integer> rightKeys)
      Build the list of join conditions for this join. A join condition is built only for equality and IS NOT DISTINCT FROM comparisons. The difference is: null == null is FALSE whereas null IS NOT DISTINCT FROM null is TRUE For a use case of the IS NOT DISTINCT FROM comparison, see AggregateRemoveRule
      Parameters:
      conditions - populated list of join conditions
      leftFields - join fields from the left input
      rightFields - join fields from the right input
    • isSemiJoin

      public boolean isSemiJoin()
      Specified by:
      isSemiJoin in interface DrillJoin
      Overrides:
      isSemiJoin in class org.apache.calcite.rel.core.Join
    • isValid

      public boolean isValid(org.apache.calcite.util.Litmus litmus, org.apache.calcite.rel.RelNode.Context context)
      A Drill physical rel which is semi join will have output row type with fields from only left side of the join. Calcite's join rel expects to have the output row type from left and right side of the join. This function is overloaded to not throw exceptions for a Drill semi join physical rel.
      Specified by:
      isValid in interface org.apache.calcite.rel.RelNode
      Overrides:
      isValid in class org.apache.calcite.rel.core.Join
    • deriveRowType

      public org.apache.calcite.rel.type.RelDataType deriveRowType()
      Overrides:
      deriveRowType in class org.apache.calcite.rel.core.Join