|
From: <fab...@us...> - 2010-12-15 22:21:10
|
Revision: 5319
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5319&view=rev
Author: fabiomaulo
Date: 2010-12-15 22:21:00 +0000 (Wed, 15 Dec 2010)
Log Message:
-----------
- added FirstOrNull enumerable extension
- refactoring
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs
trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstOrNullExtensionTests.cs
Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs 2010-12-15 22:09:18 UTC (rev 5318)
+++ trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs 2010-12-15 22:21:00 UTC (rev 5319)
@@ -682,7 +682,8 @@
return this;
}
- SetParameterList(name, vals, !vals.Any() ? GuessType(vals.GetCollectionElementType()) : DetermineType(name, vals.First()));
+ object firstValue = vals.FirstOrNull();
+ SetParameterList(name, vals, firstValue == null ? GuessType(vals.GetCollectionElementType()) : DetermineType(name, firstValue));
return this;
}
Modified: trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs 2010-12-15 22:09:18 UTC (rev 5318)
+++ trunk/nhibernate/src/NHibernate/Util/EnumerableExtensions.cs 2010-12-15 22:21:00 UTC (rev 5319)
@@ -48,6 +48,33 @@
throw new InvalidOperationException("Sequence contains no elements");
}
+ public static object FirstOrNull(this IEnumerable source)
+ {
+ if (source == null)
+ {
+ throw new ArgumentNullException("source");
+ }
+ IList collection = source as IList;
+ if (collection != null)
+ {
+ if (collection.Count > 0)
+ {
+ return collection[0];
+ }
+ }
+ else
+ {
+ using (DisposableEnumerator enumerator = source.GetDisposableEnumerator())
+ {
+ if (enumerator.MoveNext())
+ {
+ return enumerator.Current;
+ }
+ }
+ }
+ return null;
+ }
+
private static DisposableEnumerator GetDisposableEnumerator(this IEnumerable source)
{
return new DisposableEnumerator(source);
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 22:09:18 UTC (rev 5318)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-15 22:21:00 UTC (rev 5319)
@@ -582,6 +582,7 @@
<Compile Include="TypesTest\XmlDocTypeFixture.cs" />
<Compile Include="UtilityTest\EnumerableExtensionsTests\AnyExtensionTests.cs" />
<Compile Include="UtilityTest\EnumerableExtensionsTests\FirstExtensionTests.cs" />
+ <Compile Include="UtilityTest\EnumerableExtensionsTests\FirstOrNullExtensionTests.cs" />
<Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" />
<Compile Include="UtilityTest\ReflectionHelperTest.cs" />
<Compile Include="Linq\RegresstionTests.cs" />
Added: trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstOrNullExtensionTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstOrNullExtensionTests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/UtilityTest/EnumerableExtensionsTests/FirstOrNullExtensionTests.cs 2010-12-15 22:21:00 UTC (rev 5319)
@@ -0,0 +1,29 @@
+using System;
+using System.Collections;
+using NHibernate.Util;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.UtilityTest.EnumerableExtensionsTests
+{
+ public class FirstOrNullExtensionTests
+ {
+ [Test]
+ public void WhenNullThenThenThrows()
+ {
+ Executing.This(() => ((IEnumerable)null).FirstOrNull()).Should().Throw<ArgumentNullException>();
+ }
+
+ [Test]
+ public void WhenHasElementsThenReturnFirst()
+ {
+ (new[] { 2, 1 }).FirstOrNull().Should().Be(2);
+ }
+
+ [Test]
+ public void WhenEmptyThenReturnNull()
+ {
+ (new object[0]).FirstOrNull().Should().Be.Null();
+ }
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|