Skip to content

Commit 74d3786

Browse files
Test duplicated join on some Linq queries
Test for nhibernate#1962
1 parent 1711b5c commit 74d3786

File tree

4 files changed

+128
-0
lines changed

4 files changed

+128
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//------------------------------------------------------------------------------
2+
// <auto-generated>
3+
// This code was generated by AsyncGenerator.
4+
//
5+
// Changes to this file may cause incorrect behavior and will be lost if
6+
// the code is regenerated.
7+
// </auto-generated>
8+
//------------------------------------------------------------------------------
9+
10+
11+
using System.Linq;
12+
using NUnit.Framework;
13+
using NHibernate.Linq;
14+
15+
namespace NHibernate.Test.NHSpecificTest.GH1962
16+
{
17+
using System.Threading.Tasks;
18+
[TestFixture]
19+
public class FixtureAsync : BugTestCase
20+
{
21+
[Test]
22+
[KnownBug("#1962")]
23+
public async Task LinqShouldBeValidAsync()
24+
{
25+
using (var session = OpenSession())
26+
using (session.BeginTransaction())
27+
{
28+
var result =
29+
await (session
30+
.Query<Product>()
31+
.CountAsync(p => p.OrderDetails.Any(od => od.Order.OrderDetails[0] == od)));
32+
Assert.That(result, Is.EqualTo(0));
33+
}
34+
}
35+
}
36+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
using System.Collections.Generic;
2+
3+
namespace NHibernate.Test.NHSpecificTest.GH1962
4+
{
5+
public class Order
6+
{
7+
public virtual int Id { get; protected set; }
8+
9+
public virtual IList<OrderDetail> OrderDetails { get; protected set; } = new List<OrderDetail>();
10+
}
11+
12+
public class Product
13+
{
14+
public virtual int Id { get; protected set; }
15+
public virtual string Name { get; protected set; }
16+
17+
public virtual IList<OrderDetail> OrderDetails { get; protected set; } = new List<OrderDetail>();
18+
}
19+
20+
public class OrderDetail
21+
{
22+
public virtual int Id { get; protected set; }
23+
24+
public virtual Order Order { get; protected set; }
25+
public virtual Product Product { get; protected set; }
26+
}
27+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Linq;
2+
using NUnit.Framework;
3+
4+
namespace NHibernate.Test.NHSpecificTest.GH1962
5+
{
6+
[TestFixture]
7+
public class Fixture : BugTestCase
8+
{
9+
[Test]
10+
[KnownBug("#1962")]
11+
public void LinqShouldBeValid()
12+
{
13+
using (var session = OpenSession())
14+
using (session.BeginTransaction())
15+
{
16+
var result =
17+
session
18+
.Query<Product>()
19+
.Count(p => p.OrderDetails.Any(od => od.Order.OrderDetails[0] == od));
20+
Assert.That(result, Is.EqualTo(0));
21+
}
22+
}
23+
}
24+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test"
3+
namespace="NHibernate.Test.NHSpecificTest.GH1962">
4+
5+
<class name='Order' table='ORDERS'>
6+
<id name='Id' column='ORDER_ID'>
7+
<generator class='assigned'/>
8+
</id>
9+
10+
<list name='OrderDetails' lazy="false" inverse='false' table='ORDER_DETAILS'>
11+
<key column='ORDER_ID'/>
12+
<index column='INDEX_NUMBER'/>
13+
<one-to-many class='OrderDetail'/>
14+
</list>
15+
16+
</class>
17+
18+
<class name='Product' table='PRODUCTS'>
19+
<id name='Id' column='PRODUCT_ID'>
20+
<generator class='assigned'/>
21+
</id>
22+
<property name='Name' column='NAME'/>
23+
24+
<bag name='OrderDetails' lazy="false" inverse='true' table='ORDER_DETAILS'>
25+
<key column='PRODUCT_ID'/>
26+
<one-to-many class='OrderDetail'/>
27+
</bag>
28+
29+
</class>
30+
31+
<class name='OrderDetail' table='ORDER_DETAILS'>
32+
<id name='Id' column='ORDER_DETAIL_ID'>
33+
<generator class='assigned'/>
34+
</id>
35+
36+
<many-to-one name='Order' class='Order' column='ORDER_ID'/>
37+
<many-to-one name='Product' class='Product' column='PRODUCT_ID'/>
38+
39+
</class>
40+
41+
</hibernate-mapping>

0 commit comments

Comments
 (0)