|
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.
|