|
From: <ste...@us...> - 2010-07-06 19:37:12
|
Revision: 4999
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4999&view=rev
Author: steverstrong
Date: 2010-07-06 19:37:06 +0000 (Tue, 06 Jul 2010)
Log Message:
-----------
Fix for JIRA NH-2225
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/DbScripts/MsSql2008DialectLinqReadonlyCreateScript.sql
trunk/nhibernate/src/NHibernate.Test/Linq/Entities/User.cs
trunk/nhibernate/src/NHibernate.Test/Linq/Mappings/User.hbm.xml
trunk/nhibernate/src/NHibernate.Test/Linq/WhereTests.cs
Modified: trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeBuilder.cs 2010-07-06 19:37:06 UTC (rev 4999)
@@ -410,5 +410,15 @@
{
return new HqlClass(_factory);
}
+
+ public HqlBitwiseAnd BitwiseAnd(HqlExpression lhs, HqlExpression rhs)
+ {
+ return new HqlBitwiseAnd(_factory, lhs, rhs);
+ }
+
+ public HqlBitwiseOr BitwiseOr(HqlExpression lhs, HqlExpression rhs)
+ {
+ return new HqlBitwiseOr(_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-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate/Hql/Ast/HqlTreeNode.cs 2010-07-06 19:37:06 UTC (rev 4999)
@@ -705,6 +705,22 @@
}
}
+ public class HqlBitwiseOr : HqlExpression
+ {
+ public HqlBitwiseOr(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
+ : base(HqlSqlWalker.BAND, "band", factory, lhs, rhs)
+ {
+ }
+ }
+
+ public class HqlBitwiseAnd : HqlExpression
+ {
+ public HqlBitwiseAnd(IASTFactory factory, HqlExpression lhs, HqlExpression rhs)
+ : base(HqlSqlWalker.BOR, "bor", factory, lhs, rhs)
+ {
+ }
+ }
+
public class HqlLeft : HqlTreeNode
{
public HqlLeft(IASTFactory factory)
Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2010-07-06 19:37:06 UTC (rev 4999)
@@ -290,10 +290,14 @@
return _hqlTreeBuilder.Inequality(lhs, rhs);
case ExpressionType.And:
+ return _hqlTreeBuilder.BitwiseAnd(lhs, rhs);
+
case ExpressionType.AndAlso:
return _hqlTreeBuilder.BooleanAnd(lhs.AsBooleanExpression(), rhs.AsBooleanExpression());
case ExpressionType.Or:
+ return _hqlTreeBuilder.BitwiseOr(lhs, rhs);
+
case ExpressionType.OrElse:
return _hqlTreeBuilder.BooleanOr(lhs.AsBooleanExpression(), rhs.AsBooleanExpression());
Modified: trunk/nhibernate/src/NHibernate.Test/DbScripts/MsSql2008DialectLinqReadonlyCreateScript.sql
===================================================================
(Binary files differ)
Modified: trunk/nhibernate/src/NHibernate.Test/Linq/Entities/User.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Linq/Entities/User.cs 2010-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate.Test/Linq/Entities/User.cs 2010-07-06 19:37:06 UTC (rev 4999)
@@ -4,6 +4,15 @@
namespace NHibernate.Test.Linq.Entities
{
+ [Flags]
+ public enum FeatureSet
+ {
+ HasThis = 1,
+ HasThat = 2,
+ HasMore = 4,
+ HasAll = 8
+ }
+
public interface IUser
{
int Id { get; set; }
@@ -12,6 +21,7 @@
DateTime RegisteredAt { get; set; }
DateTime? LastLoginDate { get; set; }
UserComponent Component { get; set; }
+ FeatureSet Features { get; set; }
Role Role { get; set; }
EnumStoredAsString Enum1 { get; set; }
EnumStoredAsInt32 Enum2 { get; set; }
@@ -33,6 +43,8 @@
public virtual Role Role { get; set; }
+ public virtual FeatureSet Features { get; set; }
+
public virtual EnumStoredAsString Enum1 { get; set; }
public virtual EnumStoredAsInt32 Enum2 { get; set; }
Modified: trunk/nhibernate/src/NHibernate.Test/Linq/Mappings/User.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Linq/Mappings/User.hbm.xml 2010-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate.Test/Linq/Mappings/User.hbm.xml 2010-07-06 19:37:06 UTC (rev 4999)
@@ -18,6 +18,8 @@
<property name="Enum2" not-null="true" />
+ <property name="Features" not-null="true" />
+
<many-to-one name="Role" class="Role">
<column name="RoleId" />
</many-to-one>
Modified: trunk/nhibernate/src/NHibernate.Test/Linq/WhereTests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Linq/WhereTests.cs 2010-07-06 09:14:59 UTC (rev 4998)
+++ trunk/nhibernate/src/NHibernate.Test/Linq/WhereTests.cs 2010-07-06 19:37:06 UTC (rev 4999)
@@ -412,5 +412,16 @@
Assert.AreEqual(2, query.Count);
}
+
+ [Test]
+ public void BitwiseQuery()
+ {
+ var featureSet = FeatureSet.HasMore;
+ var query = (from o in session.Query<User>()
+ where (o.Features & featureSet) == featureSet
+ select o).ToList();
+
+ Assert.IsNotNull(query);
+ }
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|