1
1
using NUnit . Framework ;
2
+ using NHibernate . Linq ;
2
3
using System . Collections . Generic ;
3
4
using System . Linq ;
4
5
@@ -10,108 +11,122 @@ public class Fixture : BugTestCase
10
11
protected override void OnSetUp ( )
11
12
{
12
13
Clear2ndLevelCache ( ) ;
13
- using ( ISession s = OpenSession ( ) )
14
- using ( ITransaction tx = s . BeginTransaction ( ) )
14
+ using ( var session = OpenSession ( ) )
15
+ using ( var transaction = session . BeginTransaction ( ) )
15
16
{
16
17
var p1 = new Person ( ) { Name = "A" } ;
17
18
var p1c1 = new Person ( ) { Name = "AA" } ;
18
19
var p1c2 = new Person ( ) { Name = "AB" } ;
19
20
var p1c3 = new Person ( ) { Name = "AC" } ;
20
21
p1 . Children = new HashSet < Person > ( new [ ] { p1c1 , p1c2 , p1c3 } ) ;
21
- s . Save ( p1 ) ;
22
+ session . Save ( p1 ) ;
22
23
23
24
var p2 = new Person ( ) { Name = "B" } ;
24
25
var p2c1 = new Person ( ) { Name = "BA" } ;
25
26
var p2c2 = new Person ( ) { Name = "BB" } ;
26
27
var p2c3 = new Person ( ) { Name = "BC" } ;
27
28
p2 . Children = new HashSet < Person > ( new [ ] { p2c1 , p2c2 , p2c3 } ) ;
28
- s . Save ( p2 ) ;
29
+ session . Save ( p2 ) ;
29
30
30
- tx . Commit ( ) ;
31
+ transaction . Commit ( ) ;
31
32
}
32
33
}
33
34
34
35
protected override void OnTearDown ( )
35
36
{
36
- base . OnTearDown ( ) ;
37
- using ( ISession s = OpenSession ( ) )
38
- using ( ITransaction tx = s . BeginTransaction ( ) )
37
+ using ( var session = OpenSession ( ) )
38
+ using ( var transaction = session . BeginTransaction ( ) )
39
39
{
40
- s . Delete ( "from Person" ) ;
41
- tx . Commit ( ) ;
40
+ session . Delete ( "from Person" ) ;
41
+ transaction . Commit ( ) ;
42
42
}
43
43
}
44
44
45
45
[ Test ]
46
46
public void CacheableMulticriteria_QueryOverWithAliasedJoinQueryOver ( )
47
47
{
48
48
ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
49
+ {
50
+ using ( var session = Sfi . OpenSession ( ) )
49
51
{
50
- using ( var s = Sfi . OpenSession ( ) )
51
- {
52
- var query = CreateQueryOverWithAliasedJoinQueryOver ( s ) ;
53
-
54
- var multiCriteria = s . CreateMultiCriteria ( ) ;
55
- multiCriteria . Add ( "myQuery" , query ) ;
56
- multiCriteria . SetCacheable ( true ) ;
57
-
58
- var list = ( IList < Person > ) multiCriteria . GetResult ( "myQuery" ) ;
59
- AssertQueryResult ( list ) ;
60
- }
61
- } ) ;
52
+ var query = CreateQueryOverWithAliasedJoinQueryOver ( session ) ;
53
+
54
+ var multiCriteria = session . CreateMultiCriteria ( ) ;
55
+ multiCriteria . Add ( "myQuery" , query ) ;
56
+ multiCriteria . SetCacheable ( true ) ;
57
+
58
+ var list = ( IList < Person > ) multiCriteria . GetResult ( "myQuery" ) ;
59
+ AssertQueryResult ( list ) ;
60
+ }
61
+ } ) ;
62
62
}
63
63
64
64
[ Test ]
65
65
public void CacheableFuture_QueryOverWithAliasedJoinQueryOver ( )
66
66
{
67
67
ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
68
+ {
69
+ using ( var s = Sfi . OpenSession ( ) )
68
70
{
69
- using ( var s = Sfi . OpenSession ( ) )
70
- {
71
- var query = CreateQueryOverWithAliasedJoinQueryOver ( s )
72
- . Cacheable ( )
73
- . Future ( ) ;
74
-
75
- var list = query . ToList ( ) ;
76
- AssertQueryResult ( list ) ;
77
- }
78
- } ) ;
71
+ var query = CreateQueryOverWithAliasedJoinQueryOver ( s )
72
+ . Cacheable ( )
73
+ . Future ( ) ;
74
+
75
+ var list = query . ToList ( ) ;
76
+ AssertQueryResult ( list ) ;
77
+ }
78
+ } ) ;
79
79
}
80
80
81
81
[ Test ]
82
82
public void CacheableMulticriteria_QueryOverWithJoinAlias ( )
83
83
{
84
84
ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
85
+ {
86
+ using ( var s = Sfi . OpenSession ( ) )
85
87
{
86
- using ( var s = Sfi . OpenSession ( ) )
87
- {
88
- var query = CreateQueryOverWithJoinAlias ( s ) ;
89
-
90
- var multiCriteria = s . CreateMultiCriteria ( ) ;
91
- multiCriteria . Add ( "myQuery" , query ) ;
92
- multiCriteria . SetCacheable ( true ) ;
93
-
94
- var list = ( IList < Person > ) multiCriteria . GetResult ( "myQuery" ) ;
95
- AssertQueryResult ( list ) ;
96
- }
97
- } ) ;
88
+ var query = CreateQueryOverWithJoinAlias ( s ) ;
89
+
90
+ var multiCriteria = s . CreateMultiCriteria ( ) ;
91
+ multiCriteria . Add ( "myQuery" , query ) ;
92
+ multiCriteria . SetCacheable ( true ) ;
93
+
94
+ var list = ( IList < Person > ) multiCriteria . GetResult ( "myQuery" ) ;
95
+ AssertQueryResult ( list ) ;
96
+ }
97
+ } ) ;
98
98
}
99
99
100
100
[ Test ]
101
101
public void CacheableFuture_QueryOverWithJoinAlias ( )
102
102
{
103
103
ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
104
+ {
105
+ using ( var s = Sfi . OpenSession ( ) )
106
+ {
107
+ var query = CreateQueryOverWithJoinAlias ( s )
108
+ . Cacheable ( )
109
+ . Future ( ) ;
110
+
111
+ var list = query . ToList ( ) ;
112
+ AssertQueryResult ( list ) ;
113
+ }
114
+ } ) ;
115
+ }
116
+
117
+ [ Test ]
118
+ public void CacheableFuture_QueryWithSubQuery ( )
119
+ {
120
+ ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
121
+ {
122
+ using ( var session = Sfi . OpenSession ( ) )
104
123
{
105
- using ( var s = Sfi . OpenSession ( ) )
106
- {
107
- var query = CreateQueryOverWithJoinAlias ( s )
108
- . Cacheable ( )
109
- . Future ( ) ;
110
-
111
- var list = query . ToList ( ) ;
112
- AssertQueryResult ( list ) ;
113
- }
114
- } ) ;
124
+ var query = CreateCacheableQueryWithSubquery ( session ) ;
125
+
126
+ var list = query . ToList ( ) ;
127
+ AssertQueryResult ( list ) ;
128
+ }
129
+ } ) ;
115
130
}
116
131
117
132
private static void AssertQueryResult ( IList < Person > list )
@@ -126,6 +141,20 @@ private static void AssertQueryResult(IList<Person> list)
126
141
CollectionAssert . AreEquivalent ( person2 . Children . Select ( c => c . Name ) , new [ ] { "BA" , "BB" , "BC" } ) ;
127
142
}
128
143
144
+ private static IFutureEnumerable < Person > CreateCacheableQueryWithSubquery ( ISession session )
145
+ {
146
+ var subQuery = session . Query < Person > ( )
147
+ . WithOptions ( p => p . SetCacheable ( true ) ) ;
148
+
149
+ var query = session . Query < Person > ( )
150
+ . FetchMany ( p => p . Children )
151
+ . Where ( p => subQuery . Contains ( p ) && p . Parent == null )
152
+ . WithOptions ( o => o . SetCacheable ( true ) )
153
+ . ToFuture ( ) ;
154
+
155
+ return query ;
156
+ }
157
+
129
158
private static IQueryOver < Person , Person > CreateQueryOverWithJoinAlias ( ISession session )
130
159
{
131
160
Person childAlias = null ;
0 commit comments