Skip to content

Commit 9bc4e6a

Browse files
committed
Fix query source naming
1 parent 0796f8b commit 9bc4e6a

File tree

3 files changed

+22
-3
lines changed

3 files changed

+22
-3
lines changed

src/NHibernate.Test/Linq/QueryLock.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,23 @@ from o in c.Orders.WithLock(LockMode.Upgrade)
125125
}
126126
}
127127

128+
[Test]
129+
public void CanSetLockOnBothJoinAndMainComplex()
130+
{
131+
using (session.BeginTransaction())
132+
{
133+
var result = (
134+
from c in db.Customers.Where(x => true).WithLock(LockMode.Upgrade)
135+
from o in c.Orders.Where(x => true).WithLock(LockMode.Upgrade)
136+
select new {o, c}
137+
).ToList();
138+
139+
Assert.That(result, Has.Count.EqualTo(830));
140+
Assert.That(session.GetCurrentLockMode(result[0].o), Is.EqualTo(LockMode.Upgrade));
141+
Assert.That(session.GetCurrentLockMode(result[0].c), Is.EqualTo(LockMode.Upgrade));
142+
}
143+
}
144+
128145
[Test]
129146
public void CanSetLockOnLinqPagingQuery()
130147
{

src/NHibernate/Linq/LockResultOperator.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ namespace NHibernate.Linq
99
{
1010
internal class LockResultOperator : ResultOperatorBase
1111
{
12-
private readonly QuerySourceReferenceExpression _qsrExpression;
12+
private QuerySourceReferenceExpression _qsrExpression;
1313

14-
public string Alias => _qsrExpression.ReferencedQuerySource.ItemName;
14+
public IQuerySource QuerySource => _qsrExpression.ReferencedQuerySource;
1515

1616
public ConstantExpression LockMode { get; }
1717

@@ -38,6 +38,7 @@ public override ResultOperatorBase Clone(CloneContext cloneContext)
3838

3939
public override void TransformExpressions(Func<Expression, Expression> transformation)
4040
{
41+
_qsrExpression = (QuerySourceReferenceExpression) transformation(_qsrExpression);
4142
}
4243
}
4344
}

src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessLock.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ internal class ProcessLock : IResultOperatorProcessor<LockResultOperator>
44
{
55
public void Process(LockResultOperator resultOperator, QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree)
66
{
7-
tree.AddAdditionalCriteria((q, p) => q.SetLockMode(resultOperator.Alias, (LockMode) resultOperator.LockMode.Value));
7+
var alias = queryModelVisitor.VisitorParameters.QuerySourceNamer.GetName(resultOperator.QuerySource);
8+
tree.AddAdditionalCriteria((q, p) => q.SetLockMode(alias, (LockMode) resultOperator.LockMode.Value));
89
}
910
}
1011
}

0 commit comments

Comments
 (0)