private BoundExpression BindCoalesceExpression(CoalesceExpressionSyntax node) { // COALESCE(e1, e2, .. eN) // // ====> // // CASE // WHEN e1 IS NOT NULL THEN e1 // .. // WHEN e2 IS NOT NULL THEN e2 // ELSE // eN // END var boundArguments = BindToCommonType(node.ArgumentList.Arguments); var caseLabelCount = node.ArgumentList.Arguments.Count - 1; var caseLabels = new BoundCaseLabel[caseLabelCount]; for (var i = 0; i < caseLabelCount; i++) { var argument = node.ArgumentList.Arguments[i]; var boundArgument = boundArguments[i]; var boundIsNullExpression = new BoundIsNullExpression(boundArgument); var boundIsNullNegation = BindUnaryExpression(argument.Span, UnaryOperatorKind.LogicalNot, boundIsNullExpression); var caseLabel = new BoundCaseLabel(boundIsNullNegation, boundArgument); caseLabels[i] = caseLabel; } var elseExpresion = boundArguments.Last(); return(new BoundCaseExpression(caseLabels, elseExpresion)); }
public virtual void VisitCoalesceExpression(CoalesceExpressionSyntax node) { DefaultVisit(node); }
public virtual TResult VisitCoalesceExpression(CoalesceExpressionSyntax node) { return(DefaultVisit(node)); }