Пример #1
0
 private static bool AllowsRightPushDown(BoundJoinType type)
 {
     return(type == BoundJoinType.Inner ||
            type == BoundJoinType.LeftOuter ||
            type == BoundJoinType.LeftSemi ||
            type == BoundJoinType.LeftAntiSemi);
 }
Пример #2
0
 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;
 }
Пример #3
0
        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));
        }
Пример #4
0
        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);
            }
        }
Пример #6
0
 public BoundJoinRelation WithJoinType(BoundJoinType joinType)
 {
     return(Update(joinType, Left, Right, Condition, Probe, PassthruPredicate));
 }
Пример #7
0
 private static bool AllowsMerge(BoundJoinType type)
 {
     return(type == BoundJoinType.Inner);
 }