Skip to content

Commit 99f6844

Browse files
committed
Optimize away ORDER BY on singletons
1 parent 6ec0c34 commit 99f6844

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

src/EFCore.Relational/Query/SqlExpressions/SelectExpression.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,8 @@ static Expression RemoveConvert(Expression expression)
920920
var actualParentIdentifier = _identifier.Take(outerSelectExpression._identifier.Count).ToList();
921921
for (var j = 0; j < actualParentIdentifier.Count; j++)
922922
{
923-
AppendOrdering(new OrderingExpression(actualParentIdentifier[j].Column, ascending: true));
924-
outerSelectExpression.AppendOrdering(
923+
AppendOrderingInternal(new OrderingExpression(actualParentIdentifier[j].Column, ascending: true));
924+
outerSelectExpression.AppendOrderingInternal(
925925
new OrderingExpression(outerSelectExpression._identifier[j].Column, ascending: true));
926926
}
927927

@@ -1860,6 +1860,11 @@ private static void PopulateGroupByTerms(
18601860
/// <param name="orderingExpression">An ordering expression to use for ordering.</param>
18611861
public void ApplyOrdering(OrderingExpression orderingExpression)
18621862
{
1863+
if (Limit is SqlConstantExpression { Value: 1 })
1864+
{
1865+
return;
1866+
}
1867+
18631868
if (IsDistinct
18641869
|| Limit != null
18651870
|| Offset != null)
@@ -1877,14 +1882,21 @@ public void ApplyOrdering(OrderingExpression orderingExpression)
18771882
/// <param name="orderingExpression">An ordering expression to use for ordering.</param>
18781883
public void AppendOrdering(OrderingExpression orderingExpression)
18791884
{
1880-
if (!_orderings.Any(o => o.Expression.Equals(orderingExpression.Expression)))
1885+
if (Limit is SqlConstantExpression { Value: 1 })
18811886
{
1882-
AppendOrderingInternal(orderingExpression);
1887+
return;
18831888
}
1889+
1890+
AppendOrderingInternal(orderingExpression);
18841891
}
18851892

18861893
private void AppendOrderingInternal(OrderingExpression orderingExpression)
1887-
=> _orderings.Add(orderingExpression.Update(orderingExpression.Expression));
1894+
{
1895+
if (!_orderings.Any(o => o.Expression.Equals(orderingExpression.Expression)))
1896+
{
1897+
_orderings.Add(orderingExpression);
1898+
}
1899+
}
18881900

18891901
/// <summary>
18901902
/// Reverses the existing orderings on the <see cref="SelectExpression" />.

0 commit comments

Comments
 (0)