|
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.
|