From: <fab...@us...> - 2011-05-23 12:28:55
|
Revision: 5859 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5859&view=rev Author: fabiomaulo Date: 2011-05-23 12:28:49 +0000 (Mon, 23 May 2011) Log Message: ----------- First approx to use BackTrack for all parameters kind (at least for HQL) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs trunk/nhibernate/src/NHibernate/Param/AbstractExplicitParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/AggregatedIndexCollectionSelectorParameterSpecifications.cs trunk/nhibernate/src/NHibernate/Param/CollectionFilterKeyParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/IParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs trunk/nhibernate/src/NHibernate/Param/VersionTypeSeedParameterSpecification.cs Modified: trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Engine/QueryParameters.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -567,12 +567,12 @@ return ConvertITypesToSqlTypes(paramTypeList, factory, totalSpan); } - private int[] GetEffectiveNamedParameterLocations(IList<Parameter> sqlParameters, string name) + private int[] GetEffectiveNamedParameterLocations(IList<Parameter> sqlParameters, object backTrackId) { var locations = new List<int>(5); for (int i = 0; i < sqlParameters.Count; i++) { - if(name.Equals(sqlParameters[i].BackTrack)) + if (backTrackId.Equals(sqlParameters[i].BackTrack)) { locations.Add(i); } Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SqlGenerator.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -132,17 +132,9 @@ var parameterNode= n as ParameterNode; if (parameterNode != null) { - var namedParameterSpecification = parameterNode.HqlParameterSpecification as NamedParameterSpecification; - if(namedParameterSpecification != null) - { - var parameter = Parameter.Placeholder; - parameter.BackTrack = namedParameterSpecification.Name; - writer.PushParameter(parameter); - } - else - { - ParameterOut(); - } + var parameter = Parameter.Placeholder; + parameter.BackTrack = parameterNode.HqlParameterSpecification.IdForBackTrack; + writer.PushParameter(parameter); } else if (n is SqlNode) { @@ -365,12 +357,12 @@ if(queryWriter.SkipParameter != null) { skipParameter = Parameter.Placeholder; - skipParameter.BackTrack = queryWriter.SkipParameter.Name; + skipParameter.BackTrack = queryWriter.SkipParameter.IdForBackTrack; } if (queryWriter.TakeParameter != null) { takeParameter = Parameter.Placeholder; - takeParameter.BackTrack = queryWriter.TakeParameter.Name; + takeParameter.BackTrack = queryWriter.TakeParameter.IdForBackTrack; } sqlString = dialect.GetLimitString(sqlString, skipIsParameter ? 1 : queryWriter.Skip ?? 0, queryWriter.Take ?? int.MaxValue, skipParameter, takeParameter); @@ -383,7 +375,7 @@ var pnode = node as ParameterNode; if (pnode != null) { - queryWriter.SkipParameter = (NamedParameterSpecification) pnode.HqlParameterSpecification; + queryWriter.SkipParameter = pnode.HqlParameterSpecification; collectedParameters.Add(pnode.HqlParameterSpecification); return; } @@ -396,7 +388,7 @@ var pnode = node as ParameterNode; if (pnode != null) { - queryWriter.TakeParameter = (NamedParameterSpecification)pnode.HqlParameterSpecification; + queryWriter.TakeParameter = pnode.HqlParameterSpecification; collectedParameters.Add(pnode.HqlParameterSpecification); return; } @@ -458,8 +450,8 @@ { private readonly SqlStringBuilder builder = new SqlStringBuilder(); - public NamedParameterSpecification TakeParameter { get; set; } - public NamedParameterSpecification SkipParameter { get; set; } + public IParameterSpecification TakeParameter { get; set; } + public IParameterSpecification SkipParameter { get; set; } public int? Skip { get; set; } public int? Take { get; set; } Modified: trunk/nhibernate/src/NHibernate/Param/AbstractExplicitParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/AbstractExplicitParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/AbstractExplicitParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -37,6 +37,7 @@ } public abstract string RenderDisplayInfo(); + public abstract object IdForBackTrack { get; } public abstract int Bind(IDbCommand statement, QueryParameters qp, ISessionImplementor session, int position); } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Param/AggregatedIndexCollectionSelectorParameterSpecifications.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/AggregatedIndexCollectionSelectorParameterSpecifications.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/AggregatedIndexCollectionSelectorParameterSpecifications.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Data; using System.Text; using NHibernate.Engine; @@ -9,7 +10,7 @@ public class AggregatedIndexCollectionSelectorParameterSpecifications : IParameterSpecification { private readonly IList<IParameterSpecification> _paramSpecs; - + private readonly Guid idForBackTrack = Guid.NewGuid(); public AggregatedIndexCollectionSelectorParameterSpecifications(IList<IParameterSpecification> paramSpecs) { _paramSpecs = paramSpecs; } @@ -37,6 +38,11 @@ return "index-selector [" + CollectDisplayInfo() + "]" ; } + public object IdForBackTrack + { + get { return idForBackTrack; } + } + private string CollectDisplayInfo() { StringBuilder buffer = new StringBuilder(); Modified: trunk/nhibernate/src/NHibernate/Param/CollectionFilterKeyParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/CollectionFilterKeyParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/CollectionFilterKeyParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -9,7 +9,8 @@ { private readonly string _collectionRole; private readonly IType _keyType; - private int _queryParameterPosition; + private readonly int _queryParameterPosition; + private readonly string idForBackTrack; /// <summary> /// Creates a specialized collection-filter collection-key parameter spec. @@ -22,6 +23,7 @@ _collectionRole = collectionRole; _keyType = keyType; _queryParameterPosition = queryParameterPosition; + idForBackTrack = "nhcollkey_" + _collectionRole + "nh"; } public int Bind( @@ -45,5 +47,10 @@ { return "collection-filter-key=" + _collectionRole; } + + public object IdForBackTrack + { + get { return idForBackTrack; } + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -11,7 +11,7 @@ private readonly string _filterName; private readonly string _parameterName; private readonly IType _definedParameterType; - + private readonly string idForBackTrack; /// <summary> /// Constructs a parameter specification for a particular filter parameter. /// </summary> @@ -26,6 +26,7 @@ _filterName = filterName; _parameterName = parameterName; _definedParameterType = definedParameterType; + idForBackTrack = "nhdf_" + _filterName + "_" + _parameterName + "_nhdf"; } public int Bind(IDbCommand statement, QueryParameters qp, ISessionImplementor session, int start) @@ -63,5 +64,10 @@ { return "dynamic-filter={filterName=" + _filterName + ",paramName=" + _parameterName + "}"; } + + public object IdForBackTrack + { + get { return idForBackTrack; } + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Param/IParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/IParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/IParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -33,5 +33,13 @@ /// </summary> /// <returns>The displayable info</returns> string RenderDisplayInfo(); + + /// <summary> + /// An object to unique identify this parameter inside an <see cref="NHibernate.SqlCommand.SqlString"/>. + /// </summary> + /// <remarks> + /// The <see cref="IdForBackTrack"/> is supposed to be unique in the context of a query. + /// </remarks> + object IdForBackTrack { get; } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -45,6 +45,11 @@ return ExpectedType != null ? string.Format(format, _name, ExpectedType) : string.Format(format, _name, "Unknow"); } + public override object IdForBackTrack + { + get { return _name; } + } + /// <summary> /// Getter for property 'name'. /// </summary> Modified: trunk/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/ParameterTranslationsImpl.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -124,19 +124,16 @@ [Serializable] public class ParameterInfo { - private readonly int[] originalLocation; private readonly int[] sqlLocations; public ParameterInfo(int[] sqlPositions, IType expectedType) { - originalLocation = (int[])sqlPositions.Clone(); sqlLocations = sqlPositions; ExpectedType = expectedType; } public ParameterInfo(int sqlPosition, IType expectedType) { - originalLocation = new[] { sqlPosition }; sqlLocations = new[] { sqlPosition }; ExpectedType = expectedType; } Modified: trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -12,7 +12,7 @@ public class PositionalParameterSpecification : AbstractExplicitParameterSpecification { private readonly int _hqlPosition; - + private readonly string idForBackTrack; /// <summary> /// Constructs a position/ordinal parameter bind specification. /// </summary> @@ -22,6 +22,7 @@ public PositionalParameterSpecification(int sourceLine, int sourceColumn, int hqlPosition) : base(sourceLine, sourceColumn) { _hqlPosition = hqlPosition; + idForBackTrack = "nh" + hqlPosition + "nh"; //<= I don't think the user have the insane idea to use this name a named-parameter name } /// <summary> @@ -46,6 +47,11 @@ return "ordinal=" + _hqlPosition + ", expectedType=" + ExpectedType; } + public override object IdForBackTrack + { + get { return idForBackTrack; } + } + /// <summary> /// Getter for property 'hqlPosition'. /// </summary> Modified: trunk/nhibernate/src/NHibernate/Param/VersionTypeSeedParameterSpecification.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Param/VersionTypeSeedParameterSpecification.cs 2011-05-23 11:30:57 UTC (rev 5858) +++ trunk/nhibernate/src/NHibernate/Param/VersionTypeSeedParameterSpecification.cs 2011-05-23 12:28:49 UTC (rev 5859) @@ -1,3 +1,4 @@ +using System; using System.Data; using NHibernate.Engine; using NHibernate.Type; @@ -32,5 +33,10 @@ { return "version-seed, type=" + type; } + + public object IdForBackTrack + { + get { return "nhv_seed_nh"; } + } } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |