Skip to content

Commit

Permalink
Fix NH-2850 - Unable to use enums in NH 3.2 QueryOver checked comparison
Browse files Browse the repository at this point in the history
  • Loading branch information
FlukeFan committed Aug 23, 2011
1 parent d8aaf2c commit 4e5baf7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
22 changes: 22 additions & 0 deletions src/NHibernate.Test/Criteria/Lambda/ExpressionProcessorFixture.cs
Expand Up @@ -231,6 +231,28 @@ public void TestEvaluateEnumeration()
Assert.AreEqual(before.ToString(), after.ToString());
}

[Test]
public void TestUnaryConversionChecked()
{
checked
{
ICriterion before = Restrictions.Eq("Gender", PersonGender.Female);
ICriterion after = ExpressionProcessor.ProcessExpression<Person>(p => p.Gender == PersonGender.Female);
Assert.AreEqual(before.ToString(), after.ToString());
}
}

[Test]
public void TestUnaryConversionUnchecked()
{
unchecked
{
ICriterion before = Restrictions.Eq("Gender", PersonGender.Female);
ICriterion after = ExpressionProcessor.ProcessExpression<Person>(p => p.Gender == PersonGender.Female);
Assert.AreEqual(before.ToString(), after.ToString());
}
}

[Test]
public void TestEvaluateSubclass()
{
Expand Down
15 changes: 10 additions & 5 deletions src/NHibernate/Impl/ExpressionProcessor.cs
Expand Up @@ -170,7 +170,7 @@ public static IProjection FindMemberProjection(Expression expression)
{
UnaryExpression unaryExpression = (UnaryExpression)expression;

if (unaryExpression.NodeType != ExpressionType.Convert)
if (!IsConversion(unaryExpression.NodeType))
throw new Exception("Cannot interpret member from " + expression.ToString());

return FindMemberProjection(unaryExpression.Operand);
Expand Down Expand Up @@ -212,7 +212,7 @@ public static string FindMemberExpression(Expression expression)

return FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name;
}
else if (memberExpression.Expression.NodeType == ExpressionType.Convert)
else if (IsConversion(memberExpression.Expression.NodeType))
{
return (FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name).TrimStart('.');
}
Expand All @@ -226,7 +226,7 @@ public static string FindMemberExpression(Expression expression)
{
UnaryExpression unaryExpression = (UnaryExpression)expression;

if (unaryExpression.NodeType != ExpressionType.Convert)
if (!IsConversion(unaryExpression.NodeType))
throw new Exception("Cannot interpret member from " + expression.ToString());

return FindMemberExpression(unaryExpression.Operand);
Expand Down Expand Up @@ -302,7 +302,7 @@ private static System.Type FindMemberType(Expression expression)
{
UnaryExpression unaryExpression = (UnaryExpression)expression;

if (unaryExpression.NodeType != ExpressionType.Convert)
if (!IsConversion(unaryExpression.NodeType))
throw new Exception("Cannot interpret member from " + expression.ToString());

return FindMemberType(unaryExpression.Operand);
Expand Down Expand Up @@ -340,7 +340,7 @@ private static bool IsMemberExpression(Expression expression)
{
UnaryExpression unaryExpression = (UnaryExpression)expression;

if (unaryExpression.NodeType != ExpressionType.Convert)
if (!IsConversion(unaryExpression.NodeType))
throw new Exception("Cannot interpret member from " + expression.ToString());

return IsMemberExpression(unaryExpression.Operand);
Expand Down Expand Up @@ -375,6 +375,11 @@ private static bool IsMemberExpression(Expression expression)
return false;
}

private static bool IsConversion(ExpressionType expressionType)
{
return (expressionType == ExpressionType.Convert || expressionType == ExpressionType.ConvertChecked);
}

private static object ConvertType(object value, System.Type type)
{
if (value == null)
Expand Down

0 comments on commit 4e5baf7

Please sign in to comment.