From: <pa...@us...> - 2011-01-17 04:37:37
|
Revision: 5358 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5358&view=rev Author: patearl Date: 2011-01-17 04:37:31 +0000 (Mon, 17 Jan 2011) Log Message: ----------- Linq: Fixed query cache for "x is Type" operator. (NH-2459, thanks to Alex Baker for test.) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Test.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/TrainingComponent.cs Modified: trunk/nhibernate/src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs 2011-01-17 04:00:30 UTC (rev 5357) +++ trunk/nhibernate/src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs 2011-01-17 04:37:31 UTC (rev 5358) @@ -198,7 +198,13 @@ protected override Expression VisitTypeBinaryExpression(TypeBinaryExpression expression) { - return base.VisitTypeBinaryExpression(expression); + _string.Append("IsType("); + VisitExpression(expression.Expression); + _string.Append(", "); + _string.Append(expression.TypeOperand.FullName); + _string.Append(")"); + + return expression; } protected override Expression VisitUnaryExpression(UnaryExpression expression) Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Mappings.hbm.xml 2011-01-17 04:37:31 UTC (rev 5358) @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH2459"> + + <class name="TrainingComponent" abstract="true" table="tblTrnNrt" discriminator-value="-1"> + <id name ="Id" column="NrtId"> + <generator class="guid"></generator> + </id> + <discriminator column="NrtObjectTypeId" type="int" /> + + <property name="Code" column="NationalCode" length="12"></property> + <property name="Title" column="NationalTitle" length="200"></property> + + </class> + + <subclass name="SkillSet" discriminator-value="1" extends="TrainingComponent"> + + </subclass> + + <subclass name="Qualification" discriminator-value="2" extends="TrainingComponent"> + + </subclass> + +</hibernate-mapping> + Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Test.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Test.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/Test.cs 2011-01-17 04:37:31 UTC (rev 5358) @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using log4net; +using log4net.Appender; +using log4net.Repository.Hierarchy; +using NHibernate.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH2459 +{ + [TestFixture] + public class Test : BugTestCase + { + protected override void OnSetUp() + { + using (ISession session = OpenSession()) + { + SkillSet skillSet = new SkillSet() { Code = "123", Title = "Skill Set" }; + Qualification qualification = new Qualification() { Code = "124", Title = "Qualification" }; + + session.Save(skillSet); + session.Save(qualification); + session.Flush(); + } + } + + [Test] + public void IsTypeOperator() + { + using (ISession session = OpenSession()) + { + //first query is OK + IQueryable<TrainingComponent> query = session.Query<TrainingComponent>().Where(c => c is SkillSet); + Assert.That(!query.ToList().Any(c => !(c is SkillSet))); + + //Second time round the a cached version of the SQL for the query is used BUT the type parameter is not updated... + query = session.Query<TrainingComponent>().Where(c => c is Qualification); + Assert.That(!query.ToList().Any(c => !(c is Qualification))); + } + } + + protected override void OnTearDown() + { + using (ISession session = OpenSession()) + { + session.Delete("from TrainingComponent"); + session.Flush(); + } + } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/TrainingComponent.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/TrainingComponent.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2459/TrainingComponent.cs 2011-01-17 04:37:31 UTC (rev 5358) @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace NHibernate.Test.NHSpecificTest.NH2459 +{ + public class TrainingComponent + { + protected TrainingComponent() {} + public virtual Guid Id { get; set; } + public virtual string Code { get; set; } + public virtual string Title { get; set; } + } + + public class SkillSet : TrainingComponent { + + } + + public class Qualification : TrainingComponent { + + } +} Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-17 04:00:30 UTC (rev 5357) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-01-17 04:37:31 UTC (rev 5358) @@ -587,6 +587,8 @@ <Compile Include="NHSpecificTest\NH2420\MyTable.cs" /> <Compile Include="NHSpecificTest\NH2441\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2441\Model.cs" /> + <Compile Include="NHSpecificTest\NH2459\Test.cs" /> + <Compile Include="NHSpecificTest\NH2459\TrainingComponent.cs" /> <Compile Include="NHSpecificTest\NH2470\Class1Class2Classes.cs" /> <Compile Include="NHSpecificTest\NH2470\Class1Class2DTOs.cs" /> <Compile Include="NHSpecificTest\NH2470\Class1Class2Tests.cs" /> @@ -2381,6 +2383,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2459\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2412\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2280\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2203\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |