From 4fcef4d1ef5afdade07191b440fbf93af645dd08 Mon Sep 17 00:00:00 2001 From: "grzegorz.russek" Date: Thu, 4 Aug 2016 13:00:19 +0000 Subject: [PATCH] --- AmalgamationTool/DynamORM.Amalgamation.cs | 34 ++++++++++++------- DynamORM.Tests/Modify/ParserTests.cs | 2 ++ .../Implementation/DynamicQueryBuilder.cs | 2 ++ DynamORM/DynamicExtensions.cs | 8 ++--- DynamORM/Mapper/DynamicPropertyInvoker.cs | 24 +++++++++---- 5 files changed, 44 insertions(+), 26 deletions(-) diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index c7ff805..f7968c9 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -3698,9 +3698,7 @@ namespace DynamORM /// Returns instance of builder on which action is set. public static T CreateTemporaryParameterAction(this T b, Action a) where T : IDynamicQueryBuilder { - if (a == null) - b.OnCreateTemporaryParameter = null; - else + if (a != null) { if (b.OnCreateTemporaryParameter == null) b.OnCreateTemporaryParameter = new List>(); @@ -3718,9 +3716,7 @@ namespace DynamORM /// Returns instance of builder on which action is set. public static T CreateParameterAction(this T b, Action a) where T : IDynamicQueryBuilder { - if (a == null) - b.OnCreateParameter = null; - else + if (a != null) { if (b.OnCreateParameter == null) b.OnCreateParameter = new List>(); @@ -7090,6 +7086,8 @@ namespace DynamORM VirtualMode = false; Tables = new List(); Parameters = new Dictionary(); + OnCreateTemporaryParameter = new List>(); + OnCreateParameter = new List>(); WhereCondition = null; OpenBracketsCount = 0; @@ -11872,18 +11870,28 @@ namespace DynamORM try { - if (Type.IsArray || _genericEnumerable) + if (!Type.IsAssignableFrom(val.GetType())) { - var lst = (val as IEnumerable).Select(x => GetElementVal(_arrayType, x)).ToList(); + if (Type.IsArray || _genericEnumerable) + { + if (val != null) + { + var lst = (val as IEnumerable).Select(x => GetElementVal(_arrayType, x)).ToList(); - value = Array.CreateInstance(_arrayType, lst.Count); + value = Array.CreateInstance(_arrayType, lst.Count); - int i = 0; - foreach (var e in lst) - ((Array)value).SetValue(e, i++); + int i = 0; + foreach (var e in lst) + ((Array)value).SetValue(e, i++); + } + else + value = Array.CreateInstance(_arrayType, 0); + } + else + value = GetElementVal(Type, val); } else - value = GetElementVal(Type, val); + value = val; Setter(dest, value); } diff --git a/DynamORM.Tests/Modify/ParserTests.cs b/DynamORM.Tests/Modify/ParserTests.cs index de54826..df9f6c9 100644 --- a/DynamORM.Tests/Modify/ParserTests.cs +++ b/DynamORM.Tests/Modify/ParserTests.cs @@ -30,6 +30,8 @@ using System.Linq; using DynamORM.Builders; using DynamORM.Builders.Implementation; using NUnit.Framework; +using DynamORM.Tests.Helpers; +using System.Collections.Generic; namespace DynamORM.Tests.Modify { diff --git a/DynamORM/Builders/Implementation/DynamicQueryBuilder.cs b/DynamORM/Builders/Implementation/DynamicQueryBuilder.cs index b753e49..102e41f 100644 --- a/DynamORM/Builders/Implementation/DynamicQueryBuilder.cs +++ b/DynamORM/Builders/Implementation/DynamicQueryBuilder.cs @@ -214,6 +214,8 @@ namespace DynamORM.Builders.Implementation VirtualMode = false; Tables = new List(); Parameters = new Dictionary(); + OnCreateTemporaryParameter = new List>(); + OnCreateParameter = new List>(); WhereCondition = null; OpenBracketsCount = 0; diff --git a/DynamORM/DynamicExtensions.cs b/DynamORM/DynamicExtensions.cs index 5315265..b151cce 100644 --- a/DynamORM/DynamicExtensions.cs +++ b/DynamORM/DynamicExtensions.cs @@ -877,9 +877,7 @@ namespace DynamORM /// Returns instance of builder on which action is set. public static T CreateTemporaryParameterAction(this T b, Action a) where T : IDynamicQueryBuilder { - if (a == null) - b.OnCreateTemporaryParameter = null; - else + if (a != null) { if (b.OnCreateTemporaryParameter == null) b.OnCreateTemporaryParameter = new List>(); @@ -897,9 +895,7 @@ namespace DynamORM /// Returns instance of builder on which action is set. public static T CreateParameterAction(this T b, Action a) where T : IDynamicQueryBuilder { - if (a == null) - b.OnCreateParameter = null; - else + if (a != null) { if (b.OnCreateParameter == null) b.OnCreateParameter = new List>(); diff --git a/DynamORM/Mapper/DynamicPropertyInvoker.cs b/DynamORM/Mapper/DynamicPropertyInvoker.cs index 9ebb0ed..1291e54 100644 --- a/DynamORM/Mapper/DynamicPropertyInvoker.cs +++ b/DynamORM/Mapper/DynamicPropertyInvoker.cs @@ -147,18 +147,28 @@ namespace DynamORM.Mapper try { - if (Type.IsArray || _genericEnumerable) + if (!Type.IsAssignableFrom(val.GetType())) { - var lst = (val as IEnumerable).Select(x => GetElementVal(_arrayType, x)).ToList(); + if (Type.IsArray || _genericEnumerable) + { + if (val != null) + { + var lst = (val as IEnumerable).Select(x => GetElementVal(_arrayType, x)).ToList(); - value = Array.CreateInstance(_arrayType, lst.Count); + value = Array.CreateInstance(_arrayType, lst.Count); - int i = 0; - foreach (var e in lst) - ((Array)value).SetValue(e, i++); + int i = 0; + foreach (var e in lst) + ((Array)value).SetValue(e, i++); + } + else + value = Array.CreateInstance(_arrayType, 0); + } + else + value = GetElementVal(Type, val); } else - value = GetElementVal(Type, val); + value = val; Setter(dest, value); }