Add translator for Jet Random

pull/131/head
Christopher Jolly 3 years ago
parent 2f2de12dd5
commit 5341e45e80

@ -444,5 +444,9 @@ namespace Microsoft.EntityFrameworkCore
[CanBeNull] this DbFunctions _,
[NotNull] string expression)
=> throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(IsDate)));
public static double Random(
[CanBeNull] this DbFunctions _)
=> throw new InvalidOperationException(CoreStrings.FunctionOnClient(nameof(Random)));
}
}

@ -25,6 +25,7 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
AddTranslators(
new IMethodCallTranslator[]
{
new JetRandomTranslator(sqlExpressionFactory),
new JetDateTimeMethodTranslator(sqlExpressionFactory),
new JetDateDiffFunctionsTranslator(sqlExpressionFactory),
new JetIsDateFunctionTranslator(sqlExpressionFactory),

@ -0,0 +1,48 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
{
/// <summary>
/// This API supports the Entity Framework Core infrastructure and is not intended to be used
/// directly from your code. This API may change or be removed in future releases.
/// </summary>
public class JetRandomTranslator : IMethodCallTranslator
{
private static readonly MethodInfo[] _methodInfo =
{
typeof(DbFunctionsExtensions).GetRuntimeMethod(nameof(DbFunctionsExtensions.Random), new[]
{
typeof(DbFunctions)
}),
typeof(JetDbFunctionsExtensions).GetRuntimeMethod(nameof(JetDbFunctionsExtensions.Random), new[]
{
typeof(DbFunctions)
})
};
private readonly JetSqlExpressionFactory _sqlExpressionFactory;
public JetRandomTranslator(ISqlExpressionFactory sqlExpressionFactory)
=> _sqlExpressionFactory = (JetSqlExpressionFactory)sqlExpressionFactory;
public SqlExpression Translate(SqlExpression instance, MethodInfo method, IReadOnlyList<SqlExpression> arguments, IDiagnosticsLogger<DbLoggerCategory.Query> logger)
{
return _methodInfo.Contains(method)
? _sqlExpressionFactory.Function(
"Rnd",
Array.Empty<SqlExpression>(),
false,
Enumerable.Empty<bool>(),
method.ReturnType)
: null;
}
}
}
Loading…
Cancel
Save