Skip to content

Commit b845938

Browse files
gliljashazzik
authored andcommitted
Fix invalid alias name in Linq Joins (#2231)
1 parent 4d47799 commit b845938

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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.Linq.ByMethod
16+
{
17+
using System.Threading.Tasks;
18+
[TestFixture]
19+
public class JoinTestsAsync : LinqTestCase
20+
{
21+
[Test]
22+
public async Task MultipleLinqJoinsWithSameProjectionNamesAsync()
23+
{
24+
var orders = await (db.Orders
25+
.Join(db.Orders, x => x.OrderId, x => x.OrderId - 1, (order, order1) => new { order, order1 })
26+
.Select(x => new { First = x.order, Second = x.order1 })
27+
.Join(db.Orders, x => x.First.OrderId, x => x.OrderId - 2, (order, order1) => new { order, order1 })
28+
.Select(x => new { FirstId = x.order.First.OrderId, SecondId = x.order.Second.OrderId, ThirdId = x.order1.OrderId })
29+
.ToListAsync());
30+
31+
Assert.That(orders.Count, Is.EqualTo(828));
32+
Assert.IsTrue(orders.All(x => x.FirstId == x.SecondId - 1 && x.SecondId == x.ThirdId - 1));
33+
}
34+
}
35+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Linq;
2+
using NUnit.Framework;
3+
4+
namespace NHibernate.Test.Linq.ByMethod
5+
{
6+
[TestFixture]
7+
public class JoinTests : LinqTestCase
8+
{
9+
[Test]
10+
public void MultipleLinqJoinsWithSameProjectionNames()
11+
{
12+
var orders = db.Orders
13+
.Join(db.Orders, x => x.OrderId, x => x.OrderId - 1, (order, order1) => new { order, order1 })
14+
.Select(x => new { First = x.order, Second = x.order1 })
15+
.Join(db.Orders, x => x.First.OrderId, x => x.OrderId - 2, (order, order1) => new { order, order1 })
16+
.Select(x => new { FirstId = x.order.First.OrderId, SecondId = x.order.Second.OrderId, ThirdId = x.order1.OrderId })
17+
.ToList();
18+
19+
Assert.That(orders.Count, Is.EqualTo(828));
20+
Assert.IsTrue(orders.All(x => x.FirstId == x.SecondId - 1 && x.SecondId == x.ThirdId - 1));
21+
}
22+
}
23+
}

src/NHibernate/Linq/Visitors/QueryModelVisitor.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -519,13 +519,14 @@ public override void VisitJoinClause(JoinClause joinClause, QueryModel queryMode
519519
{
520520
var equalityVisitor = new EqualityHqlGenerator(VisitorParameters);
521521
var whereClause = equalityVisitor.Visit(joinClause.InnerKeySelector, joinClause.OuterKeySelector);
522+
var querySourceName = VisitorParameters.QuerySourceNamer.GetName(joinClause);
522523

523524
_hqlTree.AddWhereClause(whereClause);
524525

525526
_hqlTree.AddFromClause(
526527
_hqlTree.TreeBuilder.Range(
527528
HqlGeneratorExpressionVisitor.Visit(joinClause.InnerSequence, VisitorParameters),
528-
_hqlTree.TreeBuilder.Alias(joinClause.ItemName)));
529+
_hqlTree.TreeBuilder.Alias(querySourceName)));
529530
}
530531

531532
public override void VisitGroupJoinClause(GroupJoinClause groupJoinClause, QueryModel queryModel, int index)

0 commit comments

Comments
 (0)