Skip to content

Commit 9259f4e

Browse files
committed
Add CacheableFuture_QueryWithSubQuery test
1 parent 39cd959 commit 9259f4e

File tree

1 file changed

+83
-54
lines changed
  • src/NHibernate.Test/NHSpecificTest/NH3864

1 file changed

+83
-54
lines changed

src/NHibernate.Test/NHSpecificTest/NH3864/Fixture.cs

Lines changed: 83 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NUnit.Framework;
2+
using NHibernate.Linq;
23
using System.Collections.Generic;
34
using 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

Comments
 (0)