|
From: <fab...@us...> - 2011-06-17 13:48:11
|
Revision: 5943
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5943&view=rev
Author: fabiomaulo
Date: 2011-06-17 13:48:05 +0000 (Fri, 17 Jun 2011)
Log Message:
-----------
EntityLoader with parameter specifications
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Loader/Entity/AbstractEntityLoader.cs
trunk/nhibernate/src/NHibernate/Loader/OuterJoinLoader.cs
Modified: trunk/nhibernate/src/NHibernate/Loader/Entity/AbstractEntityLoader.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/Entity/AbstractEntityLoader.cs 2011-06-17 12:08:27 UTC (rev 5942)
+++ trunk/nhibernate/src/NHibernate/Loader/Entity/AbstractEntityLoader.cs 2011-06-17 13:48:05 UTC (rev 5943)
@@ -1,9 +1,11 @@
using System.Collections;
using System.Collections.Generic;
using System.Data;
-
+using System.Linq;
using NHibernate.Engine;
+using NHibernate.Param;
using NHibernate.Persister.Entity;
+using NHibernate.SqlCommand;
using NHibernate.Transform;
using NHibernate.Type;
@@ -16,13 +18,13 @@
{
protected static readonly IInternalLogger log = LoggerProvider.LoggerFor(typeof (AbstractEntityLoader));
protected readonly IOuterJoinLoadable persister;
- protected readonly IType uniqueKeyType;
protected readonly string entityName;
+ private IParameterSpecification[] parametersSpecifications;
- public AbstractEntityLoader(IOuterJoinLoadable persister, IType uniqueKeyType, ISessionFactoryImplementor factory,
+ protected AbstractEntityLoader(IOuterJoinLoadable persister, IType uniqueKeyType, ISessionFactoryImplementor factory,
IDictionary<string, IFilter> enabledFilters) : base(factory, enabledFilters)
{
- this.uniqueKeyType = uniqueKeyType;
+ UniqueKeyType = uniqueKeyType;
entityName = persister.EntityName;
this.persister = persister;
}
@@ -39,7 +41,7 @@
protected virtual object Load(ISessionImplementor session, object id, object optionalObject, object optionalId)
{
- IList list = LoadEntity(session, id, uniqueKeyType, optionalObject, entityName, optionalId, persister);
+ IList list = LoadEntity(session, id, UniqueKeyType, optionalObject, entityName, optionalId, persister);
if (list.Count == 1)
{
@@ -69,5 +71,36 @@
{
return row[row.Length - 1];
}
+
+ protected IType UniqueKeyType { get; private set; }
+
+ protected override void InitFromWalker(JoinWalker walker)
+ {
+ base.InitFromWalker(walker);
+ parametersSpecifications = CreateParameterSpecificationsAndAssignBackTrack(SqlString.GetParameters()).ToArray();
+ }
+
+ private IEnumerable<IParameterSpecification> CreateParameterSpecificationsAndAssignBackTrack(IEnumerable<Parameter> sqlPatameters)
+ {
+ var specifications = new List<IParameterSpecification>();
+ int position = 0;
+ var parameters = sqlPatameters.ToArray();
+ for (var sqlParameterPos = 0; sqlParameterPos < parameters.Length;)
+ {
+ var specification = new PositionalParameterSpecification(1, 0, position++) {ExpectedType = UniqueKeyType};
+ var paramTrackers = specification.GetIdsForBackTrack(Factory);
+ foreach (var paramTracker in paramTrackers)
+ {
+ parameters[sqlParameterPos++].BackTrack = paramTracker;
+ }
+ specifications.Add(specification);
+ }
+ return specifications;
+ }
+
+ protected override IEnumerable<IParameterSpecification> GetParameterSpecifications(QueryParameters queryParameters, ISessionFactoryImplementor sessionFactory)
+ {
+ return parametersSpecifications;
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Loader/OuterJoinLoader.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Loader/OuterJoinLoader.cs 2011-06-17 12:08:27 UTC (rev 5942)
+++ trunk/nhibernate/src/NHibernate/Loader/OuterJoinLoader.cs 2011-06-17 13:48:05 UTC (rev 5943)
@@ -98,7 +98,7 @@
get { return collectionPersisters; }
}
- protected void InitFromWalker(JoinWalker walker)
+ protected virtual void InitFromWalker(JoinWalker walker)
{
persisters = walker.Persisters;
collectionPersisters = walker.CollectionPersisters;
@@ -108,7 +108,7 @@
collectionSuffixes = walker.CollectionSuffixes;
owners = walker.Owners;
collectionOwners = walker.CollectionOwners;
- sql = walker.SqlString;
+ sql = walker.SqlString.Compact();
aliases = walker.Aliases;
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|