/// <summary>
		/// Execute an SQL query and attempt to instantiate instances of the class mapped by the given
		/// persister from each row of the <c>DataReader</c>. If an object is supplied, will attempt to
		/// initialize that object. If a collection is supplied, attempt to initialize that collection.
		/// </summary>
		/// <param name="session"></param>
		/// <param name="queryParameters"></param>
		/// <param name="optionalObject"></param>
		/// <param name="optionalId"></param>
		/// <param name="optionalCollectionKeys"></param>
		/// <param name="returnProxies"></param>
		/// <returns></returns>
		private IList DoQueryAndInitializeNonLazyCollections(
			ISessionImplementor session,
			QueryParameters queryParameters,
			object optionalObject,
			object optionalId,
			object[ ] optionalCollectionKeys,
			bool returnProxies )
		{
			session.BeforeLoad();
			IList result;
			try
			{
				result = DoQuery( session, queryParameters, optionalObject, optionalId, optionalCollectionKeys, returnProxies );
			}
			finally
			{
				session.AfterLoad();
			}
			session.InitializeNonLazyCollections();

			return result;
		}
		protected object LoadSingleRow(
			IDataReader resultSet,
			ISessionImplementor session,
			QueryParameters queryParameters,
			bool returnProxies )
		{
			int cols = Persisters.Length;
			IList hydratedObjects = cols == 0 ? null : new ArrayList();
			object result = GetRowFromResultSet(
				resultSet,
				session,
				queryParameters,
				hydratedObjects,
				null,
				null,
				new Key[cols],
				returnProxies );

			InitializeEntitiesAndCollections( hydratedObjects, resultSet, session );
			session.InitializeNonLazyCollections();
			return result;
		}
		/// <summary>
		/// Loads a single row from the result set.  This is the processing used from the
		/// ScrollableResults where no collection fetches were encountered.
		/// </summary>
		/// <param name="resultSet">The result set from which to do the load.</param>
		/// <param name="session">The session from which the request originated.</param>
		/// <param name="queryParameters">The query parameters specified by the user.</param>
		/// <param name="returnProxies">Should proxies be generated</param>
		/// <returns>The loaded "row".</returns>
		/// <exception cref="HibernateException" />
		protected object LoadSingleRow(
			IDataReader resultSet,
			ISessionImplementor session,
			QueryParameters queryParameters,
			bool returnProxies)
		{
			int entitySpan = EntityPersisters.Length;
			IList hydratedObjects = entitySpan == 0 ?
			                        null : new ArrayList(entitySpan);

			object result;
			try
			{
				result = GetRowFromResultSet(
					resultSet,
					session,
					queryParameters,
					GetLockModes(queryParameters.LockModes),
					null,
					hydratedObjects,
					new EntityKey[entitySpan],
					returnProxies);
			}
			catch (HibernateException)
			{
				throw; // Don't call Convert on HibernateExceptions
			}
			catch (Exception sqle)
			{
				throw ADOExceptionHelper.Convert(sqle, "could not read next row of results", SqlString,
				                                 queryParameters.PositionalParameterValues, queryParameters.NamedParameters);
			}

			InitializeEntitiesAndCollections(
				hydratedObjects,
				resultSet,
				session);
			session.InitializeNonLazyCollections();
			return result;
		}