|
From: <ric...@us...> - 2011-01-22 13:50:37
|
Revision: 5364
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5364&view=rev
Author: ricbrown
Date: 2011-01-22 13:50:30 +0000 (Sat, 22 Jan 2011)
Log Message:
-----------
Fix NH-2467 (Futures in 3.0.0.GA not working when using PostgreSQL) - thanks to Artem Tikhomirov for the patch.
Also fixes PostgresSQL tests:
NHibernate.Test.NHSpecificTest.NH2251.Fixture.EnlistingFirstThePaginationAndThenTheRowCountDoesNotThrows
NHibernate.Test.NHSpecificTest.NH2251.Fixture.FuturePagedHql
NHibernate.Test.NHSpecificTest.NH2251.Fixture.WhenUseFutureSkipTakeThenNotThrow
NHibernate.Test.NHSpecificTest.NH2362.Fixture.CanParseMultipleGroupBy
NHibernate.Test.NHSpecificTest.NH2362.Fixture.CanParseMultipleGroupByAndSelect
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs
trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/DomainClass.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/NH2467Test.cs
Modified: trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2011-01-18 07:02:44 UTC (rev 5363)
+++ trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2011-01-22 13:50:30 UTC (rev 5364)
@@ -553,12 +553,12 @@
else
{
paramTypeList.Add(NHibernateUtil.Int32);
- limitParameterIndex = totalSpan;
+ limitParameterIndex = startParameterIndex + totalSpan;
if (addOffset)
{
paramTypeList.Add(NHibernateUtil.Int32);
- offsetParameterIndex = totalSpan;
- limitParameterIndex = totalSpan + 1;
+ offsetParameterIndex = startParameterIndex + totalSpan;
+ limitParameterIndex = startParameterIndex + totalSpan + 1;
}
}
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-01-18 07:02:44 UTC (rev 5363)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-01-22 13:50:30 UTC (rev 5364)
@@ -5,11 +5,10 @@
using System.Diagnostics;
using Iesi.Collections;
using Iesi.Collections.Generic;
-
using NHibernate.Cache;
+using NHibernate.Criterion;
using NHibernate.Driver;
using NHibernate.Engine;
-using NHibernate.Criterion;
using NHibernate.Loader.Criteria;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -319,18 +318,19 @@
{
int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryIndex, colIndex);
colIndex = BindQueryParameters(command, queryIndex, colIndex + limitParameterSpan);
- BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
+ colIndex += BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
}
}
- private void BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
+ private int BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
{
QueryParameters parameter = parameters[queryIndex];
RowSelection selection = parameter.RowSelection;
if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst)
{
- Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
+ return Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
}
+ return 0;
}
private int BindQueryParameters(IDbCommand command, int queryIndex, int colIndex)
Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-01-18 07:02:44 UTC (rev 5363)
+++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-01-22 13:50:30 UTC (rev 5364)
@@ -1,9 +1,10 @@
using System;
using System.Collections;
+using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using Iesi.Collections;
-
+using Iesi.Collections.Generic;
using NHibernate.Cache;
using NHibernate.Driver;
using NHibernate.Engine;
@@ -12,8 +13,6 @@
using NHibernate.SqlTypes;
using NHibernate.Transform;
using NHibernate.Type;
-using Iesi.Collections.Generic;
-using System.Collections.Generic;
namespace NHibernate.Impl
{
@@ -653,18 +652,19 @@
{
int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryIndex, colIndex);
colIndex = BindQueryParameters(command, queryIndex, colIndex + limitParameterSpan);
- BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
+ colIndex += BindLimitParametersLastIfNeccesary(command, queryIndex, colIndex);
}
}
- private void BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
+ private int BindLimitParametersLastIfNeccesary(IDbCommand command, int queryIndex, int colIndex)
{
QueryParameters parameter = parameters[queryIndex];
RowSelection selection = parameter.RowSelection;
if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst)
{
- Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
+ return Loader.Loader.BindLimitParameters(command, colIndex, selection, session);
}
+ return 0;
}
private int BindQueryParameters(IDbCommand command, int queryIndex, int colIndex)
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/DomainClass.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/DomainClass.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/DomainClass.cs 2011-01-22 13:50:30 UTC (rev 5364)
@@ -0,0 +1,20 @@
+
+
+namespace NHibernate.Test.NHSpecificTest.NH2467
+{
+ public class DomainClass
+ {
+
+ public int Id
+ {
+ get;
+ set;
+ }
+
+ public string Data
+ {
+ get;
+ set;
+ }
+ }
+}
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/Mappings.hbm.xml 2011-01-22 13:50:30 UTC (rev 5364)
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH2467"
+ default-lazy="false">
+ <class name="DomainClass">
+ <id name="Id">
+ <generator class="assigned" />
+ </id>
+ <property name="Data" />
+ </class>
+</hibernate-mapping>
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/NH2467Test.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/NH2467Test.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2467/NH2467Test.cs 2011-01-22 13:50:30 UTC (rev 5364)
@@ -0,0 +1,126 @@
+using System.Linq;
+using NHibernate.Criterion;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH2467
+{
+ [TestFixture]
+ public class NH2467Test : BugTestCase
+ {
+ protected override void OnSetUp()
+ {
+ base.OnSetUp();
+ using (var session = OpenSession())
+ {
+ var entity = new DomainClass {Id = 1, Data = "Test"};
+ session.Save(entity);
+ session.Flush();
+ }
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect.SupportsLimit && !dialect.BindLimitParametersFirst;
+ }
+
+ protected override void OnTearDown()
+ {
+ base.OnTearDown();
+ using (var session = OpenSession())
+ {
+ session.Delete("from System.Object");
+ session.Flush();
+ }
+ }
+
+ [Test]
+ public void ShouldNotThrowOnFuturePaging()
+ {
+ using (var session = OpenSession())
+ {
+
+ var contentQuery = session
+ .CreateCriteria<DomainClass>()
+ .Add(Restrictions.Eq("Data", "Test"));
+ contentQuery.SetMaxResults(2);
+ contentQuery.SetFirstResult(0);
+ var content = contentQuery.Future<DomainClass>();
+
+ var countQuery = session
+ .CreateCriteria<DomainClass>()
+ .Add(Restrictions.Eq("Data", "Test"));
+ countQuery.SetProjection(Projections.RowCount());
+ var count = countQuery.FutureValue<int>();
+
+ // triggers batch operation, should not throw
+ var result = content.ToList();
+ }
+ }
+
+ [Test]
+ public void ShouldNotThrowOnReversedFuturePaging()
+ {
+ using (var session = OpenSession())
+ {
+
+ var countQuery = session
+ .CreateCriteria<DomainClass>()
+ .Add(Restrictions.Eq("Data", "Test"));
+ countQuery.SetProjection(Projections.RowCount());
+ var count = countQuery.FutureValue<int>();
+
+ var contentQuery = session
+ .CreateCriteria<DomainClass>()
+ .Add(Restrictions.Eq("Data", "Test"));
+ contentQuery.SetMaxResults(2);
+ contentQuery.SetFirstResult(0);
+ var content = contentQuery.Future<DomainClass>();
+
+ // triggers batch operation, should not throw
+ var result = content.ToList();
+ }
+ }
+
+ [Test]
+ public void ShouldNotThrowOnFuturePagingUsingHql()
+ {
+ using (var session = OpenSession())
+ {
+
+ var contentQuery = session.CreateQuery("from DomainClass as d where d.Data = ?");
+ contentQuery.SetString(0, "Test");
+ contentQuery.SetMaxResults(2);
+ contentQuery.SetFirstResult(0);
+ var content = contentQuery.Future<DomainClass>();
+
+ var countQuery = session.CreateQuery("select count(d) from DomainClass as d where d.Data = ?");
+ countQuery.SetString(0, "Test");
+ var count = countQuery.FutureValue<long>();
+
+ Assert.AreEqual(1, content.ToList().Count);
+ Assert.AreEqual(1, count.Value);
+ }
+ }
+
+ [Test]
+ public void ShouldNotThrowOnReversedFuturePagingUsingHql()
+ {
+ using (var session = OpenSession())
+ {
+
+ var contentQuery = session.CreateQuery("from DomainClass as d where d.Data = ?");
+ contentQuery.SetString(0, "Test");
+ contentQuery.SetMaxResults(2);
+ contentQuery.SetFirstResult(0);
+ var content = contentQuery.Future<DomainClass>();
+
+ var countQuery = session.CreateQuery("select count(d) from DomainClass as d where d.Data = ?");
+ countQuery.SetString(0, "Test");
+ var count = countQuery.FutureValue<long>();
+
+ Assert.AreEqual(1, content.ToList().Count);
+ Assert.AreEqual(1, count.Value);
+ }
+ }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-18 07:02:44 UTC (rev 5363)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-22 13:50:30 UTC (rev 5364)
@@ -598,6 +598,8 @@
<Compile Include="NHSpecificTest\NH2420\MyTable.cs" />
<Compile Include="NHSpecificTest\NH2441\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2441\Model.cs" />
+ <Compile Include="NHSpecificTest\NH2467\DomainClass.cs" />
+ <Compile Include="NHSpecificTest\NH2467\NH2467Test.cs" />
<Compile Include="NHSpecificTest\NH2459\Test.cs" />
<Compile Include="NHSpecificTest\NH2459\TrainingComponent.cs" />
<Compile Include="NHSpecificTest\NH2470\Class1Class2Classes.cs" />
@@ -2397,6 +2399,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2467\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2459\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2412\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2280\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|