From: <fab...@us...> - 2011-06-05 21:24:36
|
Revision: 5910 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5910&view=rev Author: fabiomaulo Date: 2011-06-05 21:24:29 +0000 (Sun, 05 Jun 2011) Log Message: ----------- Refactoring: IResultSetsCommand using Loader instances instead static methods Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs trunk/nhibernate/src/NHibernate/Loader/Loader.cs Modified: trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs 2011-06-05 20:34:11 UTC (rev 5909) +++ trunk/nhibernate/src/NHibernate/Driver/BasicResultSetsCommand.cs 2011-06-05 21:24:29 UTC (rev 5910) @@ -47,7 +47,7 @@ get { return sqlString; } } - public virtual IDataReader GetReader(QueryParameters[] queryParameters, int? commandTimeout) + public virtual IDataReader GetReader(Loader.Loader[] queryLoaders, QueryParameters[] queryParameters, int? commandTimeout) { SqlType[] sqlTypes = types.ToArray(); var command= batcher.PrepareQueryCommand(CommandType.Text, sqlString, sqlTypes); @@ -57,45 +57,45 @@ } log.Info(command.CommandText); - BindParameters(command, queryParameters); + BindParameters(command, queryLoaders, queryParameters); return new BatcherDataReaderWrapper(batcher, command); } - protected virtual void BindParameters(IDbCommand command, QueryParameters[] queryParameters) + protected virtual void BindParameters(IDbCommand command, Loader.Loader[] queryLoaders, QueryParameters[] queryParameters) { int colIndex = 0; for (int queryIndex = 0; queryIndex < resultSetsCount; queryIndex++) { - int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryParameters[queryIndex], colIndex); - colIndex = BindQueryParameters(command, queryParameters[queryIndex], colIndex + limitParameterSpan); - colIndex += BindLimitParametersLastIfNeccesary(command, queryParameters[queryIndex], colIndex); + int limitParameterSpan = BindLimitParametersFirstIfNeccesary(command, queryLoaders[queryIndex], queryParameters[queryIndex], colIndex); + colIndex = BindQueryParameters(command, queryLoaders[queryIndex], queryParameters[queryIndex], colIndex + limitParameterSpan); + colIndex += BindLimitParametersLastIfNeccesary(command, queryLoaders[queryIndex], queryParameters[queryIndex], colIndex); } } - protected virtual int BindLimitParametersLastIfNeccesary(IDbCommand command, QueryParameters parameter, int colIndex) + protected virtual int BindLimitParametersLastIfNeccesary(IDbCommand command, Loader.Loader queryLoader, QueryParameters parameter, int colIndex) { RowSelection selection = parameter.RowSelection; - if (Loader.Loader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst) + if (queryLoader.UseLimit(selection, dialect) && !dialect.BindLimitParametersFirst) { - return Loader.Loader.BindLimitParameters(command, colIndex, selection, session); + return queryLoader.BindLimitParameters(command, colIndex, selection, session); } return 0; } - protected virtual int BindQueryParameters(IDbCommand command, QueryParameters parameter, int colIndex) + protected virtual int BindQueryParameters(IDbCommand command, Loader.Loader queryLoader, QueryParameters parameter, int colIndex) { colIndex += parameter.BindParameters(command, colIndex, session); return colIndex; } - protected virtual int BindLimitParametersFirstIfNeccesary(IDbCommand command, QueryParameters parameter, int colIndex) + protected virtual int BindLimitParametersFirstIfNeccesary(IDbCommand command, Loader.Loader queryLoader, QueryParameters parameter, int colIndex) { int limitParameterSpan = 0; RowSelection selection = parameter.RowSelection; - if (Loader.Loader.UseLimit(selection, dialect) && dialect.BindLimitParametersFirst) + if (queryLoader.UseLimit(selection, dialect) && dialect.BindLimitParametersFirst) { - limitParameterSpan += Loader.Loader.BindLimitParameters(command, colIndex, selection, session); + limitParameterSpan += queryLoader.BindLimitParameters(command, colIndex, selection, session); } return limitParameterSpan; } Modified: trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs 2011-06-05 20:34:11 UTC (rev 5909) +++ trunk/nhibernate/src/NHibernate/Driver/IResultSetsCommand.cs 2011-06-05 21:24:29 UTC (rev 5910) @@ -10,6 +10,6 @@ int ParametersCount { get; } bool HasQueries { get; } SqlString Sql { get; } - IDataReader GetReader(QueryParameters[] queryParameters, int? commandTimeout); + IDataReader GetReader(Loader.Loader[] queryLoaders, QueryParameters[] queryParameters, int? commandTimeout); } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-06-05 20:34:11 UTC (rev 5909) +++ trunk/nhibernate/src/NHibernate/Impl/MultiCriteriaImpl.cs 2011-06-05 21:24:29 UTC (rev 5910) @@ -200,7 +200,7 @@ try { - using (var reader = resultSetsCommand.GetReader(parameters.ToArray(), null)) + using (var reader = resultSetsCommand.GetReader(loaders.ToArray(), parameters.ToArray(), null)) { ArrayList[] hydratedObjects = new ArrayList[loaders.Count]; List<EntityKey[]>[] subselectResultKeys = new List<EntityKey[]>[loaders.Count]; @@ -218,7 +218,7 @@ createSubselects[i] = loader.IsSubselectLoadingEnabled; subselectResultKeys[i] = createSubselects[i] ? new List<EntityKey[]>() : null; int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue; - if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect)) + if (!dialect.SupportsLimitOffset || !loader.UseLimit(selection, dialect)) { Loader.Loader.Advance(reader, selection); } Modified: trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-06-05 20:34:11 UTC (rev 5909) +++ trunk/nhibernate/src/NHibernate/Impl/MultiQueryImpl.cs 2011-06-05 21:24:29 UTC (rev 5910) @@ -504,7 +504,7 @@ try { - using (var reader = resultSetsCommand.GetReader(Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null)) + using (var reader = resultSetsCommand.GetReader(translators.Select(t=> t.Loader).ToArray(), Parameters.ToArray(), commandTimeout != RowSelection.NoValue ? commandTimeout : (int?)null)) { if (log.IsDebugEnabled) { @@ -527,7 +527,7 @@ hydratedObjects[i] = entitySpan > 0 ? new ArrayList() : null; RowSelection selection = parameter.RowSelection; int maxRows = Loader.Loader.HasMaxRows(selection) ? selection.MaxRows : int.MaxValue; - if (!dialect.SupportsLimitOffset || !Loader.Loader.UseLimit(selection, dialect)) + if (!dialect.SupportsLimitOffset || !translator.Loader.UseLimit(selection, dialect)) { Loader.Loader.Advance(reader, selection); } Modified: trunk/nhibernate/src/NHibernate/Loader/Loader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-05 20:34:11 UTC (rev 5909) +++ trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-05 21:24:29 UTC (rev 5910) @@ -1093,7 +1093,7 @@ /// <param name="selection"></param> /// <param name="dialect"></param> /// <returns></returns> - internal static bool UseLimit(RowSelection selection, Dialect.Dialect dialect) + internal bool UseLimit(RowSelection selection, Dialect.Dialect dialect) { return dialect.SupportsLimit && (HasMaxRows(selection) || HasOffset(selection)); } @@ -1263,7 +1263,7 @@ /// Bind parameters needed by the dialect-specific LIMIT clause /// </summary> /// <returns>The number of parameters bound</returns> - internal static int BindLimitParameters(IDbCommand st, int index, RowSelection selection, ISessionImplementor session) + internal int BindLimitParameters(IDbCommand st, int index, RowSelection selection, ISessionImplementor session) { Dialect.Dialect dialect = session.Factory.Dialect; if (!dialect.SupportsVariableLimit) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |