Skip to content

Commit 6ccab2a

Browse files
committed
Tests using Criteria and QueryOver for NH-3848
1 parent f830f9c commit 6ccab2a

File tree

6 files changed

+459
-0
lines changed

6 files changed

+459
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System.Collections.Generic;
2+
using NHibernate.Criterion;
3+
using NHibernate.SqlCommand;
4+
using NHibernate.Transform;
5+
6+
namespace NHibernate.Test.NHSpecificTest.NH3848
7+
{
8+
public class CriteriaTestFixture : TestFixture
9+
{
10+
protected override IList<Customer> GetCustomersWithFetchedOrdersWithoutRestrictions(ISession session)
11+
{
12+
return session.CreateCriteria<Customer>()
13+
.CreateAlias("Orders", "order", JoinType.LeftOuterJoin)
14+
.SetResultTransformer(new DistinctRootEntityResultTransformer())
15+
.List<Customer>();
16+
}
17+
18+
protected override IList<Customer> GetCustomersWithOrdersEagerLoaded(ISession session)
19+
{
20+
return session.CreateCriteria<Customer>()
21+
.SetFetchMode("Orders", FetchMode.Eager)
22+
.SetResultTransformer(new DistinctRootEntityResultTransformer())
23+
.List<Customer>();
24+
}
25+
26+
protected override IList<Customer> GetCustomersByOrderNumberUsingOnClause(ISession session, int orderNumber)
27+
{
28+
return session.CreateCriteria<Customer>()
29+
.CreateAlias("Orders", "order", JoinType.LeftOuterJoin, Restrictions.Eq("Number", orderNumber))
30+
.List<Customer>();
31+
}
32+
33+
protected override IList<Customer> GetCustomersByOrderNumberUsingWhereClause(ISession session, int orderNumber)
34+
{
35+
return session.CreateCriteria<Customer>()
36+
.CreateCriteria("Orders", "Order", JoinType.LeftOuterJoin)
37+
.Add(Restrictions.Eq("Number", orderNumber))
38+
.SetResultTransformer(new DistinctRootEntityResultTransformer())
39+
.List<Customer>();
40+
}
41+
42+
protected override IList<Customer> GetCustomersByNameUsingWhereClause(ISession session, string customerName)
43+
{
44+
return session.CreateCriteria<Customer>()
45+
.CreateAlias("Orders", "order", JoinType.LeftOuterJoin)
46+
.Add(Restrictions.Eq("Name", "First Customer"))
47+
.SetResultTransformer(new DistinctRootEntityResultTransformer())
48+
.List<Customer>();
49+
}
50+
51+
protected override IList<Customer> GetCustomersByOrderNumberUsingSubqueriesAndByNameUsingWhereClause(ISession session, int orderNumber, string customerName)
52+
{
53+
var detachedCriteria = DetachedCriteria.For<Customer>()
54+
.CreateAlias("Orders", "order", JoinType.LeftOuterJoin, Restrictions.Eq("Number", orderNumber))
55+
.SetProjection(Projections.Id());
56+
57+
return session.CreateCriteria<Customer>()
58+
.CreateAlias("Orders", "order1", JoinType.LeftOuterJoin)
59+
.Add(Subqueries.PropertyIn("Id",detachedCriteria))
60+
.Add(Restrictions.Eq("Name", customerName))
61+
.SetResultTransformer(new DistinctRootEntityResultTransformer())
62+
.List<Customer>();
63+
}
64+
65+
protected override IList<Customer> GetAllCustomers(ISession session)
66+
{
67+
return session.CreateCriteria<Customer>().List<Customer>();
68+
}
69+
}
70+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using System.Collections.Generic;
3+
4+
namespace NHibernate.Test.NHSpecificTest.NH3848
5+
{
6+
public class Customer
7+
{
8+
public virtual Guid Id { get; set; }
9+
public virtual ISet<Order> Orders { get; set; }
10+
public virtual string Name { get; set; }
11+
12+
public Customer()
13+
{
14+
Orders = new HashSet<Order>();
15+
}
16+
17+
public virtual void AddOrder(Order order)
18+
{
19+
Orders.Add(order);
20+
order.Customer = this;
21+
}
22+
}
23+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace NHibernate.Test.NHSpecificTest.NH3848
4+
{
5+
public class Order
6+
{
7+
public virtual Guid Id { get; set; }
8+
public virtual int Number { get; set; }
9+
public virtual Customer Customer { get; set; }
10+
}
11+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using System.Collections.Generic;
2+
using NHibernate.Criterion;
3+
using NHibernate.SqlCommand;
4+
using NHibernate.Transform;
5+
6+
namespace NHibernate.Test.NHSpecificTest.NH3848
7+
{
8+
public class QueryOverTestFixture : TestFixture
9+
{
10+
protected override IList<Customer> GetCustomersWithFetchedOrdersWithoutRestrictions(ISession session)
11+
{
12+
Order ordersAlias = null;
13+
return session.QueryOver<Customer>()
14+
.JoinAlias(n => n.Orders,
15+
() => ordersAlias,
16+
JoinType.LeftOuterJoin)
17+
.TransformUsing(new DistinctRootEntityResultTransformer())
18+
.List();
19+
}
20+
21+
protected override IList<Customer> GetCustomersWithOrdersEagerLoaded(ISession session)
22+
{
23+
return session.QueryOver<Customer>()
24+
.Fetch(n => n.Orders).Eager
25+
.TransformUsing(new DistinctRootEntityResultTransformer())
26+
.List();
27+
}
28+
29+
protected override IList<Customer> GetCustomersByOrderNumberUsingOnClause(ISession session, int orderNumber)
30+
{
31+
Order ordersAlias = null;
32+
return session.QueryOver<Customer>()
33+
.JoinAlias(n => n.Orders,
34+
() => ordersAlias,
35+
JoinType.LeftOuterJoin,
36+
Restrictions.Eq("Number", orderNumber))
37+
.List();
38+
}
39+
40+
protected override IList<Customer> GetCustomersByOrderNumberUsingWhereClause(ISession session, int orderNumber)
41+
{
42+
Order ordersAlias = null;
43+
return session.QueryOver<Customer>()
44+
.JoinQueryOver(n => n.Orders, () => ordersAlias, JoinType.LeftOuterJoin)
45+
.Where(Restrictions.Eq("Number", orderNumber))
46+
.List();
47+
}
48+
49+
protected override IList<Customer> GetCustomersByNameUsingWhereClause(ISession session, string customerName)
50+
{
51+
Order ordersAlias = null;
52+
return session.QueryOver<Customer>()
53+
.JoinAlias(n => n.Orders,
54+
() => ordersAlias,
55+
JoinType.LeftOuterJoin
56+
)
57+
.Where(Restrictions.Eq("Name", customerName))
58+
.TransformUsing(new DistinctRootEntityResultTransformer())
59+
.List();
60+
61+
}
62+
63+
protected override IList<Customer> GetCustomersByOrderNumberUsingSubqueriesAndByNameUsingWhereClause(ISession session, int orderNumber, string customerName)
64+
{
65+
Order ordersAlias = null;
66+
Order ordersAlias2 = null;
67+
var subquery = QueryOver.Of<Customer>()
68+
.JoinAlias(n => n.Orders, () => ordersAlias, JoinType.LeftOuterJoin, Restrictions.Eq("Number", orderNumber))
69+
.Select(n => n.Id);
70+
71+
return session.QueryOver<Customer>()
72+
.JoinAlias(n => n.Orders, () => ordersAlias2, JoinType.LeftOuterJoin)
73+
.WithSubquery.WhereProperty(n => n.Id).In(subquery)
74+
.Where(Restrictions.Eq("Name", customerName))
75+
.TransformUsing(new DistinctRootEntityResultTransformer())
76+
.List();
77+
}
78+
79+
protected override IList<Customer> GetAllCustomers(ISession session)
80+
{
81+
return session.QueryOver<Customer>().List();
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)