未验证 提交 94648a38 编写于 作者: S Shay Rojansky 提交者: GitHub

Clean up NodaTime evaluatable filter (#2354)

上级 fed78ec7
......@@ -9,11 +9,30 @@ public class NpgsqlNodaTimeEvaluatableExpressionFilterPlugin : IEvaluatableExpre
typeof(SystemClock).GetMember(nameof(SystemClock.Instance)).FirstOrDefault()!;
public virtual bool IsEvaluatableExpression(Expression expression)
=> !(
expression is MethodCallExpression methodExpression
&& methodExpression.Method == GetCurrentInstantMethod
||
expression is MemberExpression memberExpression
&& memberExpression.Member == SystemClockInstanceMember
);
{
switch (expression)
{
case MethodCallExpression methodCallExpression when methodCallExpression.Method == GetCurrentInstantMethod:
return false;
case MemberExpression memberExpression:
if (memberExpression.Member == SystemClockInstanceMember)
{
return false;
}
// We support translating certain NodaTime patterns which accept a time zone as a parameter,
// e.g. Instant.InZone(timezone), as long as the timezone is expressed as an access on DateTimeZoneProviders.Tzdb.
// Prevent this from being evaluated locally and so parameterized, so we can access the member access on
// DateTimeZoneProviders and extract the constant (see NpgsqlNodaTimeMethodCallTranslatorPlugin)
if (memberExpression.Member.DeclaringType == typeof(DateTimeZoneProviders))
{
return false;
}
break;
}
return true;
}
}
\ No newline at end of file
......@@ -34,18 +34,6 @@ public override bool IsEvaluatableExpression(Expression expression, IModel model
return false;
}
break;
case MemberExpression memberExpression:
// We support translating certain NodaTime patterns which accept a time zone as a parameter,
// e.g. Instant.InZone(timezone), as long as the timezone is expressed as an access on DateTimeZoneProviders.Tzdb.
// Prevent this from being evaluated locally and so parameterized, so we can access the access tree on
// DateTimeZoneProviders and extract the constant (see NpgsqlNodaTimeMethodCallTranslatorPlugin)
if (memberExpression.Member.DeclaringType?.FullName == "NodaTime.DateTimeZoneProviders")
{
return false;
}
break;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册