Skip to content

Commit 341a864

Browse files
committed
Fix NoViableAltException with boolean expression in OrderBy clause
Fixes #1000
1 parent ef7c65a commit 341a864

File tree

3 files changed

+34
-4
lines changed

3 files changed

+34
-4
lines changed

src/NHibernate.Test/Async/Linq/ByMethod/OrderByTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,5 +242,19 @@ public async Task OrderByWithSelectDistinctAndTakeAsync()
242242
{
243243
await (db.Orders.Select(o => o.ShippedTo).Distinct().OrderBy(o => o).Take(1000).ToListAsync());
244244
}
245+
246+
[Test]
247+
public async Task BooleanOrderByDescendingClauseAsync()
248+
{
249+
var query = from c in db.Customers
250+
orderby c.Address.Country == "Belgium" descending, c.Address.Country
251+
select c;
252+
253+
var customers = await (query.ToListAsync());
254+
if (customers.Count > 1)
255+
{
256+
Assert.That(customers[0].Address.Country, Is.EqualTo("Belgium"));
257+
}
258+
}
245259
}
246260
}

src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,5 +230,19 @@ public void OrderByWithSelectDistinctAndTake()
230230
{
231231
db.Orders.Select(o => o.ShippedTo).Distinct().OrderBy(o => o).Take(1000).ToList();
232232
}
233+
234+
[Test]
235+
public void BooleanOrderByDescendingClause()
236+
{
237+
var query = from c in db.Customers
238+
orderby c.Address.Country == "Belgium" descending, c.Address.Country
239+
select c;
240+
241+
var customers = query.ToList();
242+
if (customers.Count > 1)
243+
{
244+
Assert.That(customers[0].Address.Country, Is.EqualTo("Belgium"));
245+
}
246+
}
233247
}
234248
}

src/NHibernate/Linq/Visitors/QueryModelVisitor.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,12 @@ public override void VisitOrderByClause(OrderByClause orderByClause, QueryModel
474474
{
475475
foreach (var clause in orderByClause.Orderings)
476476
{
477-
_hqlTree.AddOrderByClause(HqlGeneratorExpressionVisitor.Visit(clause.Expression, VisitorParameters).AsExpression(),
478-
clause.OrderingDirection == OrderingDirection.Asc
479-
? _hqlTree.TreeBuilder.Ascending()
480-
: (HqlDirectionStatement)_hqlTree.TreeBuilder.Descending());
477+
var orderBy = HqlGeneratorExpressionVisitor.Visit(clause.Expression, VisitorParameters).ToArithmeticExpression();
478+
var direction = clause.OrderingDirection == OrderingDirection.Asc
479+
? _hqlTree.TreeBuilder.Ascending()
480+
: (HqlDirectionStatement)_hqlTree.TreeBuilder.Descending();
481+
482+
_hqlTree.AddOrderByClause(orderBy, direction);
481483
}
482484
}
483485

0 commit comments

Comments
 (0)