private static bool AllowsRightPushDown(BoundJoinType type) { return(type == BoundJoinType.Inner || type == BoundJoinType.LeftOuter || type == BoundJoinType.LeftSemi || type == BoundJoinType.LeftAntiSemi); }
public BoundJoinRelation(BoundJoinType joinType, BoundRelation left, BoundRelation right, BoundExpression condition, ValueSlot probe, BoundExpression passthruPredicate) { Left = left; Right = right; JoinType = joinType; Condition = condition; Probe = probe; PassthruPredicate = passthruPredicate; }
public BoundJoinRelation Update(BoundJoinType joinType, BoundRelation left, BoundRelation right, BoundExpression condition, ValueSlot probe, BoundExpression passthruPredicate) { if (joinType == JoinType && left == Left && right == Right && condition == Condition && probe == Probe && passthruPredicate == PassthruPredicate) { return(this); } return(new BoundJoinRelation(joinType, left, right, condition, probe, passthruPredicate)); }
private static bool SemiJoinDoesNotDependOn(BoundJoinType joinType, BoundExpression conjunction, HashSet <ValueSlot> rightDefinedValues) { if (joinType == BoundJoinType.LeftSemi || joinType == BoundJoinType.LeftAntiSemi) { return(!Expression.DependsOnAny(conjunction, rightDefinedValues)); } return(true); }
private static BoundHashMatchOperator?GetLogicalOperator(BoundJoinType joinType) { switch (joinType) { case BoundJoinType.Inner: return(BoundHashMatchOperator.Inner); case BoundJoinType.FullOuter: return(BoundHashMatchOperator.FullOuter); case BoundJoinType.LeftOuter: return(BoundHashMatchOperator.LeftOuter); case BoundJoinType.RightOuter: return(BoundHashMatchOperator.RightOuter); default: return(null); } }
public BoundJoinRelation WithJoinType(BoundJoinType joinType) { return(Update(joinType, Left, Right, Condition, Probe, PassthruPredicate)); }
private static bool AllowsMerge(BoundJoinType type) { return(type == BoundJoinType.Inner); }