Skip to content

Commit 587582f

Browse files
committed
Optimize ColumnGatherer
1 parent 759d5a0 commit 587582f

File tree

1 file changed

+10
-19
lines changed

1 file changed

+10
-19
lines changed

Orm/Xtensive.Orm/Orm/Linq/Expressions/Visitors/ColumnGatherer.cs

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,14 @@
44
// Created by: Alexis Kochetov
55
// Created: 2009.05.06
66

7-
using System;
8-
using System.Collections.Generic;
9-
using System.Linq;
107
using System.Linq.Expressions;
118
using Xtensive.Core;
129
using Xtensive.Orm.Rse.Providers;
1310

1411
namespace Xtensive.Orm.Linq.Expressions.Visitors
1512
{
16-
internal sealed class ColumnGatherer : PersistentExpressionVisitor
13+
internal sealed class ColumnGatherer(ColumnExtractionModes columnExtractionModes) : PersistentExpressionVisitor
1714
{
18-
private readonly ColumnExtractionModes columnExtractionModes;
1915
private readonly List<(ColNum, Expression)> columns = new();
2016
private SubQueryExpression topSubquery;
2117

@@ -61,13 +57,15 @@ public static IReadOnlyList<ColNum> GetColumns(Expression expression, ColumnExtr
6157
{
6258
var gatherer = new ColumnGatherer(columnExtractionModes);
6359
gatherer.Visit(expression);
64-
var distinct = gatherer.DistinctValues
65-
? gatherer.columns.Select(p=>p.Item1).Distinct()
66-
: gatherer.columns.Select(p=>p.Item1);
67-
var ordered = gatherer.OrderedValues
68-
? distinct.OrderBy(i => i)
69-
: distinct;
70-
return ordered.ToArray();
60+
var columns = gatherer.columns.Select(p => p.Item1);
61+
if (gatherer.DistinctValues && gatherer.OrderedValues) {
62+
columns = new SortedSet<ColNum>(columns);
63+
}
64+
else {
65+
columns = gatherer.DistinctValues ? columns.Distinct() : columns;
66+
columns = gatherer.OrderedValues ? columns.OrderBy(i => i) : columns;
67+
}
68+
return columns.ToArray();
7169
}
7270

7371
internal override Expression VisitMarker(MarkerExpression expression)
@@ -234,12 +232,5 @@ internal override Expression VisitFullTextExpression(FullTextExpression expressi
234232
VisitColumnExpression(expression.RankExpression);
235233
return expression;
236234
}
237-
238-
// Constructors
239-
240-
private ColumnGatherer(ColumnExtractionModes columnExtractionModes)
241-
{
242-
this.columnExtractionModes = columnExtractionModes;
243-
}
244235
}
245236
}

0 commit comments

Comments
 (0)