forked from nhibernate/nhibernate-core
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSubQueryTest.cs
59 lines (54 loc) · 1.75 KB
/
SubQueryTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using NHibernate.Cfg.MappingSchema;
using NHibernate.Mapping.ByCode;
using NUnit.Framework;
namespace NHibernate.Test.Hql
{
[TestFixture]
public class SubQueryTest : TestCaseMappingByCode
{
protected override HbmMapping GetMappings()
{
var mapper = new ModelMapper();
mapper.Class<Root>(
rc =>
{
rc.Id(x => x.Id, m => m.Generator(Generators.Native));
rc.Property(x => x.RootName);
rc.ManyToOne(x => x.Branch);
});
mapper.Class<Branch>(
rc =>
{
rc.Id(x => x.Id, m => m.Generator(Generators.Native));
rc.Property(x => x.BranchName);
rc.Bag(x => x.Leafs, cm => cm.Cascade(Mapping.ByCode.Cascade.All), x => x.OneToMany());
});
mapper.Class<Leaf>(
rc =>
{
rc.Id(x => x.Id, m => m.Generator(Generators.Native));
rc.Property(x => x.LeafName);
});
return mapper.CompileMappingForAllExplicitlyAddedEntities();
}
protected override bool AppliesTo(Dialect.Dialect dialect)
{
return dialect.SupportsScalarSubSelects;
}
[TestCase("SELECT CASE WHEN l.id IS NOT NULL THEN (SELECT COUNT(r.id) FROM Root r) ELSE 0 END FROM Leaf l")]
[TestCase("SELECT CASE WHEN (SELECT COUNT(r.id) FROM Root r) > 1 THEN 1 ELSE 0 END FROM Leaf l")]
[TestCase("SELECT CASE WHEN l.id > 1 THEN 1 ELSE (SELECT COUNT(r.id) FROM Root r) END FROM Leaf l")]
[TestCase("SELECT CASE (SELECT COUNT(r.id) FROM Root r) WHEN 1 THEN 1 ELSE 0 END FROM Leaf l")]
[TestCase("SELECT CASE l.id WHEN (SELECT COUNT(r.id) FROM Root r) THEN 1 ELSE 0 END FROM Leaf l")]
public void TestSubQuery(string query)
{
using (var session = OpenSession())
using (var transaction = session.BeginTransaction())
{
// Simple syntax check
session.CreateQuery(query).List();
transaction.Commit();
}
}
}
}