Skip to content

Commit 1d8ff08

Browse files
committed
Add test case
1 parent a7a0ebb commit 1d8ff08

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

src/NHibernate.Test/Linq/CustomExtensionsExample.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
using System;
12
using System.Collections.ObjectModel;
23
using System.Linq;
34
using System.Linq.Expressions;
45
using System.Reflection;
56
using System.Text.RegularExpressions;
6-
using NHibernate.Cfg;
77
using NHibernate.DomainModel.Northwind.Entities;
88
using NHibernate.Hql.Ast;
99
using NHibernate.Linq.Functions;
@@ -23,6 +23,11 @@ public static bool IsLike(this string source, string pattern)
2323

2424
return Regex.IsMatch(source, pattern);
2525
}
26+
27+
public static TimeSpan GetTime(this DateTime dateTime)
28+
{
29+
return dateTime.TimeOfDay;
30+
}
2631
}
2732

2833
public class MyLinqToHqlGeneratorsRegistry: DefaultLinqToHqlGeneratorsRegistry
@@ -32,6 +37,20 @@ public MyLinqToHqlGeneratorsRegistry():base()
3237
RegisterGenerator(ReflectHelper.GetMethodDefinition(() => MyLinqExtensions.IsLike(null, null)),
3338
new IsLikeGenerator());
3439
RegisterGenerator(ReflectHelper.GetMethodDefinition(() => new object().Equals(null)), new ObjectEqualsGenerator());
40+
RegisterGenerator(ReflectHelper.GetMethodDefinition(() => MyLinqExtensions.GetTime(default(DateTime))), new GetTimeGenerator());
41+
}
42+
}
43+
44+
public class GetTimeGenerator : BaseHqlGeneratorForMethod
45+
{
46+
public GetTimeGenerator()
47+
{
48+
SupportedMethods = new[] { ReflectHelper.GetMethodDefinition(() => MyLinqExtensions.GetTime(default(DateTime))) };
49+
}
50+
51+
public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
52+
{
53+
return treeBuilder.MethodCall("cast", visitor.Visit(arguments[0]).AsExpression(), treeBuilder.Ident(NHibernateUtil.TimeAsTimeSpan.Name));
3554
}
3655
}
3756

@@ -81,6 +100,14 @@ public void CanUseObjectEquals()
81100
Assert.That(users.All(c => c.NullableEnum1 == EnumStoredAsString.Medium), Is.True);
82101
}
83102

103+
[Test(Description = "GH-2963")]
104+
public void CanUseComparisonWithExtensionOnMappedProperty()
105+
{
106+
var time = DateTime.UtcNow.GetTime();
107+
//using(new SqlLogSpy())
108+
db.Users.Where(u => u.RegisteredAt.GetTime() > time).Select(u => u.Id).ToList();
109+
}
110+
84111
[Test]
85112
public void CanUseMyCustomExtension()
86113
{

0 commit comments

Comments
 (0)