From 351061eada9337e1c43b73ff1e4703aa56da2cee Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Thu, 29 Jun 2023 12:27:31 +0300 Subject: [PATCH 1/2] Apply fromFragment processing only when required in ProcessDynamicFilterParameters --- .../Hql/Ast/ANTLR/Util/JoinProcessor.cs | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs b/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs index cef3d920fca..6413ef44131 100644 --- a/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs +++ b/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs @@ -163,13 +163,7 @@ private void AddJoinNodes(IRestrictableStatement query, JoinSequence join, FromE // If there is a FROM fragment and the FROM element is an explicit, then add the from part. if ( fromElement.UseFromFragment /*&& StringHelper.isNotEmpty( frag )*/ ) { - SqlString fromFragment = ProcessFromFragment( frag, join ).Trim(); - if ( log.IsDebugEnabled() ) - { - log.Debug("Using FROM fragment [{0}]", fromFragment); - } - - ProcessDynamicFilterParameters(fromFragment,fromElement,_walker); + ProcessDynamicFilterParameters(frag, fromElement, _walker, true); } _syntheticAndFactory.AddWhereFragment( @@ -181,7 +175,7 @@ private void AddJoinNodes(IRestrictableStatement query, JoinSequence join, FromE ); } - private static SqlString ProcessFromFragment(SqlString frag, JoinSequence join) + private static SqlString ProcessFromFragment(SqlString frag) { SqlString fromFragment = frag.Trim(); // 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) public static void ProcessDynamicFilterParameters( SqlString sqlFragment, IParameterContainer container, - HqlSqlWalker walker) + HqlSqlWalker walker) + { + ProcessDynamicFilterParameters(sqlFragment, container, walker, false); + } + + private static void ProcessDynamicFilterParameters(SqlString sqlFragment, IParameterContainer container, HqlSqlWalker walker, bool fromFragment) { if ( walker.EnabledFilters.Count == 0 && ( ! HasDynamicFilterParam( sqlFragment ) ) @@ -203,6 +202,14 @@ public static void ProcessDynamicFilterParameters( return; } + if (fromFragment) + { + sqlFragment = ProcessFromFragment(sqlFragment); + if (log.IsDebugEnabled()) + { + log.Debug("Using FROM fragment [{0}]", sqlFragment); + } + } container.Text = sqlFragment.ToString(); // dynamic-filters are processed altogether by Loader } From d74758c128dbaa85f4ccb04448cb247f17923ea0 Mon Sep 17 00:00:00 2001 From: Roman Artiukhin Date: Thu, 29 Jun 2023 13:57:11 +0300 Subject: [PATCH 2/2] Added Trim back just in case (though tests are fine without it) --- src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs b/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs index 6413ef44131..aca98a45d4f 100644 --- a/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs +++ b/src/NHibernate/Hql/Ast/ANTLR/Util/JoinProcessor.cs @@ -204,7 +204,7 @@ private static void ProcessDynamicFilterParameters(SqlString sqlFragment, IParam if (fromFragment) { - sqlFragment = ProcessFromFragment(sqlFragment); + sqlFragment = ProcessFromFragment(sqlFragment).Trim(); if (log.IsDebugEnabled()) { log.Debug("Using FROM fragment [{0}]", sqlFragment);