Skip to content

Commit

Permalink
Moves checked->unchecked expression translation to RelationalSqlTrans…
Browse files Browse the repository at this point in the history
…latingExpressionVisitor
  • Loading branch information
svengeance committed Feb 3, 2020
1 parent 588be89 commit a690996
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1022,8 +1022,6 @@ private Expression RemapLambdaBody(ShapedQueryExpression shapedQueryExpression,
var lambdaBody = ReplacingExpressionVisitor.Replace(
lambdaExpression.Parameters.Single(), shapedQueryExpression.ShaperExpression, lambdaExpression.Body);

lambdaBody = IgnoreCheckedExpressionVisitor.Ignore(lambdaBody);

return ExpandWeakEntities((SelectExpression)shapedQueryExpression.QueryExpression, lambdaBody);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -551,16 +551,24 @@ protected override Expression VisitBinary(BinaryExpression binaryExpression)
return Visit(ConvertAnonymousObjectEqualityComparison(binaryExpression));
}

var left = TryRemoveImplicitConvert(binaryExpression.Left);
var right = TryRemoveImplicitConvert(binaryExpression.Right);
var uncheckedExpression = binaryExpression.NodeType switch
{
ExpressionType.AddChecked => Expression.Add(binaryExpression.Left, binaryExpression.Right),
ExpressionType.SubtractChecked => Expression.Subtract(binaryExpression.Left, binaryExpression.Right),
ExpressionType.MultiplyChecked => Expression.Multiply(binaryExpression.Left, binaryExpression.Right),
_ => binaryExpression
};

var left = TryRemoveImplicitConvert(uncheckedExpression.Left);
var right = TryRemoveImplicitConvert(uncheckedExpression.Right);

return TranslationFailed(binaryExpression.Left, Visit(left), out var sqlLeft)
|| TranslationFailed(binaryExpression.Right, Visit(right), out var sqlRight)
return TranslationFailed(uncheckedExpression.Left, Visit(left), out var sqlLeft)
|| TranslationFailed(uncheckedExpression.Right, Visit(right), out var sqlRight)
? null
: binaryExpression.NodeType == ExpressionType.Coalesce
: uncheckedExpression.NodeType == ExpressionType.Coalesce
? SqlExpressionFactory.Coalesce(sqlLeft, sqlRight)
: (Expression)SqlExpressionFactory.MakeBinary(
binaryExpression.NodeType,
uncheckedExpression.NodeType,
sqlLeft,
sqlRight,
null);
Expand Down Expand Up @@ -714,6 +722,7 @@ protected override Expression VisitUnary(UnaryExpression unaryExpression)
return SqlExpressionFactory.Negate(sqlOperand);

case ExpressionType.Convert:
case ExpressionType.ConvertChecked:
case ExpressionType.TypeAs:
// Object convert needs to be converted to explicit cast when mismatching types
if (operand.Type.IsInterface
Expand Down
44 changes: 0 additions & 44 deletions src/EFCore/Query/IgnoreCheckedExpressionVisitor.cs

This file was deleted.

0 comments on commit a690996

Please sign in to comment.