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