From: <fab...@us...> - 2010-09-24 13:46:00
|
Revision: 5215 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5215&view=rev Author: fabiomaulo Date: 2010-09-24 13:45:53 +0000 (Fri, 24 Sep 2010) Log Message: ----------- fix NH-2344 (thanks to Jose Romaniello) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -420,5 +420,10 @@ { return new HqlBitwiseOr(_factory, lhs, rhs); } + + public HqlTreeNode Coalesce(HqlExpression lhs, HqlExpression rhs) + { + return new HqlCoalesce(_factory, lhs, rhs); + } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -595,6 +595,16 @@ } } + public class HqlCoalesce : HqlExpression + { + public HqlCoalesce(IASTFactory factory, HqlExpression lhs, HqlExpression rhs) + : base(HqlSqlWalker.METHOD_CALL, "coalesce", factory) + { + AddChild(new HqlIdent(factory, "coalesce")); + AddChild(new HqlExpressionList(factory, lhs, rhs)); + } + } + public class HqlExpressionList : HqlStatement { public HqlExpressionList(IASTFactory factory, params HqlExpression[] expressions) Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -325,6 +325,9 @@ case ExpressionType.GreaterThanOrEqual: return _hqlTreeBuilder.GreaterThanOrEqual(lhs, rhs); + + case ExpressionType.Coalesce: + return _hqlTreeBuilder.Coalesce(lhs, rhs); } throw new InvalidOperationException(); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Fixture.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,44 @@ +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2344 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void OnTearDown() + { + using (ISession s = OpenSession()) + { + s.Delete("from Person"); + s.Flush(); + } + base.OnTearDown(); + } + + [Test] + public void CoalesceShouldWork() + { + int personId; + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + var p1 = new Person { Name = "inserted name" }; + var p2 = new Person { Name = null}; + + s.Save(p1); + s.Save(p2); + personId = p2.Id; + tx.Commit(); + } + + using (ISession s = OpenSession()) + using (s.BeginTransaction()) + { + var person = s.Query<Person>().Where(p => (p.Name ?? "e") == "e").First(); + Assert.AreEqual(personId, person.Id); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Mappings.hbm.xml 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping + xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2344"> + + <class name="Person"> + <id name="Id"> + <generator class="hilo" /> + </id> + <property name="Name"/> + </class> + +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2344/Model.cs 2010-09-24 13:45:53 UTC (rev 5215) @@ -0,0 +1,8 @@ +namespace NHibernate.Test.NHSpecificTest.NH2344 +{ + public class Person + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 12:30:53 UTC (rev 5214) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-09-24 13:45:53 UTC (rev 5215) @@ -501,6 +501,8 @@ <Compile Include="NHSpecificTest\NH2322\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Model.cs" /> <Compile Include="NHSpecificTest\NH2322\PostUpdateEventListener.cs" /> + <Compile Include="NHSpecificTest\NH2344\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2344\Model.cs" /> <Compile Include="TypesTest\CharClass.cs" /> <Compile Include="TypesTest\CharClassFixture.cs" /> <Compile Include="TypesTest\DateTimeClass.cs" /> @@ -2295,6 +2297,7 @@ <EmbeddedResource Include="CollectionTest\NullableValueTypeElementMapFixture.hbm.xml" /> <EmbeddedResource Include="DriverTest\EntityForMs2008.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH2344\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2112\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2147\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2138\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |