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
FieldsFields inherited from class org.apache.drill.exec.planner.common.DrillJoinRelBase
filterNulls, leftKeys, rightKeysFields inherited from class org.apache.calcite.rel.core.Join
condition, hints, joinInfo, joinType, variablesSetFields inherited from class org.apache.calcite.rel.BiRel
left, rightFields inherited from class org.apache.calcite.rel.AbstractRelNode
digest, id, rowType, traitSetFields inherited from interface org.apache.drill.exec.planner.physical.Prel
DRILL_PHYSICAL -
Constructor Summary
ConstructorsConstructorDescriptionJoinPrel(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 voidbuildJoinConditions(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.RelDataTypeorg.apache.calcite.rel.RelNodegetJoinInput(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.booleanbooleanisValid(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()booleanMethods inherited from class org.apache.drill.exec.planner.common.DrillJoinRelBase
computeCartesianJoinCost, computeHashJoinCost, computeHashJoinCostWithRowCntKeySize, computeLogicalJoinCost, computeSelfCost, estimateRowCount, getLeftKeys, getRightKeys, isUnique, uniqueFieldNamesMethods inherited from class org.apache.calcite.rel.core.Join
accept, analyzeCondition, copy, copy, createJoinType, deepEquals0, deepHashCode0, deriveJoinRowType, estimateJoinedRows, explainTerms, getCondition, getHints, getJoinType, getSystemFieldList, getVariablesSet, isSemiJoinDoneMethods inherited from class org.apache.calcite.rel.BiRel
childrenAccept, getInputs, getLeft, getRight, replaceInputMethods 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, toStringMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.drill.exec.planner.logical.DrillJoin
getCondition, getJoinType, getLeft, getRightMethods inherited from interface org.apache.calcite.rel.hint.Hintable
attachHints, withHintsMethods inherited from interface java.lang.Iterable
forEach, spliteratorMethods inherited from interface org.apache.drill.exec.planner.physical.Prel
getEncoding, getPhysicalOperator, getSupportedEncodings, prepareForLateralUnnestPipelineMethods 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, replaceInputMethods 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:
needsFinalColumnReorderingin 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:
isSemiJoinin interfaceDrillJoin- Overrides:
isSemiJoinin 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:
isValidin interfaceorg.apache.calcite.rel.RelNode- Overrides:
isValidin classorg.apache.calcite.rel.core.Join
-
deriveRowType
public org.apache.calcite.rel.type.RelDataType deriveRowType()- Overrides:
deriveRowTypein classorg.apache.calcite.rel.core.Join
-