diff --git a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs index 9b8d04f2c6c..6e68c56ca1b 100644 --- a/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Async/Linq/LinqQuerySamples.cs @@ -14,6 +14,7 @@ using System.Linq; using NHibernate.DomainModel.Northwind.Entities; using NSubstitute; +using NSubstitute.ExceptionExtensions; using NUnit.Framework; using NHibernate.Linq; @@ -1370,5 +1371,19 @@ from s2 in sup2.DefaultIfEmpty() Assert.That(GetTotalOccurrences(sql, "left outer join"), Is.EqualTo(2)); } } + + [Test] + public void ReplaceFunctionWithNullArgumentAsync() + { + var query = from e in db.Employees + select e.FirstName.Replace(e.LastName, null); + List results = null; + Assert.That( + async () => + { + results = await (query.ToListAsync()); + }, Throws.Nothing, "Expected REPLACE(FirstName, LastName, NULL) to be supported"); + Assert.That(results, Is.Not.Null); + } } } diff --git a/src/NHibernate.Test/Linq/LinqQuerySamples.cs b/src/NHibernate.Test/Linq/LinqQuerySamples.cs index 393d55ccf0a..22035aae7cc 100755 --- a/src/NHibernate.Test/Linq/LinqQuerySamples.cs +++ b/src/NHibernate.Test/Linq/LinqQuerySamples.cs @@ -4,6 +4,7 @@ using System.Linq; using NHibernate.DomainModel.Northwind.Entities; using NSubstitute; +using NSubstitute.ExceptionExtensions; using NUnit.Framework; namespace NHibernate.Test.Linq @@ -1955,6 +1956,20 @@ public void DLinq2C() Assert.That(!q.Any(orderid => withNullShippingDate.Contains(orderid))); } + + [Test] + public void ReplaceFunctionWithNullArgument() + { + var query = from e in db.Employees + select e.FirstName.Replace(e.LastName, null); + List results = null; + Assert.That( + () => + { + results = query.ToList(); + }, Throws.Nothing, "Expected REPLACE(FirstName, LastName, NULL) to be supported"); + Assert.That(results, Is.Not.Null); + } } public class ParentChildBatch diff --git a/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs b/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs index 977e6d9c015..0be307fce8b 100644 --- a/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs +++ b/src/NHibernate/Linq/Visitors/ParameterTypeLocator.cs @@ -156,7 +156,7 @@ private static IType GetParameterType( return candidateType; } - if (visitor.NotGuessableConstants.Contains(constantExpression)) + if (visitor.NotGuessableConstants.Contains(constantExpression) && constantExpression.Value != null) { return null; }