From: <ric...@us...> - 2010-08-14 22:03:13
|
Revision: 5156 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5156&view=rev Author: ricbrown Date: 2010-08-14 22:03:06 +0000 (Sat, 14 Aug 2010) Log Message: ----------- Fix NH-2255 (MsSql2005Dialect resets parameters' positions(for paging parameters) when lock in use) Thanks for patch supplied by Nikita Govorov. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs trunk/nhibernate/src/NHibernate.Test/Pagination/PaginationFixture.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2010-08-14 21:04:51 UTC (rev 5155) +++ trunk/nhibernate/src/NHibernate/Dialect/MsSql2000Dialect.cs 2010-08-14 22:03:06 UTC (rev 5156) @@ -426,7 +426,7 @@ { if (part == Parameter.Placeholder) { - result.AddParameter(); + result.Add((Parameter)part); continue; } Modified: trunk/nhibernate/src/NHibernate.Test/Pagination/PaginationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Pagination/PaginationFixture.cs 2010-08-14 21:04:51 UTC (rev 5155) +++ trunk/nhibernate/src/NHibernate.Test/Pagination/PaginationFixture.cs 2010-08-14 22:03:06 UTC (rev 5156) @@ -72,5 +72,43 @@ t.Commit(); } } + + [Test] + public void PagingWithLock_NH2255() + { + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.Save(new DataPoint() { X = 4 }); + s.Save(new DataPoint() { X = 5 }); + s.Save(new DataPoint() { X = 6 }); + s.Save(new DataPoint() { X = 7 }); + s.Save(new DataPoint() { X = 8 }); + t.Commit(); + } + + using (ISession s = OpenSession()) + { + var points = + s.CreateCriteria<DataPoint>() + .Add(Restrictions.Gt("X", 4.1d)) + .AddOrder(Order.Asc("X")) + .SetLockMode(LockMode.Upgrade) + .SetFirstResult(1) + .SetMaxResults(2) + .List<DataPoint>(); + + Assert.That(points.Count, Is.EqualTo(2)); + Assert.That(points[0].X, Is.EqualTo(6d)); + Assert.That(points[1].X, Is.EqualTo(7d)); + } + + using (ISession s = OpenSession()) + using (ITransaction t = s.BeginTransaction()) + { + s.CreateQuery("delete from DataPoint").ExecuteUpdate(); + t.Commit(); + } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |