From 9e72ab76292506673b8d854de681c38ae112b613 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Tue, 3 Mar 2020 15:49:15 +0100 Subject: [PATCH] Minor cleanup for queryable function support --- .../Metadata/Internal/DbFunction.cs | 79 ++++++------------- src/EFCore/Query/ShapedQueryExpression.cs | 2 +- .../Metadata/DbFunctionMetadataTests.cs | 2 +- 3 files changed, 28 insertions(+), 55 deletions(-) diff --git a/src/EFCore.Relational/Metadata/Internal/DbFunction.cs b/src/EFCore.Relational/Metadata/Internal/DbFunction.cs index 5c8345b3624..6ec15b5d95f 100644 --- a/src/EFCore.Relational/Metadata/Internal/DbFunction.cs +++ b/src/EFCore.Relational/Metadata/Internal/DbFunction.cs @@ -144,19 +144,11 @@ public static IEnumerable GetDbFunctions([NotNull] IModel model) /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// - public static DbFunction FindDbFunction( - [NotNull] IModel model, - [NotNull] MethodInfo methodInfo) - { - var functions = (SortedDictionary)model[RelationalAnnotationNames.DbFunctions]; - if (functions == null - || !functions.TryGetValue(GetFunctionName(methodInfo, methodInfo.GetParameters()), out var dbFunction)) - { - return null; - } - - return dbFunction; - } + public static DbFunction FindDbFunction([NotNull] IModel model, [NotNull] MethodInfo methodInfo) + => model[RelationalAnnotationNames.DbFunctions] is SortedDictionary functions + && functions.TryGetValue(GetFunctionName(methodInfo, methodInfo.GetParameters()), out var dbFunction) + ? dbFunction + : null; /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -164,16 +156,11 @@ public static DbFunction FindDbFunction( /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// - public static DbFunction FindDbFunction( - [NotNull] IModel model, - [NotNull] string name) - { - var functions = (SortedDictionary)model[RelationalAnnotationNames.DbFunctions]; - return functions == null - || !functions.TryGetValue(name, out var dbFunction) - ? null - : dbFunction; - } + public static DbFunction FindDbFunction([NotNull] IModel model, [NotNull] string name) + => model[RelationalAnnotationNames.DbFunctions] is SortedDictionary functions + && functions.TryGetValue(name, out var dbFunction) + ? dbFunction + : null; /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -208,16 +195,8 @@ public static DbFunction AddDbFunction( } private static SortedDictionary GetOrCreateFunctions(IMutableModel model) - { - var functions = (SortedDictionary)model[RelationalAnnotationNames.DbFunctions]; - if (functions == null) - { - functions = new SortedDictionary(); - model[RelationalAnnotationNames.DbFunctions] = functions; - } - - return functions; - } + => (SortedDictionary)( + model[RelationalAnnotationNames.DbFunctions] ??= new SortedDictionary()); /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -229,22 +208,19 @@ public static DbFunction RemoveDbFunction( [NotNull] IMutableModel model, [NotNull] MethodInfo methodInfo) { - var functions = (SortedDictionary)model[RelationalAnnotationNames.DbFunctions]; - if (functions == null) + if (model[RelationalAnnotationNames.DbFunctions] is SortedDictionary functions) { - return null; - } + var name = GetFunctionName(methodInfo, methodInfo.GetParameters()); + if (functions.TryGetValue(name, out var function)) + { + functions.Remove(name); + function.Builder = null; - var name = GetFunctionName(methodInfo, methodInfo.GetParameters()); - if (!functions.TryGetValue(name, out var function)) - { - return null; + return function; + } } - functions.Remove(name); - function.Builder = null; - - return function; + return null; } /// @@ -257,17 +233,14 @@ public static DbFunction RemoveDbFunction( [NotNull] IMutableModel model, [NotNull] string name) { - var functions = (SortedDictionary)model[RelationalAnnotationNames.DbFunctions]; - if (functions == null - || !functions.TryGetValue(name, out var function)) + if (model[RelationalAnnotationNames.DbFunctions] is SortedDictionary functions + && functions.TryGetValue(name, out var function)) { - return null; + functions.Remove(name); + function.Builder = null; } - functions.Remove(name); - function.Builder = null; - - return function; + return null; } /// diff --git a/src/EFCore/Query/ShapedQueryExpression.cs b/src/EFCore/Query/ShapedQueryExpression.cs index 698e28908be..3f0d1a5afb3 100644 --- a/src/EFCore/Query/ShapedQueryExpression.cs +++ b/src/EFCore/Query/ShapedQueryExpression.cs @@ -34,7 +34,7 @@ private ShapedQueryExpression( public virtual Expression ShaperExpression { get; } public override Type Type => ResultCardinality == ResultCardinality.Enumerable - ? typeof(IQueryable<>).MakeGenericType(ShaperExpression.Type) + ? typeof(IQueryable<>).MakeGenericType(ShaperExpression.Type) : ShaperExpression.Type; public sealed override ExpressionType NodeType => ExpressionType.Extension; diff --git a/test/EFCore.Relational.Tests/Metadata/DbFunctionMetadataTests.cs b/test/EFCore.Relational.Tests/Metadata/DbFunctionMetadataTests.cs index d1f0a33bd94..a2055d6c7d3 100644 --- a/test/EFCore.Relational.Tests/Metadata/DbFunctionMetadataTests.cs +++ b/test/EFCore.Relational.Tests/Metadata/DbFunctionMetadataTests.cs @@ -196,7 +196,7 @@ public static int DuplicateNameTest() public static MethodInfo MethodHmi = typeof(TestMethods).GetTypeInfo().GetDeclaredMethod(nameof(TestMethods.MethodH)); public static MethodInfo MethodJmi = typeof(TestMethods).GetTypeInfo().GetDeclaredMethod(nameof(TestMethods.MethodJ)); - + public class TestMethods { public static int Foo => 1;