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
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 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
ConstructorDescriptionJoinPrel
(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 TypeMethodDescription<T,
X, E extends Throwable>
Taccept
(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.iterator()
boolean
Methods inherited from class org.apache.drill.exec.planner.common.DrillJoinRelBase
computeCartesianJoinCost, computeHashJoinCost, computeHashJoinCostWithRowCntKeySize, computeLogicalJoinCost, computeSelfCost, estimateRowCount, getLeftKeys, getRightKeys, isUnique, uniqueFieldNames
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
-
-
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
-
iterator
-
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 interfacePrel
-
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, seeAggregateRemoveRule
- Parameters:
conditions
- populated list of join conditionsleftFields
- join fields from the left inputrightFields
- join fields from the right input
-
isSemiJoin
public boolean isSemiJoin()- Specified by:
isSemiJoin
in interfaceDrillJoin
- Overrides:
isSemiJoin
in classorg.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 interfaceorg.apache.calcite.rel.RelNode
- Overrides:
isValid
in classorg.apache.calcite.rel.core.Join
-
deriveRowType
public org.apache.calcite.rel.type.RelDataType deriveRowType()- Overrides:
deriveRowType
in classorg.apache.calcite.rel.core.Join
-