From: <pa...@us...> - 2011-01-29 18:06:47
|
Revision: 5372 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5372&view=rev Author: patearl Date: 2011-01-29 18:06:40 +0000 (Sat, 29 Jan 2011) Log Message: ----------- Linq: Handle ConvertChecked when generating HQL. (NH-2507, thanks Sue Hackett.) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Animal.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Mappings.hbm.xml Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2011-01-26 15:02:50 UTC (rev 5371) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionTreeVisitor.cs 2011-01-29 18:06:40 UTC (rev 5372) @@ -330,6 +330,7 @@ case ExpressionType.Not: return _hqlTreeBuilder.BooleanNot(VisitExpression(expression.Operand).AsBooleanExpression()); case ExpressionType.Convert: + case ExpressionType.ConvertChecked: return VisitExpression(expression.Operand); } Property changes on: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507 ___________________________________________________________________ Added: bugtraq:url + http://jira.nhibernate.org/browse/%BUGID% Added: bugtraq:logregex + NH-\d+ Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Animal.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Animal.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Animal.cs 2011-01-29 18:06:40 UTC (rev 5372) @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace NHibernate.Test.NHSpecificTest.NH2507 +{ + public enum Sex + { + Undefined = 0, + Male = 1, + Female = 2 + } + + public class Animal + { + public virtual int Id { get; set; } + public virtual string Description { get; set; } + public virtual double BodyWeight { get; set; } + public virtual Sex Sex { get; set; } + public virtual Animal Mother { get; set; } + public virtual Animal Father { get; set; } + public virtual IList<Animal> Children { get; set; } + public virtual string SerialNumber { get; set; } + } + + public abstract class Reptile : Animal + { + public virtual double BodyTemperature { get; set; } + } + + public class Lizard : Reptile { } + + public abstract class Mammal : Animal + { + public virtual bool Pregnant { get; set; } + public virtual DateTime? BirthDate { get; set; } + } + + public class Dog : Mammal { } + + public class Cat : Mammal { } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Fixture.cs 2011-01-29 18:06:40 UTC (rev 5372) @@ -0,0 +1,133 @@ +using System; +using System.Linq; +using NHibernate.Dialect; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2507 +{ + /// <summary> + /// Used for testing LINQ queries in NHibernate that compare enumeration values. + /// </summary> + [TestFixture] + public class Fixture : BugTestCase + { + #region BugTestCase Overrides + + protected override void OnSetUp() + { + base.OnSetUp(); + using (ISession session = this.OpenSession()) + { + Animal animal = new Animal() + { + Id = 1, BodyWeight = 2, Sex = Sex.Undefined, Description = "Animal", + SerialNumber = "111" + }; + Lizard lizard = new Lizard() + { + Id = 2, + BodyTemperature = 98, + BodyWeight = 10, + Sex = Sex.Male, + Description = "Lizard", + SerialNumber = "222", + Mother = animal + }; + Dog momDog = new Dog() + { + BirthDate = new DateTime(2007, 01, 01), + BodyWeight = 65, + Sex = Sex.Female, + Description = "MyDogMom", + Pregnant = false, + SerialNumber = "333" + }; + Dog dadDog = new Dog() + { + BirthDate = new DateTime(2007, 02, 02), + BodyWeight = 75, + Sex = Sex.Male, + Description = "MyDogDad", + Pregnant = false, + SerialNumber = "444" + }; + Dog puppy = new Dog() + { + BirthDate = new DateTime(2010, 01, 01), + BodyWeight = 50, + Sex = Sex.Male, + Description = "Puppy", + Pregnant = false, + Father = dadDog, + Mother = momDog, + SerialNumber = "555" + }; + Cat cat = new Cat() + { + BirthDate = new DateTime(2007, 03, 03), + BodyWeight = 10, + Sex = Sex.Female, + Description = "MyCat", + Pregnant = true, + SerialNumber = "777" + }; + + session.Save(animal); + session.Save(lizard); + session.Save(momDog); + session.Save(dadDog); + session.Save(puppy); + session.Save(cat); + session.Flush(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession session = this.OpenSession()) + { + const string hql = "from System.Object"; + session.Delete(hql); + session.Flush(); + } + } + + #endregion BugTestCase Overrides + + /// <summary> + /// Test LINQ query that compares enumeration values while simulating projects with Advanced Build property + /// value for "Check for arithmetic overflow/underflow" as <b>checked</b>. + /// </summary> + [Test] + public void QueryEnumerationWithCheckedArithmeticOverflowTest() + { + using (ISession session = this.OpenSession()) + { + checked + { + var query = session.Query<Animal>().Where(item => item.Sex == Sex.Undefined).ToList(); + Assert.AreEqual(1, query.Count); + } + } + } + + /// <summary> + /// Test LINQ query that compares enumeration values while simulating projects with Advanced Build property + /// value for "Check for arithmetic overflow/underflow" as <b>unchecked</b>. + /// </summary> + [Test] + public void QueryEnumerationWithUncheckedArithmeticOverflowTest() + { + using (ISession session = this.OpenSession()) + { + unchecked + { + var query = session.Query<Animal>().Where(item => item.Sex == Sex.Undefined).ToList(); + Assert.AreEqual(1, query.Count); + } + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2507/Mappings.hbm.xml 2011-01-29 18:06:40 UTC (rev 5372) @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + namespace="NHibernate.Test.NHSpecificTest.NH2507" + assembly="NHibernate.Test" + default-lazy="false"> + + <class name="Animal"> + <id name="Id"> + <generator class="native"/> + </id> + + <property name="Description"/> + <property name="BodyWeight" column="body_weight"/> + <property name="Sex" type="int" column="sex"/> + <many-to-one name="Mother" column="mother_id"/> + <many-to-one name="Father" column="father_id"/> + <property name="SerialNumber"/> + + <bag name="Children" lazy="true"> + <key column="ParentId" /> + <one-to-many class="Animal" /> + </bag> + + <joined-subclass name="Reptile"> + <key column="Animal"/> + <property name="BodyTemperature"/> + + <joined-subclass name="Lizard"> + <key column="Reptile"/> + </joined-subclass> + </joined-subclass> + + <joined-subclass name="Mammal"> + <key column="Animal"/> + <property name="Pregnant"/> + <property name="BirthDate" type="DateTime"/> + + <joined-subclass name="Dog"> + <key column="Mammal"/> + </joined-subclass> + + <joined-subclass name="Cat"> + <key column="Mammal"/> + </joined-subclass> + </joined-subclass> + </class> + +</hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-26 15:02:50 UTC (rev 5371) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-29 18:06:40 UTC (rev 5372) @@ -611,6 +611,8 @@ <Compile Include="NHSpecificTest\NH2470\DTO.cs" /> <Compile Include="NHSpecificTest\NH2484\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2484\Model.cs" /> + <Compile Include="NHSpecificTest\NH2507\Animal.cs" /> + <Compile Include="NHSpecificTest\NH2507\Fixture.cs" /> <Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" /> <Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" /> <Compile Include="NHSpecificTest\Properties\Model.cs" /> @@ -2405,6 +2407,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2507\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\EntityNameAndInheritance\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2467\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2459\Mappings.hbm.xml" /> @@ -2784,7 +2787,6 @@ <EmbeddedResource Include="DynamicEntity\Tuplizer\Customer.hbm.xml" /> </ItemGroup> <ItemGroup> - <Folder Include="NHSpecificTest\NH2484" /> <Folder Include="Properties\" /> </ItemGroup> <ItemGroup> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |