示例#1
0
        internal static string ToDisplayName(this BinaryOperatorKind operatorKind)
        {
            switch (operatorKind)
            {
            case BinaryOperatorKind.Power:
                return(SyntaxKind.AsteriskAsteriskToken.GetText());

            case BinaryOperatorKind.Multiply:
                return(SyntaxKind.AsteriskToken.GetText());

            case BinaryOperatorKind.Divide:
                return(SyntaxKind.SlashToken.GetText());

            case BinaryOperatorKind.Modulus:
                return(SyntaxKind.PercentToken.GetText());

            case BinaryOperatorKind.Add:
                return(SyntaxKind.PlusToken.GetText());

            case BinaryOperatorKind.Sub:
                return(SyntaxKind.MinusToken.GetText());

            case BinaryOperatorKind.Equal:
                return(SyntaxKind.EqualsToken.GetText());

            case BinaryOperatorKind.NotEqual:
                return(SyntaxKind.ExclamationEqualsToken.GetText());

            case BinaryOperatorKind.Less:
                return(SyntaxKind.LessToken.GetText());

            case BinaryOperatorKind.LessOrEqual:
                return(SyntaxKind.LessEqualToken.GetText());

            case BinaryOperatorKind.Greater:
                return(SyntaxKind.GreaterToken.GetText());

            case BinaryOperatorKind.GreaterOrEqual:
                return(SyntaxKind.GreaterEqualToken.GetText());

            case BinaryOperatorKind.BitXor:
                return(SyntaxKind.CaretToken.GetText());

            case BinaryOperatorKind.BitAnd:
                return(SyntaxKind.AmpersandToken.GetText());

            case BinaryOperatorKind.BitOr:
                return(SyntaxKind.BarToken.GetText());

            case BinaryOperatorKind.LeftShift:
                return(SyntaxKind.LessLessToken.GetText());

            case BinaryOperatorKind.RightShift:
                return(SyntaxKind.GreaterGreaterToken.GetText());

            case BinaryOperatorKind.Like:
                return(SyntaxKind.LikeKeyword.GetText());

            case BinaryOperatorKind.SimilarTo:
                return(SyntaxKind.SimilarKeyword.GetText() + @" " + SyntaxKind.ToKeyword.GetText());

            case BinaryOperatorKind.SoundsLike:
                return(SyntaxKind.SoundsKeyword.GetText() + @" " + SyntaxKind.LikeKeyword.GetText());

            case BinaryOperatorKind.LogicalAnd:
                return(SyntaxKind.AndKeyword.GetText());

            case BinaryOperatorKind.LogicalOr:
                return(SyntaxKind.OrKeyword.GetText());

            default:
                throw ExceptionBuilder.UnexpectedValue(operatorKind);
            }
        }
