Skip to content

Commit 1336e01

Browse files
committed
NH-3973 - Remove dependency on passed enabledFilters parameter from SubqueryExpression.ToSqlString method
1 parent 828e31a commit 1336e01

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/NHibernate/Criterion/SubqueryExpression.cs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using NHibernate.Persister.Entity;
88
using NHibernate.SqlCommand;
99
using NHibernate.Type;
10+
using NHibernate.Util;
1011

1112
namespace NHibernate.Criterion
1213
{
@@ -60,10 +61,9 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
6061

6162
IOuterJoinLoadable persister = (IOuterJoinLoadable) factory.GetEntityPersister(criteriaImpl.EntityOrClassName);
6263

63-
//patch to generate joins on subqueries
64-
//stolen from CriteriaLoader
65-
CriteriaJoinWalker walker =
66-
new CriteriaJoinWalker(persister, innerQuery, factory, criteriaImpl, criteriaImpl.EntityOrClassName, enabledFilters);
64+
criteriaImpl.Session = DeriveRootSession(criteria);
65+
66+
var walker = new CriteriaJoinWalker(persister, innerQuery, factory, criteriaImpl, criteriaImpl.EntityOrClassName, criteriaImpl.Session.EnabledFilters);
6767

6868
parameters = innerQuery.GetQueryParameters(); // parameters can be inferred only after initialize the walker
6969

@@ -99,6 +99,7 @@ public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteri
9999
return buf.ToSqlString();
100100
}
101101

102+
102103
public override string ToString()
103104
{
104105
if (prefixOp)
@@ -117,10 +118,22 @@ public override IProjection[] GetProjections()
117118
return null;
118119
}
119120

120-
public ICriteria Criteria
121+
// NH-1146
122+
public ICriteria Criteria => criteriaImpl;
123+
124+
static ISessionImplementor DeriveRootSession(ICriteria criteria)
121125
{
122-
// NH-1146
123-
get { return criteriaImpl; }
126+
while (criteria is CriteriaImpl.Subcriteria subcriteria)
127+
{
128+
criteria = subcriteria.Parent;
129+
}
130+
if (criteria is CriteriaImpl criteriaImpl)
131+
{
132+
return criteriaImpl.Session;
133+
}
134+
// could happen for custom Criteria impls. Not likely, but...
135+
// for long term solution, see HHH-3514
136+
return null;
124137
}
125138
}
126139
}

0 commit comments

Comments
 (0)