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