示例#2
0
        internal static BinaryOperatorKind ToBinaryOperatorKind(this SyntaxKind expressionKind)
        {
            switch (expressionKind)
            {
            case SyntaxKind.BitwiseAndExpression:
                return(BinaryOperatorKind.BitAnd);

            case SyntaxKind.BitwiseOrExpression:
                return(BinaryOperatorKind.BitOr);

            case SyntaxKind.ExclusiveOrExpression:
                return(BinaryOperatorKind.BitXor);

            case SyntaxKind.AddExpression:
                return(BinaryOperatorKind.Add);

            case SyntaxKind.SubExpression:
                return(BinaryOperatorKind.Sub);

            case SyntaxKind.MultiplyExpression:
                return(BinaryOperatorKind.Multiply);

            case SyntaxKind.DivideExpression:
                return(BinaryOperatorKind.Divide);

            case SyntaxKind.ModuloExpression:
                return(BinaryOperatorKind.Modulus);

            case SyntaxKind.PowerExpression:
                return(BinaryOperatorKind.Power);

            case SyntaxKind.EqualExpression:
                return(BinaryOperatorKind.Equal);

            case SyntaxKind.NotEqualExpression:
                return(BinaryOperatorKind.NotEqual);

            case SyntaxKind.LessExpression:
                return(BinaryOperatorKind.Less);

            case SyntaxKind.NotGreaterExpression:
            case SyntaxKind.LessOrEqualExpression:
                return(BinaryOperatorKind.LessOrEqual);

            case SyntaxKind.GreaterExpression:
                return(BinaryOperatorKind.Greater);

            case SyntaxKind.NotLessExpression:
            case SyntaxKind.GreaterOrEqualExpression:
                return(BinaryOperatorKind.GreaterOrEqual);

            case SyntaxKind.LeftShiftExpression:
                return(BinaryOperatorKind.LeftShift);

            case SyntaxKind.RightShiftExpression:
                return(BinaryOperatorKind.RightShift);

            case SyntaxKind.LogicalAndExpression:
                return(BinaryOperatorKind.LogicalAnd);

            case SyntaxKind.LogicalOrExpression:
                return(BinaryOperatorKind.LogicalOr);

            case SyntaxKind.LikeExpression:
                return(BinaryOperatorKind.Like);

            case SyntaxKind.SoundsLikeExpression:
                return(BinaryOperatorKind.SoundsLike);

            case SyntaxKind.SimilarToExpression:
                return(BinaryOperatorKind.SimilarTo);

            default:
                throw ExceptionBuilder.UnexpectedValue(expressionKind);
            }
        }
        public static string GetMessage(this DiagnosticId diagnosticId)
        {
            switch (diagnosticId)
            {
            case DiagnosticId.IllegalInputCharacter:
                return(Resources.IllegalInputCharacter);

            case DiagnosticId.UnterminatedComment:
                return(Resources.UnterminatedComment);

            case DiagnosticId.UnterminatedString:
                return(Resources.UnterminatedString);

            case DiagnosticId.UnterminatedQuotedIdentifier:
                return(Resources.UnterminatedQuotedIdentifier);

            case DiagnosticId.UnterminatedParenthesizedIdentifier:
                return(Resources.UnterminatedParenthesizedIdentifier);

            case DiagnosticId.UnterminatedDate:
                return(Resources.UnterminatedDate);

            case DiagnosticId.InvalidDate:
                return(Resources.InvalidDate);

            case DiagnosticId.InvalidInteger:
                return(Resources.InvalidInteger);

            case DiagnosticId.InvalidReal:
                return(Resources.InvalidReal);

            case DiagnosticId.InvalidBinary:
                return(Resources.InvalidBinary);

            case DiagnosticId.InvalidOctal:
                return(Resources.InvalidOctal);

            case DiagnosticId.InvalidHex:
                return(Resources.InvalidHex);

            case DiagnosticId.NumberTooLarge:
                return(Resources.NumberTooLarge);

            case DiagnosticId.TokenExpected:
                return(Resources.TokenExpected);

            case DiagnosticId.InvalidOperatorForAllAny:
                return(Resources.InvalidOperatorForAllAny);

            case DiagnosticId.UndeclaredTable:
                return(Resources.UndeclaredTable);

            case DiagnosticId.UndeclaredTableInstance:
                return(Resources.UndeclaredTableInstance);

            case DiagnosticId.UndeclaredVariable:
                return(Resources.UndeclaredVariable);

            case DiagnosticId.UndeclaredFunction:
                return(Resources.UndeclaredFunction);

            case DiagnosticId.UndeclaredAggregate:
                return(Resources.UndeclaredAggregate);

            case DiagnosticId.UndeclaredMethod:
                return(Resources.UndeclaredMethod);

            case DiagnosticId.UndeclaredColumn:
                return(Resources.UndeclaredColumn);

            case DiagnosticId.UndeclaredProperty:
                return(Resources.UndeclaredProperty);

            case DiagnosticId.UndeclaredType:
                return(Resources.UndeclaredType);

            case DiagnosticId.ColumnTableOrVariableNotDeclared:
                return(Resources.ColumnTableOrVariableNotDeclared);

            case DiagnosticId.AmbiguousReference:
                return(Resources.AmbiguousReference);

            case DiagnosticId.AmbiguousColumnRef:
                return(Resources.AmbiguousColumnRef);

            case DiagnosticId.AmbiguousTable:
                return(Resources.AmbiguousTable);

            case DiagnosticId.AmbiguousVariable:
                return(Resources.AmbiguousVariable);

            case DiagnosticId.AmbiguousAggregate:
                return(Resources.AmbiguousAggregate);

            case DiagnosticId.AmbiguousProperty:
                return(Resources.AmbiguousProperty);

            case DiagnosticId.AmbiguousInvocation:
                return(Resources.AmbiguousInvocation);

            case DiagnosticId.InvocationRequiresParenthesis:
                return(Resources.InvocationRequiresParenthesis);

            case DiagnosticId.CannotApplyUnaryOperator:
                return(Resources.CannotApplyUnaryOperator);

            case DiagnosticId.AmbiguousUnaryOperator:
                return(Resources.AmbiguousUnaryOperator);

            case DiagnosticId.CannotApplyBinaryOperator:
                return(Resources.CannotApplyBinaryOperator);

            case DiagnosticId.AmbiguousBinaryOperator:
                return(Resources.AmbiguousBinaryOperator);

            case DiagnosticId.AmbiguousConversion:
                return(Resources.AmbiguousConversion);

            case DiagnosticId.WhenMustEvaluateToBool:
                return(Resources.WhenMustEvaluateToBool);

            case DiagnosticId.CannotConvert:
                return(Resources.CannotConvert);

            case DiagnosticId.MustSpecifyTableToSelectFrom:
                return(Resources.MustSpecifyTableToSelectFrom);

            case DiagnosticId.AggregateCannotContainAggregate:
                return(Resources.AggregateCannotContainAggregate);

            case DiagnosticId.AggregateCannotContainSubquery:
                return(Resources.AggregateCannotContainSubquery);

            case DiagnosticId.GroupByCannotContainSubquery:
                return(Resources.GroupByCannotContainSubquery);

            case DiagnosticId.AggregateDoesNotSupportType:
                return(Resources.AggregateDoesNotSupportType);

            case DiagnosticId.AggregateInWhere:
                return(Resources.AggregateInWhere);

            case DiagnosticId.AggregateInOn:
                return(Resources.AggregateInOn);

            case DiagnosticId.AggregateInGroupBy:
                return(Resources.AggregateInGroupBy);

            case DiagnosticId.AggregateContainsColumnsFromDifferentQueries:
                return(Resources.AggregateContainsColumnsFromDifferentQueries);

            case DiagnosticId.AggregateInvalidInCurrentContext:
                return(Resources.AggregateInvalidInCurrentContext);

            case DiagnosticId.DuplicateTableRefInFrom:
                return(Resources.DuplicateTableRefInFrom);

            case DiagnosticId.TopWithTiesRequiresOrderBy:
                return(Resources.TopWithTiesRequiresOrderBy);

            case DiagnosticId.OrderByColumnPositionIsOutOfRange:
                return(Resources.OrderByColumnPositionIsOutOfRange);

            case DiagnosticId.WhereClauseMustEvaluateToBool:
                return(Resources.WhereClauseMustEvaluateToBool);

            case DiagnosticId.OnClauseMustEvaluateToBool:
                return(Resources.OnClauseMustEvaluateToBool);

            case DiagnosticId.HavingClauseMustEvaluateToBool:
                return(Resources.HavingClauseMustEvaluateToBool);

            case DiagnosticId.SelectExpressionNotAggregatedAndNoGroupBy:
                return(Resources.SelectExpressionNotAggregatedAndNoGroupBy);

            case DiagnosticId.SelectExpressionNotAggregatedOrGrouped:
                return(Resources.SelectExpressionNotAggregatedOrGrouped);

            case DiagnosticId.HavingExpressionNotAggregatedOrGrouped:
                return(Resources.HavingExpressionNotAggregatedOrGrouped);

            case DiagnosticId.OrderByExpressionNotAggregatedAndNoGroupBy:
                return(Resources.OrderByExpressionNotAggregatedAndNoGroupBy);

            case DiagnosticId.OrderByExpressionNotAggregatedOrGrouped:
                return(Resources.OrderByExpressionNotAggregatedOrGrouped);

            case DiagnosticId.OrderByInvalidInSubqueryUnlessTopIsAlsoSpecified:
                return(Resources.OrderByInvalidInSubqueryUnlessTopIsAlsoSpecified);

            case DiagnosticId.InvalidDataTypeInSelectDistinct:
                return(Resources.InvalidDataTypeInSelectDistinct);

            case DiagnosticId.InvalidDataTypeInGroupBy:
                return(Resources.InvalidDataTypeInGroupBy);

            case DiagnosticId.InvalidDataTypeInOrderBy:
                return(Resources.InvalidDataTypeInOrderBy);

            case DiagnosticId.InvalidDataTypeInUnion:
                return(Resources.InvalidDataTypeInUnion);

            case DiagnosticId.InvalidDataTypeInExcept:
                return(Resources.InvalidDataTypeInExcept);

            case DiagnosticId.InvalidDataTypeInIntersect:
                return(Resources.InvalidDataTypeInIntersect);

            case DiagnosticId.DifferentExpressionCountInBinaryQuery:
                return(Resources.DifferentExpressionCountInBinaryQuery);

            case DiagnosticId.OrderByItemsMustBeInSelectListIfUnionSpecified:
                return(Resources.OrderByItemsMustBeInSelectListIfUnionSpecified);

            case DiagnosticId.OrderByItemsMustBeInSelectListIfDistinctSpecified:
                return(Resources.OrderByItemsMustBeInSelectListIfDistinctSpecified);

            case DiagnosticId.GroupByItemDoesNotReferenceAnyColumns:
                return(Resources.GroupByItemDoesNotReferenceAnyColumns);

            case DiagnosticId.ConstantExpressionInOrderBy:
                return(Resources.ConstantExpressionInOrderBy);

            case DiagnosticId.TooManyExpressionsInSelectListOfSubquery:
                return(Resources.TooManyExpressionsInSelectListOfSubquery);

            case DiagnosticId.InvalidRowReference:
                return(Resources.InvalidRowReference);

            case DiagnosticId.NoColumnAliasSpecified:
                return(Resources.NoColumnAliasSpecified);

            case DiagnosticId.CteHasMoreColumnsThanSpecified:
                return(Resources.CteHasMoreColumnsThanSpecified);

            case DiagnosticId.CteHasFewerColumnsThanSpecified:
                return(Resources.CteHasFewerColumnsThanSpecified);

            case DiagnosticId.CteHasDuplicateColumnName:
                return(Resources.CteHasDuplicateColumnName);

            case DiagnosticId.CteHasDuplicateTableName:
                return(Resources.CteHasDuplicateTableName);

            case DiagnosticId.CteDoesNotHaveUnionAll:
                return(Resources.CteDoesNotHaveUnionAll);

            case DiagnosticId.CteDoesNotHaveAnchorMember:
                return(Resources.CteDoesNotHaveAnchorMember);

            case DiagnosticId.CteContainsRecursiveReferenceInSubquery:
                return(Resources.CteContainsRecursiveReferenceInSubquery);

            case DiagnosticId.CteContainsUnexpectedAnchorMember:
                return(Resources.CteContainsUnexpectedAnchorMember);

            case DiagnosticId.CteContainsMultipleRecursiveReferences:
                return(Resources.CteContainsMultipleRecursiveReferences);

            case DiagnosticId.CteContainsUnion:
                return(Resources.CteContainsUnion);

            case DiagnosticId.CteContainsDistinct:
                return(Resources.CteContainsDistinct);

            case DiagnosticId.CteContainsTop:
                return(Resources.CteContainsTop);

            case DiagnosticId.CteContainsOuterJoin:
                return(Resources.CteContainsOuterJoin);

            case DiagnosticId.CteContainsGroupByHavingOrAggregate:
                return(Resources.CteContainsGroupByHavingOrAggregate);

            case DiagnosticId.CteHasTypeMismatchBetweenAnchorAndRecursivePart:
                return(Resources.CteHasTypeMismatchBetweenAnchorAndRecursivePart);

            default:
                throw ExceptionBuilder.UnexpectedValue(diagnosticId);
            }
        }
示例#4
0
        protected void Dispatch(SyntaxNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            switch (node.Kind)
            {
            case SyntaxKind.CompilationUnit:
                VisitCompilationUnit((CompilationUnitSyntax)node);
                break;

            case SyntaxKind.SkippedTokensTrivia:
                VisitSkippedTokensTrivia((SkippedTokensTriviaSyntax)node);
                break;

            case SyntaxKind.ComplementExpression:
            case SyntaxKind.IdentityExpression:
            case SyntaxKind.NegationExpression:
            case SyntaxKind.LogicalNotExpression:
                VisitUnaryExpression((UnaryExpressionSyntax)node);
                break;

            case SyntaxKind.BitwiseAndExpression:
            case SyntaxKind.BitwiseOrExpression:
            case SyntaxKind.ExclusiveOrExpression:
            case SyntaxKind.AddExpression:
            case SyntaxKind.SubExpression:
            case SyntaxKind.MultiplyExpression:
            case SyntaxKind.DivideExpression:
            case SyntaxKind.ModuloExpression:
            case SyntaxKind.PowerExpression:
            case SyntaxKind.EqualExpression:
            case SyntaxKind.NotEqualExpression:
            case SyntaxKind.LessExpression:
            case SyntaxKind.LessOrEqualExpression:
            case SyntaxKind.GreaterExpression:
            case SyntaxKind.GreaterOrEqualExpression:
            case SyntaxKind.NotLessExpression:
            case SyntaxKind.NotGreaterExpression:
            case SyntaxKind.LeftShiftExpression:
            case SyntaxKind.RightShiftExpression:
            case SyntaxKind.LogicalAndExpression:
            case SyntaxKind.LogicalOrExpression:
                VisitBinaryExpression((BinaryExpressionSyntax)node);
                break;

            case SyntaxKind.LikeExpression:
                VisitLikeExpression((LikeExpressionSyntax)node);
                break;

            case SyntaxKind.SoundsLikeExpression:
                VisitSoundsLikeExpression((SoundsLikeExpressionSyntax)node);
                break;

            case SyntaxKind.SimilarToExpression:
                VisitSimilarToExpression((SimilarToExpressionSyntax)node);
                break;

            case SyntaxKind.ParenthesizedExpression:
                VisitParenthesizedExpression((ParenthesizedExpressionSyntax)node);
                break;

            case SyntaxKind.BetweenExpression:
                VisitBetweenExpression((BetweenExpressionSyntax)node);
                break;

            case SyntaxKind.IsNullExpression:
                VisitIsNullExpression((IsNullExpressionSyntax)node);
                break;

            case SyntaxKind.CastExpression:
                VisitCastExpression((CastExpressionSyntax)node);
                break;

            case SyntaxKind.CaseExpression:
                VisitCaseExpression((CaseExpressionSyntax)node);
                break;

            case SyntaxKind.CaseLabel:
                VisitCaseLabel((CaseLabelSyntax)node);
                break;

            case SyntaxKind.CoalesceExpression:
                VisitCoalesceExpression((CoalesceExpressionSyntax)node);
                break;

            case SyntaxKind.NullIfExpression:
                VisitNullIfExpression((NullIfExpressionSyntax)node);
                break;

            case SyntaxKind.InExpression:
                VisitInExpression((InExpressionSyntax)node);
                break;

            case SyntaxKind.LiteralExpression:
                VisitLiteralExpression((LiteralExpressionSyntax)node);
                break;

            case SyntaxKind.VariableExpression:
                VisitParameterExpression((VariableExpressionSyntax)node);
                break;

            case SyntaxKind.NameExpression:
                VisitNameExpression((NameExpressionSyntax)node);
                break;

            case SyntaxKind.PropertyAccessExpression:
                VisitPropertyAccessExpression((PropertyAccessExpressionSyntax)node);
                break;

            case SyntaxKind.CountAllExpression:
                VisitCountAllExpression((CountAllExpressionSyntax)node);
                break;

            case SyntaxKind.FunctionInvocationExpression:
                VisitFunctionInvocationExpression((FunctionInvocationExpressionSyntax)node);
                break;

            case SyntaxKind.MethodInvocationExpression:
                VisitMethodInvocationExpression((MethodInvocationExpressionSyntax)node);
                break;

            case SyntaxKind.ArgumentList:
                VisitArgumentList((ArgumentListSyntax)node);
                break;

            case SyntaxKind.SingleRowSubselect:
                VisitSingleRowSubselect((SingleRowSubselectSyntax)node);
                break;

            case SyntaxKind.ExistsSubselect:
                VisitExistsSubselect((ExistsSubselectSyntax)node);
                break;

            case SyntaxKind.AllAnySubselect:
                VisitAllAnySubselect((AllAnySubselectSyntax)node);
                break;

            case SyntaxKind.ParenthesizedTableReference:
                VisitParenthesizedTableReference((ParenthesizedTableReferenceSyntax)node);
                break;

            case SyntaxKind.NamedTableReference:
                VisitNamedTableReference((NamedTableReferenceSyntax)node);
                break;

            case SyntaxKind.CrossJoinedTableReference:
                VisitCrossJoinedTableReference((CrossJoinedTableReferenceSyntax)node);
                break;

            case SyntaxKind.InnerJoinedTableReference:
                VisitInnerJoinedTableReference((InnerJoinedTableReferenceSyntax)node);
                break;

            case SyntaxKind.OuterJoinedTableReference:
                VisitOuterJoinedTableReference((OuterJoinedTableReferenceSyntax)node);
                break;

            case SyntaxKind.DerivedTableReference:
                VisitDerivedTableReference((DerivedTableReferenceSyntax)node);
                break;

            case SyntaxKind.ExceptQuery:
                VisitExceptQuery((ExceptQuerySyntax)node);
                break;

            case SyntaxKind.UnionQuery:
                VisitUnionQuery((UnionQuerySyntax)node);
                break;

            case SyntaxKind.IntersectQuery:
                VisitIntersectQuery((IntersectQuerySyntax)node);
                break;

            case SyntaxKind.OrderedQuery:
                VisitOrderedQuery((OrderedQuerySyntax)node);
                break;

            case SyntaxKind.OrderByColumn:
                VisitOrderByColumn((OrderByColumnSyntax)node);
                break;

            case SyntaxKind.ParenthesizedQuery:
                VisitParenthesizedQuery((ParenthesizedQuerySyntax)node);
                break;

            case SyntaxKind.CommonTableExpressionQuery:
                VisitCommonTableExpressionQuery((CommonTableExpressionQuerySyntax)node);
                break;

            case SyntaxKind.CommonTableExpression:
                VisitCommonTableExpression((CommonTableExpressionSyntax)node);
                break;

            case SyntaxKind.CommonTableExpressionColumnName:
                VisitCommonTableExpressionColumnName((CommonTableExpressionColumnNameSyntax)node);
                break;

            case SyntaxKind.CommonTableExpressionColumnNameList:
                VisitCommonTableExpressionColumnNameList((CommonTableExpressionColumnNameListSyntax)node);
                break;

            case SyntaxKind.SelectQuery:
                VisitSelectQuery((SelectQuerySyntax)node);
                break;

            case SyntaxKind.TopClause:
                VisitTopClause((TopClauseSyntax)node);
                break;

            case SyntaxKind.WildcardSelectColumn:
                VisitWildcardSelectColumn((WildcardSelectColumnSyntax)node);
                break;

            case SyntaxKind.ExpressionSelectColumn:
                VisitExpressionSelectColumn((ExpressionSelectColumnSyntax)node);
                break;

            case SyntaxKind.SelectClause:
                VisitSelectClause((SelectClauseSyntax)node);
                break;

            case SyntaxKind.FromClause:
                VisitFromClause((FromClauseSyntax)node);
                break;

            case SyntaxKind.WhereClause:
                VisitWhereClause((WhereClauseSyntax)node);
                break;

            case SyntaxKind.GroupByClause:
                VisitGroupByClause((GroupByClauseSyntax)node);
                break;

            case SyntaxKind.GroupByColumn:
                VisitGroupByColumn((GroupByColumnSyntax)node);
                break;

            case SyntaxKind.HavingClause:
                VisitHavingClause((HavingClauseSyntax)node);
                break;

            case SyntaxKind.Alias:
                VisitAlias((AliasSyntax)node);
                break;

            default:
                throw ExceptionBuilder.UnexpectedValue(node.Kind);
            }
        }
示例#5
0
        private static ShowPlanNode Build(BoundNode node)
        {
            switch (node.Kind)
            {
            case BoundNodeKind.Query:
                return(BuildQueryRelation((BoundQuery)node));

            case BoundNodeKind.ConstantRelation:
                return(BuildConstant((BoundConstantRelation)node));

            case BoundNodeKind.TableRelation:
                return(BuildTable((BoundTableRelation)node));

            case BoundNodeKind.DerivedTableRelation:
                return(BuildDerivedTable((BoundDerivedTableRelation)node));

            case BoundNodeKind.FilterRelation:
                return(BuildFilter((BoundFilterRelation)node));

            case BoundNodeKind.ComputeRelation:
                return(BuildCompute((BoundComputeRelation)node));

            case BoundNodeKind.JoinRelation:
                return(BuildJoin((BoundJoinRelation)node));

            case BoundNodeKind.HashMatchRelation:
                return(BuildHashMatch((BoundHashMatchRelation)node));

            case BoundNodeKind.TopRelation:
                return(BuildTop((BoundTopRelation)node));

            case BoundNodeKind.SortRelation:
                return(BuildSort((BoundSortRelation)node));

            case BoundNodeKind.UnionRelation:
                return(BuildUnionRelation((BoundUnionRelation)node));

            case BoundNodeKind.ConcatenationRelation:
                return(BuildConcatenationRelation((BoundConcatenationRelation)node));

            case BoundNodeKind.IntersectOrExceptRelation:
                return(BuildIntersectOrExceptRelation((BoundIntersectOrExceptRelation)node));

            case BoundNodeKind.GroupByAndAggregationRelation:
                return(BuildGroupByAndAggregation((BoundGroupByAndAggregationRelation)node));

            case BoundNodeKind.StreamAggregatesRelation:
                return(BuildStreamAggregatesRelation((BoundStreamAggregatesRelation)node));

            case BoundNodeKind.ProjectRelation:
                return(BuildProject((BoundProjectRelation)node));

            case BoundNodeKind.AssertRelation:
                return(BuildAssert((BoundAssertRelation)node));

            case BoundNodeKind.TableSpoolPusher:
                return(BuildTableSpoolPusher((BoundTableSpoolPusher)node));

            case BoundNodeKind.TableSpoolPopper:
                return(BuildTableSpoolPopper((BoundTableSpoolPopper)node));

            case BoundNodeKind.UnaryExpression:
                return(BuildUnaryExpression((BoundUnaryExpression)node));

            case BoundNodeKind.BinaryExpression:
                return(BuildBinaryExpression((BoundBinaryExpression)node));

            case BoundNodeKind.LiteralExpression:
                return(BuildLiteralExpression((BoundLiteralExpression)node));

            case BoundNodeKind.ValueSlotExpression:
                return(BuildValueSlotExpression((BoundValueSlotExpression)node));

            case BoundNodeKind.VariableExpression:
                return(BuildVariableExpression((BoundVariableExpression)node));

            case BoundNodeKind.FunctionInvocationExpression:
                return(BuildFunctionInvocationExpression((BoundFunctionInvocationExpression)node));

            case BoundNodeKind.PropertyAccessExpression:
                return(BuildPropertyAccessExpression((BoundPropertyAccessExpression)node));

            case BoundNodeKind.MethodInvocationExpression:
                return(BuildMethodInvocationExpression((BoundMethodInvocationExpression)node));

            case BoundNodeKind.ConversionExpression:
                return(BuildConversionExpression((BoundConversionExpression)node));

            case BoundNodeKind.IsNullExpression:
                return(BuildIsNullExpression((BoundIsNullExpression)node));

            case BoundNodeKind.CaseExpression:
                return(BuildCaseExpression((BoundCaseExpression)node));

            case BoundNodeKind.SingleRowSubselect:
                return(BuildSingleRowSubselect((BoundSingleRowSubselect)node));

            case BoundNodeKind.ExistsSubselect:
                return(BuildExistsSubselect((BoundExistsSubselect)node));

            default:
                throw ExceptionBuilder.UnexpectedValue(node.Kind);
            }
        }