Skip to content

Commit e32babe

Browse files
committed
Translate 'case when X is null...' to 'coalesce(X,...)'
1 parent 172e589 commit e32babe

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/EntityFramework6.Npgsql/SqlGenerators/SqlBaseGenerator.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,23 @@ protected string GetDbType(EdmType edmType)
829829

830830
public override VisitedExpression Visit([NotNull] DbCaseExpression expression)
831831
{
832+
// Check for COALESCE like CASE
833+
if (expression.When.Count == 1 &&
834+
expression.When[0].ExpressionKind == DbExpressionKind.IsNull)
835+
{
836+
var is_null = expression.When[0] as DbIsNullExpression;
837+
if (is_null.Argument.Equals(expression.Else))
838+
{
839+
LiteralExpression coalesceExpression = new LiteralExpression(" COALESCE( ");
840+
coalesceExpression.Append(expression.Else.Accept(this));
841+
coalesceExpression.Append(",");
842+
coalesceExpression.Append(expression.Then[0].Accept(this));
843+
coalesceExpression.Append(") ");
844+
return coalesceExpression;
845+
}
846+
}
847+
848+
// General CASE
832849
var caseExpression = new LiteralExpression(" CASE ");
833850
for (var i = 0; i < expression.When.Count && i < expression.Then.Count; ++i)
834851
{

0 commit comments

Comments
 (0)