Skip to content

Commit 78abbbe

Browse files
authored
Fix HQL and LINQ query by a type on <any/> with meta-types other than int (#1803)
Fixes #1774
1 parent 2f8f317 commit 78abbbe

File tree

16 files changed

+229
-163
lines changed

16 files changed

+229
-163
lines changed

src/NHibernate.Test/Async/NHSpecificTest/NH2328/Fixture.cs

Lines changed: 0 additions & 117 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using NUnit.Framework;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH1774.Class
4+
{
5+
[TestFixture]
6+
public class ClassMetaTypeFixture : FixtureBase
7+
{
8+
}
9+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping
3+
xmlns="urn:nhibernate-mapping-2.2"
4+
assembly="NHibernate.Test"
5+
namespace="NHibernate.Test.NHSpecificTest.GH1774">
6+
7+
<class name="ToyBox">
8+
<id name="Id">
9+
<generator class="native"/>
10+
</id>
11+
<property name="Name" />
12+
<any name="Shape" id-type="int" meta-type="class">
13+
<column name="s_object_id" />
14+
<column name="object_id" />
15+
</any>
16+
</class>
17+
18+
<class name="Square">
19+
<id name="Id">
20+
<generator class="native"/>
21+
</id>
22+
</class>
23+
24+
<class name="Circle">
25+
<id name="Id">
26+
<generator class="native"/>
27+
</id>
28+
</class>
29+
30+
</hibernate-mapping>

src/NHibernate.Test/NHSpecificTest/NH2328/Fixture.cs renamed to src/NHibernate.Test/NHSpecificTest/GH1774/FixtureBase.cs

Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
using System.Linq;
22
using NUnit.Framework;
33

4-
namespace NHibernate.Test.NHSpecificTest.NH2328
4+
namespace NHibernate.Test.NHSpecificTest.GH1774
55
{
6-
[TestFixture]
7-
public class Fixture : BugTestCase
6+
public abstract class FixtureBase : BugTestCase
87
{
98
protected override bool AppliesTo(Dialect.Dialect dialect)
109
{
@@ -13,29 +12,25 @@ protected override bool AppliesTo(Dialect.Dialect dialect)
1312

1413
protected override void OnSetUp()
1514
{
16-
base.OnSetUp();
17-
18-
using (ISession s = OpenSession())
19-
using (ITransaction t = s.BeginTransaction())
15+
using (var s = OpenSession())
16+
using (var t = s.BeginTransaction())
2017
{
2118
var circle = new Circle();
2219
var square = new Square();
2320

2421
s.Save(circle);
2522
s.Save(square);
2623

27-
s.Save(new ToyBox() { Name = "Box1", Shape = circle });
28-
s.Save(new ToyBox() { Name = "Box2", Shape = square });
24+
s.Save(new ToyBox { Name = "Box1", Shape = circle });
25+
s.Save(new ToyBox { Name = "Box2", Shape = square });
2926
t.Commit();
3027
}
3128
}
3229

3330
protected override void OnTearDown()
3431
{
35-
base.OnTearDown();
36-
37-
using (ISession s = OpenSession())
38-
using (ITransaction t = s.BeginTransaction())
32+
using (var s = OpenSession())
33+
using (var t = s.BeginTransaction())
3934
{
4035
s.CreateQuery("delete from ToyBox").ExecuteUpdate();
4136
s.CreateQuery("delete from Circle").ExecuteUpdate();
@@ -47,12 +42,13 @@ protected override void OnTearDown()
4742
[Test]
4843
public void AnyIs_QueryOver()
4944
{
50-
using (ISession s = OpenSession())
45+
using (var s = OpenSession())
46+
using (s.BeginTransaction())
5147
{
5248
var boxes =
5349
s.QueryOver<ToyBox>()
54-
.Where(t => t.Shape is Square)
55-
.List();
50+
.Where(t => t.Shape is Square)
51+
.List();
5652

5753
Assert.That(boxes.Count, Is.EqualTo(1));
5854
Assert.That(boxes[0].Name, Is.EqualTo("Box2"));
@@ -62,7 +58,8 @@ public void AnyIs_QueryOver()
6258
[Test]
6359
public void AnyIs_Linq()
6460
{
65-
using (ISession s = OpenSession())
61+
using (var s = OpenSession())
62+
using (s.BeginTransaction())
6663
{
6764
var boxes =
6865
(from t in s.Query<ToyBox>()
@@ -77,11 +74,12 @@ where t.Shape is Square
7774
[Test]
7875
public void AnyIs_HqlWorksWithClassNameInTheRight()
7976
{
80-
using (ISession s = OpenSession())
77+
using (var s = OpenSession())
78+
using (s.BeginTransaction())
8179
{
8280
var boxes =
8381
s.CreateQuery("from ToyBox t where t.Shape.class = Square")
84-
.List<ToyBox>();
82+
.List<ToyBox>();
8583

8684
Assert.That(boxes.Count, Is.EqualTo(1));
8785
Assert.That(boxes[0].Name, Is.EqualTo("Box2"));
@@ -91,11 +89,44 @@ public void AnyIs_HqlWorksWithClassNameInTheRight()
9189
[Test]
9290
public void AnyIs_HqlWorksWithClassNameInTheLeft()
9391
{
94-
using (ISession s = OpenSession())
92+
using (var s = OpenSession())
93+
using (s.BeginTransaction())
9594
{
9695
var boxes =
9796
s.CreateQuery("from ToyBox t where Square = t.Shape.class")
98-
.List<ToyBox>();
97+
.List<ToyBox>();
98+
99+
Assert.That(boxes.Count, Is.EqualTo(1));
100+
Assert.That(boxes[0].Name, Is.EqualTo("Box2"));
101+
}
102+
}
103+
104+
[Test]
105+
public void AnyIs_HqlWorksWithParameterInTheRight()
106+
{
107+
using (var s = OpenSession())
108+
using (s.BeginTransaction())
109+
{
110+
var boxes =
111+
s.CreateQuery("from ToyBox t where t.Shape.class = :c")
112+
.SetParameter("c", typeof(Square).FullName)
113+
.List<ToyBox>();
114+
115+
Assert.That(boxes.Count, Is.EqualTo(1));
116+
Assert.That(boxes[0].Name, Is.EqualTo("Box2"));
117+
}
118+
}
119+
120+
[Test]
121+
public void AnyIs_HqlWorksWithParameterInTheLeft()
122+
{
123+
using (var s = OpenSession())
124+
using (s.BeginTransaction())
125+
{
126+
var boxes =
127+
s.CreateQuery("from ToyBox t where :c = t.Shape.class")
128+
.SetParameter("c", typeof(Square).FullName)
129+
.List<ToyBox>();
99130

100131
Assert.That(boxes.Count, Is.EqualTo(1));
101132
Assert.That(boxes[0].Name, Is.EqualTo("Box2"));
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using NUnit.Framework;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH1774.Implicit
4+
{
5+
[TestFixture, Ignore("Not fixed yet")]
6+
public class ImplicitMetaTypeFixture : FixtureBase
7+
{
8+
}
9+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping
3+
xmlns="urn:nhibernate-mapping-2.2"
4+
assembly="NHibernate.Test"
5+
namespace="NHibernate.Test.NHSpecificTest.GH1774">
6+
7+
<class name="ToyBox">
8+
<id name="Id">
9+
<generator class="native"/>
10+
</id>
11+
<property name="Name" />
12+
<any name="Shape" id-type="int">
13+
<column name="s_object_id" />
14+
<column name="object_id" />
15+
</any>
16+
</class>
17+
18+
<class name="Square">
19+
<id name="Id">
20+
<generator class="native"/>
21+
</id>
22+
</class>
23+
24+
<class name="Circle">
25+
<id name="Id">
26+
<generator class="native"/>
27+
</id>
28+
</class>
29+
30+
</hibernate-mapping>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using NUnit.Framework;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH1774.Int32
4+
{
5+
[TestFixture]
6+
public class Int32MetaTypeFixture : FixtureBase
7+
{
8+
}
9+
}

src/NHibernate.Test/NHSpecificTest/NH2328/Mappings.hbm.xml renamed to src/NHibernate.Test/NHSpecificTest/GH1774/Int32/Mappings.hbm.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<hibernate-mapping
33
xmlns="urn:nhibernate-mapping-2.2"
44
assembly="NHibernate.Test"
5-
namespace="NHibernate.Test.NHSpecificTest.NH2328">
5+
namespace="NHibernate.Test.NHSpecificTest.GH1774">
66

77
<class name="ToyBox">
88
<id name="Id">
@@ -29,4 +29,4 @@
2929
</id>
3030
</class>
3131

32-
</hibernate-mapping>
32+
</hibernate-mapping>

src/NHibernate.Test/NHSpecificTest/NH2328/Model.cs renamed to src/NHibernate.Test/NHSpecificTest/GH1774/Model.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace NHibernate.Test.NHSpecificTest.NH2328
1+
namespace NHibernate.Test.NHSpecificTest.GH1774
22
{
33
public class ToyBox
44
{
@@ -20,4 +20,4 @@ public class Square : IShape
2020
{
2121
public virtual int Id { get; set; }
2222
}
23-
}
23+
}

0 commit comments

Comments
 (0)