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