Skip to content

Commit a95eaad

Browse files
committed
Add LockMode.UpgradeSkipLocked (#2005)
1 parent 39de4d9 commit a95eaad

File tree

17 files changed

+236
-124
lines changed

17 files changed

+236
-124
lines changed

src/NHibernate.Config.Templates/PostgreSQL.cfg.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ for your own use before compile tests in VisualStudio.
1010
<property name="connection.connection_string">
1111
Server=localhost;Database=nhibernate;User ID=nhibernate;Password=nhibernate;Enlist=true;
1212
</property>
13-
<property name="dialect">NHibernate.Dialect.PostgreSQL83Dialect</property>
13+
<property name="dialect">NHibernate.Dialect.PostgreSQL95Dialect</property>
1414
</session-factory>
1515
</hibernate-configuration>

src/NHibernate.Test/Async/Legacy/ParentChildTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,11 +953,14 @@ public async Task LockingAsync()
953953
s3.Count = 3;
954954
Simple s4 = new Simple();
955955
s4.Count = 4;
956+
Simple s5 = new Simple();
957+
s5.Count = 5;
956958

957959
await (s.SaveAsync(s1, (long) 1));
958960
await (s.SaveAsync(s2, (long) 2));
959961
await (s.SaveAsync(s3, (long) 3));
960962
await (s.SaveAsync(s4, (long) 4));
963+
await (s.SaveAsync(s5, (long) 5));
961964
Assert.AreEqual(LockMode.Write, s.GetCurrentLockMode(s1));
962965
await (tx.CommitAsync());
963966
s.Close();
@@ -972,6 +975,8 @@ public async Task LockingAsync()
972975
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
973976
s4 = (Simple) await (s.LoadAsync(typeof(Simple), (long) 4, LockMode.UpgradeNoWait));
974977
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
978+
s5 = (Simple) await (s.LoadAsync(typeof(Simple), (long) 5, LockMode.UpgradeSkipLocked));
979+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s5));
975980

976981
s1 = (Simple) await (s.LoadAsync(typeof(Simple), (long) 1, LockMode.Upgrade)); //upgrade
977982
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s1));
@@ -981,14 +986,18 @@ public async Task LockingAsync()
981986
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
982987
s4 = (Simple) await (s.LoadAsync(typeof(Simple), (long) 4, LockMode.Upgrade));
983988
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
989+
s5 = (Simple) await (s.LoadAsync(typeof(Simple), (long) 5, LockMode.Upgrade));
990+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s4));
984991

985992
await (s.LockAsync(s2, LockMode.Upgrade)); //upgrade
986993
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s2));
987994
await (s.LockAsync(s3, LockMode.Upgrade));
988995
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
989996
await (s.LockAsync(s1, LockMode.UpgradeNoWait));
990997
await (s.LockAsync(s4, LockMode.None));
998+
await (s.LockAsync(s5, LockMode.UpgradeSkipLocked));
991999
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
1000+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s5));
9921001

9931002
await (tx.CommitAsync());
9941003
tx = s.BeginTransaction();
@@ -997,6 +1006,7 @@ public async Task LockingAsync()
9971006
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s1));
9981007
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s2));
9991008
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s4));
1009+
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s5));
10001010

10011011
await (s.LockAsync(s1, LockMode.Read)); //upgrade
10021012
Assert.AreEqual(LockMode.Read, s.GetCurrentLockMode(s1));
@@ -1017,11 +1027,13 @@ public async Task LockingAsync()
10171027
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s1));
10181028
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s2));
10191029
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s4));
1030+
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s5));
10201031

10211032
await (s.DeleteAsync(s1));
10221033
await (s.DeleteAsync(s2));
10231034
await (s.DeleteAsync(s3));
10241035
await (s.DeleteAsync(s4));
1036+
await (s.DeleteAsync(s5));
10251037
await (tx.CommitAsync());
10261038
s.Close();
10271039
}

src/NHibernate.Test/Legacy/ParentChildTest.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -942,11 +942,14 @@ public void Locking()
942942
s3.Count = 3;
943943
Simple s4 = new Simple();
944944
s4.Count = 4;
945+
Simple s5 = new Simple();
946+
s5.Count = 5;
945947

946948
s.Save(s1, (long) 1);
947949
s.Save(s2, (long) 2);
948950
s.Save(s3, (long) 3);
949951
s.Save(s4, (long) 4);
952+
s.Save(s5, (long) 5);
950953
Assert.AreEqual(LockMode.Write, s.GetCurrentLockMode(s1));
951954
tx.Commit();
952955
s.Close();
@@ -961,6 +964,8 @@ public void Locking()
961964
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
962965
s4 = (Simple) s.Load(typeof(Simple), (long) 4, LockMode.UpgradeNoWait);
963966
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
967+
s5 = (Simple) s.Load(typeof(Simple), (long) 5, LockMode.UpgradeSkipLocked);
968+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s5));
964969

965970
s1 = (Simple) s.Load(typeof(Simple), (long) 1, LockMode.Upgrade); //upgrade
966971
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s1));
@@ -970,14 +975,18 @@ public void Locking()
970975
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
971976
s4 = (Simple) s.Load(typeof(Simple), (long) 4, LockMode.Upgrade);
972977
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
978+
s5 = (Simple) s.Load(typeof(Simple), (long) 5, LockMode.Upgrade);
979+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s4));
973980

974981
s.Lock(s2, LockMode.Upgrade); //upgrade
975982
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s2));
976983
s.Lock(s3, LockMode.Upgrade);
977984
Assert.AreEqual(LockMode.Upgrade, s.GetCurrentLockMode(s3));
978985
s.Lock(s1, LockMode.UpgradeNoWait);
979986
s.Lock(s4, LockMode.None);
987+
s.Lock(s5, LockMode.UpgradeSkipLocked);
980988
Assert.AreEqual(LockMode.UpgradeNoWait, s.GetCurrentLockMode(s4));
989+
Assert.AreEqual(LockMode.UpgradeSkipLocked, s.GetCurrentLockMode(s5));
981990

982991
tx.Commit();
983992
tx = s.BeginTransaction();
@@ -986,6 +995,7 @@ public void Locking()
986995
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s1));
987996
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s2));
988997
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s4));
998+
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s5));
989999

9901000
s.Lock(s1, LockMode.Read); //upgrade
9911001
Assert.AreEqual(LockMode.Read, s.GetCurrentLockMode(s1));
@@ -1006,11 +1016,13 @@ public void Locking()
10061016
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s1));
10071017
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s2));
10081018
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s4));
1019+
Assert.AreEqual(LockMode.None, s.GetCurrentLockMode(s5));
10091020

10101021
s.Delete(s1);
10111022
s.Delete(s2);
10121023
s.Delete(s3);
10131024
s.Delete(s4);
1025+
s.Delete(s5);
10141026
tx.Commit();
10151027
s.Close();
10161028
}

0 commit comments

Comments
 (0)