11using NUnit . Framework ;
2+ using NHibernate . Linq ;
23using System . Collections . Generic ;
34using System . Linq ;
45
@@ -10,108 +11,122 @@ public class Fixture : BugTestCase
1011 protected override void OnSetUp ( )
1112 {
1213 Clear2ndLevelCache ( ) ;
13- using ( ISession s = OpenSession ( ) )
14- using ( ITransaction tx = s . BeginTransaction ( ) )
14+ using ( var session = OpenSession ( ) )
15+ using ( var transaction = session . BeginTransaction ( ) )
1516 {
1617 var p1 = new Person ( ) { Name = "A" } ;
1718 var p1c1 = new Person ( ) { Name = "AA" } ;
1819 var p1c2 = new Person ( ) { Name = "AB" } ;
1920 var p1c3 = new Person ( ) { Name = "AC" } ;
2021 p1 . Children = new HashSet < Person > ( new [ ] { p1c1 , p1c2 , p1c3 } ) ;
21- s . Save ( p1 ) ;
22+ session . Save ( p1 ) ;
2223
2324 var p2 = new Person ( ) { Name = "B" } ;
2425 var p2c1 = new Person ( ) { Name = "BA" } ;
2526 var p2c2 = new Person ( ) { Name = "BB" } ;
2627 var p2c3 = new Person ( ) { Name = "BC" } ;
2728 p2 . Children = new HashSet < Person > ( new [ ] { p2c1 , p2c2 , p2c3 } ) ;
28- s . Save ( p2 ) ;
29+ session . Save ( p2 ) ;
2930
30- tx . Commit ( ) ;
31+ transaction . Commit ( ) ;
3132 }
3233 }
3334
3435 protected override void OnTearDown ( )
3536 {
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 ( ) )
3939 {
40- s . Delete ( "from Person" ) ;
41- tx . Commit ( ) ;
40+ session . Delete ( "from Person" ) ;
41+ transaction . Commit ( ) ;
4242 }
4343 }
4444
4545 [ Test ]
4646 public void CacheableMulticriteria_QueryOverWithAliasedJoinQueryOver ( )
4747 {
4848 ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
49+ {
50+ using ( var session = Sfi . OpenSession ( ) )
4951 {
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+ } ) ;
6262 }
6363
6464 [ Test ]
6565 public void CacheableFuture_QueryOverWithAliasedJoinQueryOver ( )
6666 {
6767 ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
68+ {
69+ using ( var s = Sfi . OpenSession ( ) )
6870 {
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+ } ) ;
7979 }
8080
8181 [ Test ]
8282 public void CacheableMulticriteria_QueryOverWithJoinAlias ( )
8383 {
8484 ExecuteActionTwiceSecondRunEnsureNoSqlExecuted ( ( ) =>
85+ {
86+ using ( var s = Sfi . OpenSession ( ) )
8587 {
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+ } ) ;
9898 }
9999
100100 [ Test ]
101101 public void CacheableFuture_QueryOverWithJoinAlias ( )
102102 {
103103 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 ( ) )
104123 {
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+ } ) ;
115130 }
116131
117132 private static void AssertQueryResult ( IList < Person > list )
@@ -126,6 +141,20 @@ private static void AssertQueryResult(IList<Person> list)
126141 CollectionAssert . AreEquivalent ( person2 . Children . Select ( c => c . Name ) , new [ ] { "BA" , "BB" , "BC" } ) ;
127142 }
128143
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+
129158 private static IQueryOver < Person , Person > CreateQueryOverWithJoinAlias ( ISession session )
130159 {
131160 Person childAlias = null ;
0 commit comments