Skip to content

Commit 196a1c4

Browse files
committed
Fix generating coalesce for Boolean expressions
Fixes #1468
1 parent 524d06a commit 196a1c4

File tree

5 files changed

+102
-4
lines changed

5 files changed

+102
-4
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Namespace Issues.GH1468
2+
Public Class Entity
3+
Public Overridable Property Id As Guid
4+
5+
Public Overridable Property Date1 As Date?
6+
End Class
7+
End Namespace
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
Imports NUnit.Framework
2+
3+
Namespace Issues.GH1468
4+
<TestFixture>
5+
Public Class Fixture
6+
Inherits IssueTestCase
7+
8+
Protected Overrides Sub OnSetUp()
9+
10+
Using session As ISession = OpenSession()
11+
12+
Using transaction As ITransaction = session.BeginTransaction()
13+
14+
Dim e1 = New Entity
15+
e1.Date1 = new Date(2017, 12, 3)
16+
session.Save(e1)
17+
18+
Dim e2 = New Entity
19+
e2.Date1 = new Date(2017, 12, 1)
20+
session.Save(e2)
21+
22+
Dim e3 = New Entity
23+
session.Save(e3)
24+
25+
session.Flush()
26+
transaction.Commit()
27+
28+
End Using
29+
30+
End Using
31+
End Sub
32+
33+
Protected Overrides Sub OnTearDown()
34+
35+
Using session As ISession = OpenSession()
36+
37+
Using transaction As ITransaction = session.BeginTransaction()
38+
39+
session.Delete("from System.Object")
40+
41+
session.Flush()
42+
transaction.Commit()
43+
44+
End Using
45+
46+
End Using
47+
End Sub
48+
49+
<Test>
50+
Public Sub ShouldBeAbleToCompareNullableDate()
51+
52+
Using session As ISession = OpenSession()
53+
Using session.BeginTransaction()
54+
55+
Dim d = New Date(2017, 12, 2)
56+
Dim result = (From e In session.Query (Of Entity)
57+
Where e.Date1 >= d
58+
Select e).ToList()
59+
60+
Assert.AreEqual(1, result.Count)
61+
End Using
62+
End Using
63+
End Sub
64+
65+
<Test>
66+
Public Sub ShouldBeAbleToCompareNullableDateGetValueOrDefault()
67+
68+
Using session As ISession = OpenSession()
69+
Using session.BeginTransaction()
70+
71+
Dim d = New Date(2017, 12, 2)
72+
Dim result = (From e In session.Query (Of Entity)
73+
Where (e.Date1 >= d).GetValueOrDefault()
74+
Select e).ToList()
75+
76+
Assert.AreEqual(1, result.Count)
77+
End Using
78+
End Using
79+
End Sub
80+
End Class
81+
End Namespace
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test.VisualBasic" namespace="NHibernate.Test.VisualBasic.Issues.GH1468">
3+
4+
<class name="Entity">
5+
<id name="Id">
6+
<generator class="guid.comb"/>
7+
</id>
8+
<property name="Date1" />
9+
</class>
10+
11+
</hibernate-mapping>

src/NHibernate/Linq/Functions/GetValueOrDefaultGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ public IEnumerable<MethodInfo> SupportedMethods
2828

2929
public HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
3030
{
31-
return treeBuilder.Coalesce(visitor.Visit(targetObject).AsExpression(), GetRhs(method, arguments, treeBuilder, visitor));
31+
return treeBuilder.Coalesce(visitor.Visit(targetObject).ToArithmeticExpression(), GetRhs(method, arguments, treeBuilder, visitor));
3232
}
3333

3434
private static HqlExpression GetRhs(MethodInfo method, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
3535
{
3636
if (arguments.Count > 0)
37-
return visitor.Visit(arguments[0]).AsExpression();
37+
return visitor.Visit(arguments[0]).ToArithmeticExpression();
3838

3939
var returnType = method.ReturnType;
4040
var instance = returnType.IsValueType ? Activator.CreateInstance(returnType) : null;

src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
using NHibernate.Param;
99
using NHibernate.Util;
1010
using Remotion.Linq.Clauses.Expressions;
11-
using Remotion.Linq.Clauses.ResultOperators;
1211

1312
namespace NHibernate.Linq.Visitors
1413
{
@@ -316,7 +315,7 @@ protected HqlTreeNode VisitBinaryExpression(BinaryExpression expression)
316315
return _hqlTreeBuilder.GreaterThanOrEqual(lhs, rhs);
317316

318317
case ExpressionType.Coalesce:
319-
return _hqlTreeBuilder.Coalesce(lhs, rhs);
318+
return _hqlTreeBuilder.Coalesce(lhs.ToArithmeticExpression(), rhs.ToArithmeticExpression());
320319
}
321320

322321
throw new InvalidOperationException();

0 commit comments

Comments
 (0)