From: <dav...@us...> - 2009-04-13 17:20:36
|
Revision: 4177 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4177&view=rev Author: davybrion Date: 2009-04-13 17:20:26 +0000 (Mon, 13 Apr 2009) Log Message: ----------- NH-1738: Make FutureValue<T> fall back to regular List implementation if the current RDBMS does not support query batching Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs trunk/nhibernate/src/NHibernate/Impl/CriteriaImpl.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/FallbackFixture.cs Modified: trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs 2009-04-13 16:41:52 UTC (rev 4176) +++ trunk/nhibernate/src/NHibernate/Impl/AbstractQueryImpl.cs 2009-04-13 17:20:26 UTC (rev 4177) @@ -839,7 +839,12 @@ public IFutureValue<T> FutureValue<T>() { - session.FutureQueryBatch.Add(this); + if (!session.Factory.ConnectionProvider.Driver.SupportsMultipleQueries) + { + return new FutureValue<T>(List); + } + + session.FutureQueryBatch.Add(this); return session.FutureQueryBatch.GetFutureValue<T>(); } Modified: trunk/nhibernate/src/NHibernate/Impl/CriteriaImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/CriteriaImpl.cs 2009-04-13 16:41:52 UTC (rev 4176) +++ trunk/nhibernate/src/NHibernate/Impl/CriteriaImpl.cs 2009-04-13 17:20:26 UTC (rev 4177) @@ -373,6 +373,11 @@ public IFutureValue<T> FutureValue<T>() { + if (!session.Factory.ConnectionProvider.Driver.SupportsMultipleQueries) + { + return new FutureValue<T>(List); + } + session.FutureCriteriaBatch.Add(this); return session.FutureCriteriaBatch.GetFutureValue<T>(); } Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/FallbackFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/FallbackFixture.cs 2009-04-13 16:41:52 UTC (rev 4176) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/Futures/FallbackFixture.cs 2009-04-13 17:20:26 UTC (rev 4177) @@ -2,16 +2,18 @@ using System.Collections; using NHibernate.Cfg; +using NHibernate.Criterion; using NHibernate.Dialect; using NHibernate.Driver; using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; using Environment=NHibernate.Cfg.Environment; namespace NHibernate.Test.NHSpecificTest.Futures { - public class TestDriver : SqlClientDriver + public class TestDriverThatDoesntSupportQueryBatching : SqlClientDriver { public override bool SupportsMultipleQueries { @@ -36,12 +38,24 @@ protected override void Configure(Configuration configuration) { - configuration.Properties[Environment.ConnectionDriver] = "NHibernate.Test.NHSpecificTest.Futures.TestDriver, NHibernate.Test"; + configuration.Properties[Environment.ConnectionDriver] = + "NHibernate.Test.NHSpecificTest.Futures.TestDriverThatDoesntSupportQueryBatching, NHibernate.Test"; base.Configure(configuration); } + protected override void OnTearDown() + { + using (var session = sessions.OpenSession()) + { + session.Delete("from Person"); + session.Flush(); + } + + base.OnTearDown(); + } + [Test] - public void CriteriaFallsBackToListImplementationWhenQueryBatchingIsNotSupported() + public void FutureOfCriteriaFallsBackToListImplementationWhenQueryBatchingIsNotSupported() { using (var session = sessions.OpenSession()) { @@ -51,7 +65,7 @@ } [Test] - public void QueryFallsBackToListImplementationWhenQueryBatchingIsNotSupported() + public void FutureOfQueryFallsBackToListImplementationWhenQueryBatchingIsNotSupported() { using (var session = sessions.OpenSession()) { @@ -59,5 +73,71 @@ results.GetEnumerator().MoveNext(); } } + + [Test] + public void FutureValueOfCriteriaCanGetSingleEntityWhenQueryBatchingIsNotSupported() + { + int personId = CreatePerson(); + + using (var session = sessions.OpenSession()) + { + var futurePerson = session.CreateCriteria<Person>() + .Add(Restrictions.Eq("Id", personId)) + .FutureValue<Person>(); + Assert.IsNotNull(futurePerson.Value); + } + } + + [Test] + public void FutureValueOfCriteriaCanGetScalarValueWhenQueryBatchingIsNotSupported() + { + CreatePerson(); + + using (var session = sessions.OpenSession()) + { + var futureCount = session.CreateCriteria<Person>() + .SetProjection(Projections.RowCount()) + .FutureValue<int>(); + Assert.That(futureCount.Value, Is.EqualTo(1)); + } + } + + [Test] + public void FutureValueOfQueryCanGetSingleEntityWhenQueryBatchingIsNotSupported() + { + int personId = CreatePerson(); + + using (var session = sessions.OpenSession()) + { + var futurePerson = session.CreateQuery("from Person where Id = :id") + .SetInt32("id", personId) + .FutureValue<Person>(); + Assert.IsNotNull(futurePerson.Value); + } + } + + [Test] + public void FutureValueOfQueryCanGetScalarValueWhenQueryBatchingIsNotSupported() + { + CreatePerson(); + + using (var session = sessions.OpenSession()) + { + var futureCount = session.CreateQuery("select count(*) from Person") + .FutureValue<long>(); + Assert.That(futureCount.Value, Is.EqualTo(1L)); + } + } + + private int CreatePerson() + { + using (var session = sessions.OpenSession()) + { + var person = new Person(); + session.Save(person); + session.Flush(); + return person.Id; + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |