1
- using System . Linq ;
1
+ using System ;
2
+ using System . Linq ;
2
3
using System . Transactions ;
3
4
using NHibernate . Dialect ;
4
5
using NHibernate . DomainModel . Northwind . Entities ;
@@ -12,7 +13,7 @@ namespace NHibernate.Test.Linq
12
13
public class QueryLock : LinqTestCase
13
14
{
14
15
[ Test ]
15
- public void CanSetLockLinqQueries ( )
16
+ public void CanSetLockLinqQueriesOuter ( )
16
17
{
17
18
using ( session . BeginTransaction ( ) )
18
19
{
@@ -26,21 +27,21 @@ public void CanSetLockLinqQueries()
26
27
}
27
28
28
29
[ Test ]
29
- public void CanSetLockOnSubquery ( )
30
+ public void CanSetLockLinqQueries ( )
30
31
{
31
32
using ( session . BeginTransaction ( ) )
32
33
{
33
- var result = ( from c in db . Customers
34
- from o in c . Orders . DefaultIfEmpty ( )
35
- select o ) . ToList ( ) ;
34
+ var result = ( from e in db . Customers . WithLock ( LockMode . Upgrade )
35
+ select e ) . ToList ( ) ;
36
36
37
37
Assert . That ( result , Has . Count . EqualTo ( 91 ) ) ;
38
38
Assert . That ( session . GetCurrentLockMode ( result [ 0 ] ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
39
+ AssertSeparateTransactionIsLockedOut ( result [ 0 ] . CustomerId ) ;
39
40
}
40
41
}
41
42
42
43
[ Test ]
43
- public void CanSetLockOnSubqueryHql ( )
44
+ public void CanSetLockOnJoinHql ( )
44
45
{
45
46
using ( session . BeginTransaction ( ) )
46
47
{
@@ -51,6 +52,79 @@ public void CanSetLockOnSubqueryHql()
51
52
}
52
53
}
53
54
55
+ [ Test ]
56
+ public void CanSetLockOnJoin ( )
57
+ {
58
+ using ( session . BeginTransaction ( ) )
59
+ {
60
+ var result = ( from c in db . Customers
61
+ from o in c . Orders . WithLock ( LockMode . Upgrade )
62
+ select o ) . ToList ( ) ;
63
+
64
+ Assert . That ( result , Has . Count . EqualTo ( 830 ) ) ;
65
+ Assert . That ( session . GetCurrentLockMode ( result [ 0 ] ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
66
+ }
67
+ }
68
+
69
+ [ Test ]
70
+ public void CanSetLockOnJoinOuter ( )
71
+ {
72
+ using ( session . BeginTransaction ( ) )
73
+ {
74
+ var result = ( from c in db . Customers
75
+ from o in c . Orders
76
+ select o ) . WithLock ( LockMode . Upgrade ) . ToList ( ) ;
77
+
78
+ Assert . That ( result , Has . Count . EqualTo ( 830 ) ) ;
79
+ Assert . That ( session . GetCurrentLockMode ( result [ 0 ] ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
80
+ }
81
+ }
82
+
83
+ [ Test ]
84
+ public void CanSetLockOnJoinOuterNotSupported ( )
85
+ {
86
+ using ( session . BeginTransaction ( ) )
87
+ {
88
+ var query = (
89
+ from c in db . Customers
90
+ from o in c . Orders
91
+ select new { o , c }
92
+ ) . WithLock ( LockMode . Upgrade ) ;
93
+
94
+ Assert . Throws < NotSupportedException > ( ( ) => query . ToList ( ) ) ;
95
+ }
96
+ }
97
+
98
+ [ Test ]
99
+ public void CanSetLockOnJoinOuter2Hql ( )
100
+ {
101
+ using ( session . BeginTransaction ( ) )
102
+ {
103
+ session
104
+ . CreateQuery ( "select o, c from Customer c join c.Orders o" )
105
+ . SetLockMode ( "o" , LockMode . Upgrade )
106
+ . SetLockMode ( "c" , LockMode . Upgrade )
107
+ . List ( ) ;
108
+ }
109
+ }
110
+
111
+ [ Test ]
112
+ public void CanSetLockOnBothJoinAndMain ( )
113
+ {
114
+ using ( session . BeginTransaction ( ) )
115
+ {
116
+ var result = (
117
+ from c in db . Customers . WithLock ( LockMode . Upgrade )
118
+ from o in c . Orders . WithLock ( LockMode . Upgrade )
119
+ select new { o , c }
120
+ ) . ToList ( ) ;
121
+
122
+ Assert . That ( result , Has . Count . EqualTo ( 830 ) ) ;
123
+ Assert . That ( session . GetCurrentLockMode ( result [ 0 ] . o ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
124
+ Assert . That ( session . GetCurrentLockMode ( result [ 0 ] . c ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
125
+ }
126
+ }
127
+
54
128
[ Test ]
55
129
public void CanSetLockOnLinqPagingQuery ( )
56
130
{
@@ -61,7 +135,9 @@ public void CanSetLockOnLinqPagingQuery()
61
135
62
136
Assert . That ( result , Has . Count . EqualTo ( 5 ) ) ;
63
137
Assert . That ( session . GetCurrentLockMode ( result [ 0 ] ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
64
- AssertSeparateTransactionIsLockedOut ( result [ 0 ] . CustomerId ) ;
138
+
139
+ if ( ! ( Dialect is MsSql2000Dialect ) && ! ( Dialect is MsSqlCeDialect ) )
140
+ AssertSeparateTransactionIsLockedOut ( result [ 0 ] . CustomerId ) ;
65
141
}
66
142
}
67
143
@@ -77,7 +153,9 @@ orderby e.CompanyName
77
153
78
154
Assert . That ( result , Has . Count . EqualTo ( 5 ) ) ;
79
155
Assert . That ( session . GetCurrentLockMode ( result [ 0 ] ) , Is . EqualTo ( LockMode . Upgrade ) ) ;
80
- AssertSeparateTransactionIsLockedOut ( result [ 0 ] . CustomerId ) ;
156
+
157
+ if ( ! ( Dialect is MsSql2000Dialect ) && ! ( Dialect is MsSqlCeDialect ) )
158
+ AssertSeparateTransactionIsLockedOut ( result [ 0 ] . CustomerId ) ;
81
159
}
82
160
}
83
161
0 commit comments