From: <fab...@us...> - 2009-04-23 03:28:40
|
Revision: 4202 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4202&view=rev Author: fabiomaulo Date: 2009-04-23 03:28:22 +0000 (Thu, 23 Apr 2009) Log Message: ----------- - Bug fix + refactoring AST qt - test to pass Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SessionFactoryHelperExtensions.cs trunk/nhibernate/src/NHibernate/Hql/Util/SessionFactoryHelper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.cs trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.hbm.xml trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SqlTranslationFixture.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SessionFactoryHelperExtensions.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SessionFactoryHelperExtensions.cs 2009-04-22 22:56:16 UTC (rev 4201) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/ANTLR/SessionFactoryHelperExtensions.cs 2009-04-23 03:28:22 UTC (rev 4202) @@ -4,6 +4,7 @@ using NHibernate.Engine; using NHibernate.Hql.Ast.ANTLR.Tree; using NHibernate.Hql.Ast.ANTLR.Util; +using NHibernate.Hql.Util; using NHibernate.Persister.Collection; using NHibernate.Persister.Entity; using NHibernate.SqlCommand; @@ -251,22 +252,7 @@ /// <returns>The defined persister for this class, or null if none found.</returns> public static IQueryable FindQueryableUsingImports(ISessionFactoryImplementor sfi, string className) { - // NH : this method prevent unrecognized class when entityName != class.FullName - // this is a patch for the TODO below - var possibleResult = sfi.TryGetEntityPersister(GetEntityName(className)) as IQueryable; - if (possibleResult != null) - { - return possibleResult; - } - - string importedClassName = sfi.GetImportedClassName(className); - - if (importedClassName == null) - { - return null; - } - // NH: This method don't work if entityName != class.FullName - return (IQueryable)sfi.TryGetEntityPersister(GetEntityName(importedClassName)); + return SessionFactoryHelper.FindQueryableUsingImports(sfi, className); } private static string GetEntityName(string assemblyQualifiedName) @@ -292,24 +278,7 @@ /// <returns>The defined persister for this entity, or null if none found.</returns> private IEntityPersister FindEntityPersisterByName(string name) { - // First, try to get the persister using the given name directly. - try - { - return _sfi.GetEntityPersister( name ); - } - catch (MappingException) - { - // unable to locate it using this name - } - - // If that didn't work, try using the 'import' name. - string importedClassName = _sfi.GetImportedClassName( name ); - if ( importedClassName == null ) - { - return null; - } - - return _sfi.GetEntityPersister( importedClassName ); + return SessionFactoryHelper.FindEntityPersisterUsingImports(_sfi, name); } /// <summary> Modified: trunk/nhibernate/src/NHibernate/Hql/Util/SessionFactoryHelper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Util/SessionFactoryHelper.cs 2009-04-22 22:56:16 UTC (rev 4201) +++ trunk/nhibernate/src/NHibernate/Hql/Util/SessionFactoryHelper.cs 2009-04-23 03:28:22 UTC (rev 4202) @@ -11,21 +11,26 @@ { public static IQueryable FindQueryableUsingImports(ISessionFactoryImplementor sfi, string className) { + return FindEntityPersisterUsingImports(sfi, className) as IQueryable; + } + + public static IEntityPersister FindEntityPersisterUsingImports(ISessionFactoryImplementor sfi, string className) + { // NH : short cut - if(string.IsNullOrEmpty(className)) + if (string.IsNullOrEmpty(className)) { return null; } - - if(!char.IsLetter(className[0]) && !className[0].Equals('_')) + + if (!char.IsLetter(className[0]) && !className[0].Equals('_')) { - return null; + return null; } // NH : this method prevent unrecognized class when entityName != class.FullName // this is a patch for the TODO below - var possibleResult = sfi.TryGetEntityPersister(GetEntityName(className)) as IQueryable; - if(possibleResult != null) + var possibleResult = sfi.TryGetEntityPersister(GetEntityName(className)); + if (possibleResult != null) { return possibleResult; } @@ -37,7 +42,7 @@ return null; } // NH: This method don't work if entityName != class.FullName - return (IQueryable)sfi.TryGetEntityPersister(GetEntityName(importedClassName)); + return sfi.TryGetEntityPersister(GetEntityName(importedClassName)); } private static string GetEntityName(string assemblyQualifiedName) Added: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/BaseFixture.cs 2009-04-23 03:28:22 UTC (rev 4202) @@ -0,0 +1,47 @@ +using System.Collections; +using NHibernate.Hql.Ast.ANTLR; +using System.Collections.Generic; +using NHibernate.Util; + +namespace NHibernate.Test.HQL.Ast +{ + public class BaseFixture: TestCase + { + private readonly IDictionary<string, IFilter> emptyfilters = new CollectionHelper.EmptyMapClass<string, IFilter>(); + + #region Overrides of TestCase + + protected override IList Mappings + { + get { return new string[0]; } + } + + #endregion + + protected override void Configure(Cfg.Configuration configuration) + { + var assembly = GetType().Assembly; + string mappingNamespace = GetType().Namespace; + foreach (var resource in assembly.GetManifestResourceNames()) + { + if (resource.StartsWith(mappingNamespace) && resource.EndsWith(".hbm.xml")) + { + configuration.AddResource(resource, assembly); + } + } + } + + public string GetSql(string query) + { + var qt = new QueryTranslatorImpl(null, query, emptyfilters, sessions); + qt.Compile(null, false); + return qt.SQLString; + } + + protected override bool AppliesTo(Dialect.Dialect dialect) + { + return sessions.Settings.QueryTranslatorFactory is ASTQueryTranslatorFactory; + } + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.cs 2009-04-23 03:28:22 UTC (rev 4202) @@ -0,0 +1,7 @@ +namespace NHibernate.Test.HQL.Ast +{ + public class SimpleClass + { + public virtual string Description { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SimpleClass.hbm.xml 2009-04-23 03:28:22 UTC (rev 4202) @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.HQL.Ast"> + + <class name="SimpleClass"> + <id type="int"> + <generator class="native" /> + </id> + <property name="Description"/> + </class> +</hibernate-mapping> Added: trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SqlTranslationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SqlTranslationFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/HQL/Ast/SqlTranslationFixture.cs 2009-04-23 03:28:22 UTC (rev 4202) @@ -0,0 +1,17 @@ +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.HQL.Ast +{ + [TestFixture] + public class SqlTranslationFixture : BaseFixture + { + [Test, Ignore("Bug not fixed yet")] + public void ParseFloatConstant() + { + var query = "select 123.5, s from SimpleClass s"; + + Assert.That(GetSql(query), Text.StartsWith("select 123.5")); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-04-22 22:56:16 UTC (rev 4201) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-04-23 03:28:22 UTC (rev 4202) @@ -291,7 +291,10 @@ <Compile Include="GenericTest\SetGeneric\B.cs" /> <Compile Include="GenericTest\SetGeneric\SetGenericFixture.cs" /> <Compile Include="HQL\Animal.cs" /> + <Compile Include="HQL\Ast\BaseFixture.cs" /> <Compile Include="HQL\Ast\ParsingFixture.cs" /> + <Compile Include="HQL\Ast\SimpleClass.cs" /> + <Compile Include="HQL\Ast\SqlTranslationFixture.cs" /> <Compile Include="HQL\BaseFunctionFixture.cs" /> <Compile Include="NHSpecificTest\Dates\TimeFixture.cs" /> <Compile Include="NHSpecificTest\DtcFailures\DtcFailuresFixture.cs" /> @@ -1716,6 +1719,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="HQL\Ast\SimpleClass.hbm.xml" /> <EmbeddedResource Include="HQL\Ast\TestQueries.xml" /> <EmbeddedResource Include="HQL\Ast\TestQueriesWithResults.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1741\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |