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