From: <fab...@us...> - 2010-08-01 12:50:07
|
Revision: 5087 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5087&view=rev Author: fabiomaulo Date: 2010-08-01 12:50:01 +0000 (Sun, 01 Aug 2010) Log Message: ----------- Fix NH-2245 (thanks to Harold Howe) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Model.cs Modified: trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-07-31 14:15:53 UTC (rev 5086) +++ trunk/nhibernate/src/NHibernate/Persister/Entity/AbstractEntityPersister.cs 2010-08-01 12:50:01 UTC (rev 5087) @@ -2367,7 +2367,8 @@ .SetTableName(GetTableName(j)) .SetIdentityColumn(GetKeyColumns(j), IdentifierType); - if (j == 0 && IsVersioned) + // NH: Only add version to where clause if optimistic lock mode is Version + if (j == 0 && IsVersioned && entityMetamodel.OptimisticLockMode == Versioning.OptimisticLock.Version) { deleteBuilder.SetVersionColumn(new[] { VersionColumnName }, VersionType); } @@ -2811,7 +2812,9 @@ return; } - bool useVersion = j == 0 && IsVersioned; + // NH : Only use version if lock mode is Version + bool useVersion = j == 0 && IsVersioned && Versioning.OptimisticLock.Version == entityMetamodel.OptimisticLockMode; + //bool callable = IsDeleteCallable(j); IExpectation expectation = Expectations.AppropriateExpectation(deleteResultCheckStyles[j]); bool useBatch = j == 0 && expectation.CanBeBatched && IsBatchable; Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Fixture.cs 2010-08-01 12:50:01 UTC (rev 5087) @@ -0,0 +1,62 @@ +using System; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.NHSpecificTest.NH2245 +{ + [TestFixture] + public class Fixture : BugTestCase + { + [Test] + public void TestDelete_OptimisticLockNone() + { + Guid id; + + // persist a foo instance + using (ISession session = OpenSession()) + { + using (ITransaction tx = session.BeginTransaction()) + { + var f = new Foo(); + f.Name = "Henry"; + f.Description = "description"; + session.Save(f); + tx.Commit(); + id = f.Id; + } + } + + using (ISession session1 = OpenSession()) + using (ISession session2 = OpenSession()) + { + // Load the foo from two different sessions. Modify the foo in one session to bump the version in the database, and save. + // Then try to delete the foo from the other session. With optimistic lock set to none, this should succeed when the 2245 + // patch is applied to AbstractEntityPersister.cs. Without the patch, NH adds the version to the where clause of the delete + // statement, and the delete fails. + var f1 = session1.Get<Foo>(id); + var f2 = session2.Get<Foo>(id); + + // Bump version + using (ITransaction trans1 = session1.BeginTransaction()) + { + f1.Description = "modified description"; + session1.Update(f1); + trans1.Commit(); + } + + // Now delete from second session + using (ITransaction trans2 = session2.BeginTransaction()) + { + session2.Executing(s=> s.Delete(f2)).NotThrows(); + trans2.Commit(); + } + } + + // Assert that row is really gone + using (ISession assertSession = OpenSession()) + { + Assert.IsNull(assertSession.Get<Foo>(id)); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Mappings.hbm.xml 2010-08-01 12:50:01 UTC (rev 5087) @@ -0,0 +1,15 @@ +<?xml version="1.0"?> + +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2245"> + + <class name="Foo" table="Foos" optimistic-lock="none"> + <id name="Id"> + <generator class="guid.comb"/> + </id> + <version name="Version" column="Version" /> + <property name="Name" type="String" /> + <property name="Description" type="String"/> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2245/Model.cs 2010-08-01 12:50:01 UTC (rev 5087) @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2245 +{ +public class Foo +{ + public Foo() {} + public virtual Guid Id {get; private set;} + public virtual string Name {get; set;} + public virtual string Description {get; set;} + public virtual int Version{get; set;} +} + +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-07-31 14:15:53 UTC (rev 5086) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-08-01 12:50:01 UTC (rev 5087) @@ -440,6 +440,8 @@ <Compile Include="Linq\QueryCacheableTests.cs" /> <Compile Include="Linq\QueryReuseTests.cs" /> <Compile Include="Linq\ReadonlyTestCase.cs" /> + <Compile Include="NHSpecificTest\NH2245\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2245\Model.cs" /> <Compile Include="UtilityTest\ReflectionHelperIsMethodOfTests.cs" /> <Compile Include="UtilityTest\ReflectionHelperTest.cs" /> <Compile Include="Linq\RegresstionTests.cs" /> @@ -2220,6 +2222,7 @@ <EmbeddedResource Include="DriverTest\SqlServerCeEntity.hbm.xml" /> <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2245\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2257\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2208\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2251\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |