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