From: <fab...@us...> - 2011-06-13 12:31:36
|
Revision: 5917 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5917&view=rev Author: fabiomaulo Date: 2011-06-13 12:31:25 +0000 (Mon, 13 Jun 2011) Log Message: ----------- Refactoring: - method renaming - first DRY in QueryLoader Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs trunk/nhibernate/src/NHibernate/Loader/Custom/CustomLoader.cs trunk/nhibernate/src/NHibernate/Loader/Loader.cs trunk/nhibernate/src/NHibernate/Param/ParametersBackTrackExtensions.cs trunk/nhibernate/src/NHibernate/SqlCommand/SqlCommandImpl.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/Loader/QueryLoader.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -436,9 +436,8 @@ return result; } - public override ISqlCommand CreateSqlCommandInfo(QueryParameters queryParameters, ISessionImplementor session) + public override ISqlCommand CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) { - // NOTE: repeated code PrepareQueryCommand // A distinct-copy of parameter specifications collected during query construction var parameterSpecs = new HashSet<IParameterSpecification>(_queryTranslator.CollectedParameterSpecifications); SqlString sqlString = SqlString.Copy(); @@ -456,7 +455,7 @@ // After the last modification to the SqlString we can collect all parameters types. ResetEffectiveExpectedType(parameterSpecs, queryParameters); // <= TODO: remove this method when we can infer the type during the parse - return new SqlCommand.SqlCommandImpl(sqlString, parameterSpecs, queryParameters, session.Factory); + return new SqlCommandImpl(sqlString, parameterSpecs, queryParameters, session.Factory); } /// <summary> @@ -473,31 +472,14 @@ /// <returns>A CommandWrapper wrapping an IDbCommand that is ready to be executed.</returns> protected internal override IDbCommand PrepareQueryCommand(QueryParameters queryParameters, bool scroll, ISessionImplementor session) { - // NH: In this QueryLoader we can know better all parameters used so we can simplify the IDbCommand construction - // NH: would be very useful if we can do the same with Criteria. This method works just for HQL and LINQ. - - // A distinct-copy of parameter specifications collected during query construction - var parameterSpecs = new HashSet<IParameterSpecification>(_queryTranslator.CollectedParameterSpecifications); - SqlString sqlString = SqlString.Copy(); - - // dynamic-filter parameters: during the HQL->SQL parsing, filters can be added as SQL_TOKEN/string and the SqlGenerator will not find it - sqlString = ExpandDynamicFilterParameters(sqlString, parameterSpecs, session); - AdjustQueryParametersForSubSelectFetching(sqlString, parameterSpecs, session, queryParameters); // NOTE: see TODO below - - sqlString = AddLimitsParametersIfNeeded(sqlString, parameterSpecs, queryParameters, session); - // TODO: for sub-select fetching we have to try to assign the QueryParameter.ProcessedSQL here (with limits) but only after use IParameterSpecification for any kind of queries - - // The PreprocessSQL method can modify the SqlString but should never add parameters (or we have to override it) - sqlString = PreprocessSQL(sqlString, queryParameters, session.Factory.Dialect); - - // After the last modification to the SqlString we can collect all parameters types. - ResetEffectiveExpectedType(parameterSpecs, queryParameters); // <= TODO: remove this method when we can infer the type during the parse - var sqlQueryParametersList = sqlString.GetParameters().ToList(); - SqlType[] parameterTypes = parameterSpecs.GetQueryParameterTypes(sqlQueryParametersList, session.Factory); + var sqlCommand = (SqlCommandImpl)CreateSqlCommand(queryParameters, session); + var parameterSpecs = sqlCommand.Specifications; + var sqlString = sqlCommand.Query; + var sqlQueryParametersList = sqlCommand.SqlQueryParametersList; parameterSpecs.SetQueryParameterLocations(sqlQueryParametersList, session.Factory); - IDbCommand command = session.Batcher.PrepareQueryCommand(CommandType.Text, sqlString, parameterTypes); + IDbCommand command = session.Batcher.PrepareQueryCommand(CommandType.Text, sqlString, sqlCommand.ParameterTypes); try { @@ -507,7 +489,7 @@ command.CommandTimeout = selection.Timeout; } - BindParametersValues(command, sqlQueryParametersList, parameterSpecs, queryParameters, session); + sqlCommand.Bind(command, sqlQueryParametersList, 0, session); session.Batcher.ExpandQueryParameters(command, sqlString); } @@ -678,21 +660,5 @@ parameterSpecification.SetEffectiveType(queryParameters); } } - - /// <summary> - /// Bind all parameters values. - /// </summary> - /// <param name="command">The command where bind each value.</param> - /// <param name="sqlQueryParametersList">The list of Sql query parameter in the exact sequence they are present in the query.</param> - /// <param name="parameterSpecs">All parameter-specifications collected during query construction.</param> - /// <param name="queryParameters">The encapsulation of the parameter values to be bound.</param> - /// <param name="session">The session from where execute the query.</param> - private void BindParametersValues(IDbCommand command, IList<Parameter> sqlQueryParametersList, IEnumerable<IParameterSpecification> parameterSpecs, QueryParameters queryParameters, ISessionImplementor session) - { - foreach (var parameterSpecification in parameterSpecs) - { - parameterSpecification.Bind(command, sqlQueryParametersList, queryParameters, session); - } - } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -183,7 +183,7 @@ translators.Add(translator); QueryParameters queryParameters = translator.GetQueryParameters(); parameters.Add(queryParameters); - ISqlCommand singleCommand = loader.CreateSqlCommandInfo(queryParameters, session); + ISqlCommand singleCommand = loader.CreateSqlCommand(queryParameters, session); resultSetsCommand.Append(singleCommand); } } Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -640,7 +640,7 @@ { translators.Add(translator); parameters.Add(queryParameters); - ISqlCommand singleCommand = translator.Loader.CreateSqlCommandInfo(queryParameters, session); + ISqlCommand singleCommand = translator.Loader.CreateSqlCommand(queryParameters, session); resultSetsCommand.Append(singleCommand); } } Modified: trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Loader/Criteria/CriteriaLoader.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -185,7 +185,7 @@ return customResultTransformer.TransformList(results); } - public override ISqlCommand CreateSqlCommandInfo(QueryParameters queryParameters, ISessionImplementor session) + public override ISqlCommand CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) { // NOTE: repeated code PrepareQueryCommand // A distinct-copy of parameter specifications collected during query construction Modified: trunk/nhibernate/src/NHibernate/Loader/Custom/CustomLoader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Custom/CustomLoader.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Loader/Custom/CustomLoader.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -348,7 +348,7 @@ transformerAliases = aliases.ToArray(); } - public override ISqlCommand CreateSqlCommandInfo(QueryParameters queryParameters, ISessionImplementor session) + public override ISqlCommand CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) { if(parametersSpecifications == null) { Modified: trunk/nhibernate/src/NHibernate/Loader/Loader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -1785,7 +1785,7 @@ return new SqlCommandInfo(sqlString, sqlTypes); } - public virtual ISqlCommand CreateSqlCommandInfo(QueryParameters queryParameters, ISessionImplementor session) + public virtual ISqlCommand CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) { throw new NotSupportedException("This loader does not support extraction of single command."); } Modified: trunk/nhibernate/src/NHibernate/Param/ParametersBackTrackExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/ParametersBackTrackExtensions.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/Param/ParametersBackTrackExtensions.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -20,7 +20,7 @@ } } - public static SqlType[] GetQueryParameterTypes(this ICollection<IParameterSpecification> parameterSpecs, List<Parameter> sqlQueryParametersList, ISessionFactoryImplementor factory) + public static SqlType[] GetQueryParameterTypes(this IEnumerable<IParameterSpecification> parameterSpecs, List<Parameter> sqlQueryParametersList, ISessionFactoryImplementor factory) { // due to IType.NullSafeSet(System.Data.IDbCommand , object, int, ISessionImplementor) the SqlType[] is supposed to be in a certain sequence. // here we can check and evetually Assert (see AssertionFailure) the supposition because each individual Parameter has its BackTrackId. @@ -44,7 +44,7 @@ /// <param name="parameterSpecs"></param> /// <param name="sqlQueryParametersList"></param> /// <param name="factory"></param> - public static void SetQueryParameterLocations(this ICollection<IParameterSpecification> parameterSpecs, List<Parameter> sqlQueryParametersList, ISessionFactoryImplementor factory) + public static void SetQueryParameterLocations(this IEnumerable<IParameterSpecification> parameterSpecs, List<Parameter> sqlQueryParametersList, ISessionFactoryImplementor factory) { // due to IType.NullSafeSet(System.Data.IDbCommand , object, int, ISessionImplementor) the SqlType[] is supposed to be in a certain sequence. // this mean that found the first location of a parameter for the IType span, the others are in secuence Modified: trunk/nhibernate/src/NHibernate/SqlCommand/SqlCommandImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/SqlCommand/SqlCommandImpl.cs 2011-06-12 22:10:16 UTC (rev 5916) +++ trunk/nhibernate/src/NHibernate/SqlCommand/SqlCommandImpl.cs 2011-06-13 12:31:25 UTC (rev 5917) @@ -40,7 +40,7 @@ this.factory = factory; } - private List<Parameter> SqlQueryParametersList + public List<Parameter> SqlQueryParametersList { get { return sqlQueryParametersList ?? (sqlQueryParametersList = query.GetParameters().ToList()); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |