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. |