Example #1
0
        private static string LogicalOperatorToString(JoinAlgebraNode.JoinOperator op)
        {
            switch (op)
            {
            case JoinAlgebraNode.JoinOperator.InnerJoin:
                return(Resources.ShowPlanLogicalOperatorInnerJoin);

            case JoinAlgebraNode.JoinOperator.LeftOuterJoin:
                return(Resources.ShowPlanLogicalOperatorLeftOuterJoin);

            case JoinAlgebraNode.JoinOperator.LeftSemiJoin:
                return(Resources.ShowPlanLogicalOperatorLeftSemiJoin);

            case JoinAlgebraNode.JoinOperator.LeftAntiSemiJoin:
                return(Resources.ShowPlanLogicalOperatorLeftAntiSemiJoin);

            case JoinAlgebraNode.JoinOperator.RightOuterJoin:
                return(Resources.ShowPlanLogicalOperatorRightOuterJoin);

            case JoinAlgebraNode.JoinOperator.RightSemiJoin:
                return(Resources.ShowPlanLogicalOperatorRightSemiJoin);

            case JoinAlgebraNode.JoinOperator.RightAntiSemiJoin:
                return(Resources.ShowPlanLogicalOperatorRightAntiSemiJoin);

            case JoinAlgebraNode.JoinOperator.FullOuterJoin:
                return(Resources.ShowPlanLogicalOperatorFullOuterJoin);

            default:
                throw ExceptionBuilder.UnhandledCaseLabel(op);
            }
        }
Example #2
0
 public static bool AllowsRightPushDown(JoinAlgebraNode.JoinOperator joinOperator)
 {
     return(joinOperator == JoinAlgebraNode.JoinOperator.InnerJoin ||
            joinOperator == JoinAlgebraNode.JoinOperator.LeftOuterJoin ||
            joinOperator == JoinAlgebraNode.JoinOperator.LeftSemiJoin ||
            joinOperator == JoinAlgebraNode.JoinOperator.RightSemiJoin ||
            joinOperator == JoinAlgebraNode.JoinOperator.LeftAntiSemiJoin ||
            joinOperator == JoinAlgebraNode.JoinOperator.RightAntiSemiJoin);
 }
Example #3
0
        private static bool SemiJoinDoesNotDependOn(JoinAlgebraNode.JoinOperator op, ExpressionNode part, RowBufferEntry[] leftDefinedValues, RowBufferEntry[] rightDefinedValues)
        {
            if (op == JoinAlgebraNode.JoinOperator.LeftSemiJoin ||
                op == JoinAlgebraNode.JoinOperator.LeftAntiSemiJoin)
            {
                return(AstUtil.ExpressionDoesNotReference(part, rightDefinedValues));
            }

            if (op == JoinAlgebraNode.JoinOperator.RightSemiJoin ||
                op == JoinAlgebraNode.JoinOperator.RightAntiSemiJoin)
            {
                return(AstUtil.ExpressionDoesNotReference(part, leftDefinedValues));
            }

            return(true);
        }