Skip to content

Commit 4d29463

Browse files
authored
Apply fromFragment processing only when required in ProcessDynamicFilterParameters (nhibernate#3341)
1 parent 2917465 commit 4d29463

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs

+16-9
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,7 @@ private void AddJoinNodes(IRestrictableStatement query, JoinSequence join, FromE
163163
// If there is a FROM fragment and the FROM element is an explicit, then add the from part.
164164
if ( fromElement.UseFromFragment /*&& StringHelper.isNotEmpty( frag )*/ )
165165
{
166-
SqlString fromFragment = ProcessFromFragment( frag, join ).Trim();
167-
if ( log.IsDebugEnabled() )
168-
{
169-
log.Debug("Using FROM fragment [{0}]", fromFragment);
170-
}
171-
172-
ProcessDynamicFilterParameters(fromFragment,fromElement,_walker);
166+
ProcessDynamicFilterParameters(frag, fromElement, _walker, true);
173167
}
174168

175169
_syntheticAndFactory.AddWhereFragment(
@@ -181,7 +175,7 @@ private void AddJoinNodes(IRestrictableStatement query, JoinSequence join, FromE
181175
);
182176
}
183177

184-
private static SqlString ProcessFromFragment(SqlString frag, JoinSequence join)
178+
private static SqlString ProcessFromFragment(SqlString frag)
185179
{
186180
SqlString fromFragment = frag.Trim();
187181
// The FROM fragment will probably begin with ', '. Remove this if it is present.
@@ -194,7 +188,12 @@ private static SqlString ProcessFromFragment(SqlString frag, JoinSequence join)
194188
public static void ProcessDynamicFilterParameters(
195189
SqlString sqlFragment,
196190
IParameterContainer container,
197-
HqlSqlWalker walker)
191+
HqlSqlWalker walker)
192+
{
193+
ProcessDynamicFilterParameters(sqlFragment, container, walker, false);
194+
}
195+
196+
private static void ProcessDynamicFilterParameters(SqlString sqlFragment, IParameterContainer container, HqlSqlWalker walker, bool fromFragment)
198197
{
199198
if ( walker.EnabledFilters.Count == 0
200199
&& ( ! HasDynamicFilterParam( sqlFragment ) )
@@ -203,6 +202,14 @@ public static void ProcessDynamicFilterParameters(
203202
return;
204203
}
205204

205+
if (fromFragment)
206+
{
207+
sqlFragment = ProcessFromFragment(sqlFragment).Trim();
208+
if (log.IsDebugEnabled())
209+
{
210+
log.Debug("Using FROM fragment [{0}]", sqlFragment);
211+
}
212+
}
206213
container.Text = sqlFragment.ToString(); // dynamic-filters are processed altogether by Loader
207214
}
208215

0 commit comments

Comments
 (0)