Skip to content

Commit

Permalink
Add Translation for MathF (#18842)
Browse files Browse the repository at this point in the history
Fixes #18842
  • Loading branch information
ntovas committed May 4, 2021
1 parent 67a5d16 commit 56e4690
Show file tree
Hide file tree
Showing 2 changed files with 67 additions and 4 deletions.
43 changes: 40 additions & 3 deletions src/EFCore.SqlServer/Query/Internal/SqlServerMathTranslator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,21 +52,58 @@ public class SqlServerMathTranslator : IMethodCallTranslator
{ typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Sign), new[] { typeof(int) }), "SIGN" },
{ typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Sign), new[] { typeof(long) }), "SIGN" },
{ typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Sign), new[] { typeof(sbyte) }), "SIGN" },
{ typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Sign), new[] { typeof(short) }), "SIGN" }
{ typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Sign), new[] { typeof(short) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(decimal) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(double) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(float) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(int) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(long) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(sbyte) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Abs), new[] { typeof(short) }), "ABS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Ceiling), new[] { typeof(decimal) }), "CEILING" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Ceiling), new[] { typeof(double) }), "CEILING" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Floor), new[] { typeof(decimal) }), "FLOOR" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Floor), new[] { typeof(double) }), "FLOOR" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Pow), new[] { typeof(double), typeof(double) }), "POWER" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Exp), new[] { typeof(double) }), "EXP" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Log10), new[] { typeof(double) }), "LOG10" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Log), new[] { typeof(double) }), "LOG" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Log), new[] { typeof(double), typeof(double) }), "LOG" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sqrt), new[] { typeof(double) }), "SQRT" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Acos), new[] { typeof(double) }), "ACOS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Asin), new[] { typeof(double) }), "ASIN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Atan), new[] { typeof(double) }), "ATAN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Atan2), new[] { typeof(double), typeof(double) }), "ATN2" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Cos), new[] { typeof(double) }), "COS" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sin), new[] { typeof(double) }), "SIN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Tan), new[] { typeof(double) }), "TAN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(decimal) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(double) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(float) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(int) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(long) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(sbyte) }), "SIGN" },
{ typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Sign), new[] { typeof(short) }), "SIGN" }
};

private static readonly IEnumerable<MethodInfo> _truncateMethodInfos = new[]
{
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Truncate), new[] { typeof(decimal) }),
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Truncate), new[] { typeof(double) })
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Truncate), new[] { typeof(double) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Truncate), new[] { typeof(decimal) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Truncate), new[] { typeof(double) })
};

private static readonly IEnumerable<MethodInfo> _roundMethodInfos = new[]
{
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Round), new[] { typeof(decimal) }),
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Round), new[] { typeof(double) }),
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Round), new[] { typeof(decimal), typeof(int) }),
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Round), new[] { typeof(double), typeof(int) })
typeof(Math).GetRequiredRuntimeMethod(nameof(Math.Round), new[] { typeof(double), typeof(int) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Round), new[] { typeof(decimal) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Round), new[] { typeof(double) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Round), new[] { typeof(decimal), typeof(int) }),
typeof(MathF).GetRequiredRuntimeMethod(nameof(MathF.Round), new[] { typeof(double), typeof(int) })
};

private readonly ISqlExpressionFactory _sqlExpressionFactory;
Expand Down
28 changes: 27 additions & 1 deletion src/EFCore.Sqlite.Core/Query/Internal/SqliteMathTranslator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,33 @@ public class SqliteMathTranslator : IMethodCallTranslator
{ typeof(Math).GetRequiredMethod(nameof(Math.Min), new[] { typeof(uint), typeof(uint) }), "min" },
{ typeof(Math).GetRequiredMethod(nameof(Math.Min), new[] { typeof(ushort), typeof(ushort) }), "min" },
{ typeof(Math).GetRequiredMethod(nameof(Math.Round), new[] { typeof(double) }), "round" },
{ typeof(Math).GetRequiredMethod(nameof(Math.Round), new[] { typeof(double), typeof(int) }), "round" }
{ typeof(Math).GetRequiredMethod(nameof(Math.Round), new[] { typeof(double), typeof(int) }), "round" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(double) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(float) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(int) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(long) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(sbyte) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Abs), new[] { typeof(short) }), "abs" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(byte), typeof(byte) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(double), typeof(double) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(float), typeof(float) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(int), typeof(int) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(long), typeof(long) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(sbyte), typeof(sbyte) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(short), typeof(short) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(uint), typeof(uint) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Max), new[] { typeof(ushort), typeof(ushort) }), "max" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(byte), typeof(byte) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(double), typeof(double) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(float), typeof(float) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(int), typeof(int) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(long), typeof(long) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(sbyte), typeof(sbyte) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(short), typeof(short) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(uint), typeof(uint) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Min), new[] { typeof(ushort), typeof(ushort) }), "min" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Round), new[] { typeof(double) }), "round" },
{ typeof(MathF).GetRequiredMethod(nameof(MathF.Round), new[] { typeof(double), typeof(int) }), "round" }
};

private readonly ISqlExpressionFactory _sqlExpressionFactory;
Expand Down

0 comments on commit 56e4690

Please sign in to comment.