|
From: <fab...@us...> - 2011-06-18 19:58:07
|
Revision: 5957
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5957&view=rev
Author: fabiomaulo
Date: 2011-06-18 19:58:00 +0000 (Sat, 18 Jun 2011)
Log Message:
-----------
BuildParameterMetadata refactoring with parameter specifications fix
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs
trunk/nhibernate/src/NHibernate/Hql/Classic/QueryTranslator.cs
trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs
trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs
trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/Parameters/
trunk/nhibernate/src/NHibernate.Test/Parameters/NamedParameterSpecificationTest.cs
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/QueryTranslatorImpl.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Linq;
using Antlr.Runtime;
using Antlr.Runtime.Tree;
using Iesi.Collections.Generic;
@@ -17,6 +18,7 @@
using NHibernate.SqlCommand;
using NHibernate.Type;
using NHibernate.Util;
+using IQueryable = NHibernate.Persister.Entity.IQueryable;
namespace NHibernate.Hql.Ast.ANTLR
{
@@ -183,28 +185,14 @@
public ParameterMetadata BuildParameterMetadata()
{
- var parameterTranslations = GetParameterTranslations();
-
- var ordinalDescriptors = new OrdinalParameterDescriptor[parameterTranslations.OrdinalParameterCount];
-
- for (var i = 1; i <= ordinalDescriptors.Length; i++)
- {
- ordinalDescriptors[i - 1] =
- new OrdinalParameterDescriptor(i,
- parameterTranslations.SupportsOrdinalParameterMetadata
- ? parameterTranslations.GetOrdinalParameterExpectedType(i)
- : null);
- }
-
- var namedDescriptorMap = new Dictionary<string, NamedParameterDescriptor>();
- foreach (var name in parameterTranslations.GetNamedParameterNames())
- {
- namedDescriptorMap[name] =
- new NamedParameterDescriptor(name, parameterTranslations.GetNamedParameterExpectedType(name), false);// description.JpaStyle);
-
- }
-
- return new ParameterMetadata(ordinalDescriptors, namedDescriptorMap);
+ IList<IParameterSpecification> specifications = _sqlAst.Walker.Parameters;
+ IEnumerable<OrdinalParameterDescriptor> ordinals =
+ specifications.OfType<PositionalParameterSpecification>().Select(op => new OrdinalParameterDescriptor(op.HqlPosition, op.ExpectedType));
+ Dictionary<string, NamedParameterDescriptor> nameds = specifications.OfType<NamedParameterSpecification>()
+ .Distinct()
+ .Select(np => new {np.Name, Descriptor = new NamedParameterDescriptor(np.Name, np.ExpectedType, false)})
+ .ToDictionary(ep => ep.Name, ep => ep.Descriptor);
+ return new ParameterMetadata(ordinals, nameds);
}
public string[][] GetColumnNames()
Modified: trunk/nhibernate/src/NHibernate/Hql/Classic/QueryTranslator.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Classic/QueryTranslator.cs 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate/Hql/Classic/QueryTranslator.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -410,51 +410,19 @@
get { return actualReturnTypes; }
}
- public ParameterMetadata BuildParameterMetadata()
- {
- return BuildParameterMetadata(GetParameterTranslations(), queryString);
- }
+ public ParameterMetadata BuildParameterMetadata()
+ {
+ IEnumerable<IParameterSpecification> specifications = CollectedParameterSpecifications;
+ IEnumerable<OrdinalParameterDescriptor> ordinals =
+ specifications.OfType<PositionalParameterSpecification>().Select(op => new OrdinalParameterDescriptor(op.HqlPosition, op.ExpectedType));
+ Dictionary<string, NamedParameterDescriptor> nameds = specifications.OfType<NamedParameterSpecification>()
+ .Distinct()
+ .Select(np => new { np.Name, Descriptor = new NamedParameterDescriptor(np.Name, np.ExpectedType, false) })
+ .ToDictionary(ep => ep.Name, ep => ep.Descriptor);
+ return new ParameterMetadata(ordinals, nameds);
+ }
- private static ParameterMetadata BuildParameterMetadata(IParameterTranslations parameterTranslations, string hql)
- {
- long start = DateTime.Now.Ticks;
- ParamLocationRecognizer recognizer = ParamLocationRecognizer.ParseLocations(hql);
- long end = DateTime.Now.Ticks;
- if (log.IsDebugEnabled)
- {
- log.Debug("HQL param location recognition took " + (end - start) + " mills (" + hql + ")");
- }
-
- int ordinalParamCount = parameterTranslations.OrdinalParameterCount;
- int[] locations = recognizer.OrdinalParameterLocationList.ToArray();
- if (parameterTranslations.SupportsOrdinalParameterMetadata && locations.Length != ordinalParamCount)
- {
- throw new HibernateException("ordinal parameter mismatch");
- }
- ordinalParamCount = locations.Length;
- OrdinalParameterDescriptor[] ordinalParamDescriptors = new OrdinalParameterDescriptor[ordinalParamCount];
- for (int i = 1; i <= ordinalParamCount; i++)
- {
- ordinalParamDescriptors[i - 1] =
- new OrdinalParameterDescriptor(i,
- parameterTranslations.SupportsOrdinalParameterMetadata
- ? parameterTranslations.GetOrdinalParameterExpectedType(i)
- : null);
- }
-
- Dictionary<string, NamedParameterDescriptor> namedParamDescriptorMap = new Dictionary<string, NamedParameterDescriptor>();
- foreach (KeyValuePair<string, ParamLocationRecognizer.NamedParameterDescription> entry in recognizer.NamedParameterDescriptionMap)
- {
- string name = entry.Key;
- ParamLocationRecognizer.NamedParameterDescription description = entry.Value;
- namedParamDescriptorMap[name] =
- new NamedParameterDescriptor(name, parameterTranslations.GetNamedParameterExpectedType(name), description.JpaStyle);
-
- }
- return new ParameterMetadata(ordinalParamDescriptors, namedParamDescriptorMap);
- }
-
- public virtual string[][] ScalarColumnNames
+ public virtual string[][] ScalarColumnNames
{
get { return scalarColumnNames; }
}
Modified: trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate/Param/DynamicFilterParameterSpecification.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -90,7 +90,7 @@
public override bool Equals(object obj)
{
- return base.Equals(obj);
+ return Equals(obj as DynamicFilterParameterSpecification);
}
[Serializable]
Modified: trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate/Param/NamedParameterSpecification.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -72,7 +72,7 @@
public override bool Equals(object obj)
{
- return base.Equals(obj as NamedParameterSpecification);
+ return Equals(obj as NamedParameterSpecification);
}
public bool Equals(NamedParameterSpecification other)
Modified: trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate/Param/PositionalParameterSpecification.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -75,7 +75,7 @@
public override bool Equals(object obj)
{
- return base.Equals(obj as PositionalParameterSpecification);
+ return Equals(obj as PositionalParameterSpecification);
}
public bool Equals(PositionalParameterSpecification other)
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-18 18:52:29 UTC (rev 5956)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-18 19:58:00 UTC (rev 5957)
@@ -883,6 +883,7 @@
<Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Fixture.cs" />
<Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\Model.cs" />
<Compile Include="NHSpecificTest\SqlConverterAndMultiQuery\SqlConverter.cs" />
+ <Compile Include="Parameters\NamedParameterSpecificationTest.cs" />
<Compile Include="PolymorphicGetAndLoad\Domain.cs" />
<Compile Include="PolymorphicGetAndLoad\PolymorphicGetAndLoadTest.cs" />
<Compile Include="PropertyTest\FieldCamelCaseMUnderscoreFixture.cs" />
Added: trunk/nhibernate/src/NHibernate.Test/Parameters/NamedParameterSpecificationTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Parameters/NamedParameterSpecificationTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Parameters/NamedParameterSpecificationTest.cs 2011-06-18 19:58:00 UTC (rev 5957)
@@ -0,0 +1,37 @@
+using NHibernate.Param;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.Parameters
+{
+ public class NamedParameterSpecificationTest
+ {
+ [Test]
+ public void WhenHasSameNameThenSameHashCode()
+ {
+ var expected = (new NamedParameterSpecification(1, 0, "nhlist")).GetHashCode();
+ (new NamedParameterSpecification(1, 0, "nhlist")).GetHashCode().Should().Be.EqualTo(expected);
+ }
+
+ [Test]
+ public void WhenHasNoSameNameThenNoSameHashCode()
+ {
+ var expected = (new NamedParameterSpecification(1, 0, "nHlist")).GetHashCode();
+ (new NamedParameterSpecification(1, 0, "nhlist")).GetHashCode().Should().Not.Be.EqualTo(expected);
+ }
+
+ [Test]
+ public void WhenHasSameNameThenAreEquals()
+ {
+ var expected = (new NamedParameterSpecification(1, 0, "nhlist"));
+ (new NamedParameterSpecification(1, 0, "nhlist")).Should().Be.EqualTo(expected);
+ }
+
+ [Test]
+ public void WhenHasNoSameNameThenAreNotEquals()
+ {
+ var expected = (new NamedParameterSpecification(1, 0, "nHlist"));
+ (new NamedParameterSpecification(1, 0, "nhlist")).Should().Not.Be.EqualTo(expected);
+ }
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|