Skip to content

Commit 9ca371f

Browse files
committed
Fix more tests
# Conflicts: # src/NHibernate/Linq/Visitors/VisitorUtil.cs
1 parent a15d09b commit 9ca371f

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

src/NHibernate/Linq/ReWriters/AddJoinsReWriter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ public override void VisitWhereClause(WhereClause whereClause, QueryModel queryM
5454
_whereJoinDetector.Transform(whereClause);
5555
}
5656

57+
public override void VisitNhHavingClause(NhHavingClause havingClause, QueryModel queryModel, int index)
58+
{
59+
_whereJoinDetector.Transform(havingClause);
60+
}
61+
5762
public bool IsEntity(System.Type type)
5863
{
5964
return _sessionFactory.GetImplementors(type.FullName).Any();

src/NHibernate/Linq/Visitors/QuerySourceLocator.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Remotion.Linq;
1+
using NHibernate.Linq.Clauses;
2+
using Remotion.Linq;
23
using Remotion.Linq.Clauses;
34
using Remotion.Linq.Collections;
45

@@ -37,6 +38,20 @@ public override void VisitAdditionalFromClause(AdditionalFromClause fromClause,
3738
base.VisitAdditionalFromClause(fromClause, queryModel, index);
3839
}
3940

41+
public override void VisitNhJoinClause(NhJoinClause joinClause, QueryModel queryModel, int index)
42+
{
43+
if (_type.IsAssignableFrom(joinClause.ItemType))
44+
{
45+
if (_querySource == null)
46+
{
47+
_querySource = joinClause;
48+
return;
49+
}
50+
}
51+
52+
base.VisitNhJoinClause(joinClause, queryModel, index);
53+
}
54+
4055
public override void VisitMainFromClause(MainFromClause fromClause, QueryModel queryModel)
4156
{
4257
if (_type.IsAssignableFrom(fromClause.ItemType))

src/NHibernate/Linq/Visitors/WhereJoinDetector.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Linq.Expressions;
5+
using NHibernate.Linq.Clauses;
56
using NHibernate.Linq.ReWriters;
67
using Remotion.Linq.Clauses;
78
using Remotion.Linq.Clauses.Expressions;
@@ -92,6 +93,22 @@ public void Transform(WhereClause whereClause)
9293
}
9394
}
9495

96+
public void Transform(NhHavingClause whereClause)
97+
{
98+
whereClause.TransformExpressions(Visit);
99+
100+
var values = _values.Pop();
101+
102+
foreach (var memberExpression in values.MemberExpressions)
103+
{
104+
// If outer join can never produce true, we can safely inner join.
105+
if (!values.GetValues(memberExpression).Contains(true))
106+
{
107+
_joiner.MakeInnerIfJoined(memberExpression);
108+
}
109+
}
110+
}
111+
95112
public override Expression Visit(Expression expression)
96113
{
97114
if (expression == null)

0 commit comments

Comments
 (0)