Skip to content

Commit 7f7c905

Browse files
committed
Avoid SelectExpressions list manipulations
1 parent f7fedbc commit 7f7c905

File tree

1 file changed

+8
-17
lines changed

1 file changed

+8
-17
lines changed

src/NHibernate/Hql/Ast/ANTLR/Tree/SelectClause.cs

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,45 +102,35 @@ public void InitializeExplicitSelectClause(FromClause fromClause)
102102
// NOTE: This must be done *before* invoking setScalarColumnText() because setScalarColumnText()
103103
// changes the AST!!!
104104
var inheritedExpressions = new Dictionary<ISelectExpression, SelectClause>();
105-
SelectExpressions = GetSelectExpressions();
106-
OriginalSelectExpressions = SelectExpressions.ToList();
105+
var selExprs = GetSelectExpressions();
106+
OriginalSelectExpressions = selExprs;
107+
SelectExpressions = new List<ISelectExpression>(selExprs.Count);
107108
NonScalarExpressions = new List<ISelectExpression>();
108-
var length = SelectExpressions.Count;
109-
for (var i = 0; i < length; i++)
109+
foreach (var expr in selExprs)
110110
{
111-
var expr = SelectExpressions[i];
112111
if (expr.IsConstructor)
113112
{
114113
_constructorNode = (ConstructorNode) expr;
115114
_scalarSelect = true;
116-
SelectExpressions.RemoveAt(i);
117115
NonScalarExpressions.AddRange(_constructorNode.GetSelectExpressions(true, o => !o.IsScalar));
118116
foreach (var argumentExpression in _constructorNode.GetSelectExpressions())
119117
{
120-
SelectExpressions.Insert(i, argumentExpression);
121-
i++;
118+
SelectExpressions.Add(argumentExpression);
122119
AddExpression(argumentExpression, queryReturnTypeList);
123120
}
124-
125-
i--;
126-
length = SelectExpressions.Count;
127121
}
128122
else if (expr.FromElement is JoinSubqueryFromElement joinSubquery &&
129123
TryProcessSubqueryExpressions(expr, joinSubquery, out var selectClause, out var subqueryExpressions))
130124
{
131-
SelectExpressions.RemoveAt(i);
132125
var indexes = new List<int>(subqueryExpressions.Count);
133126
foreach (var expression in subqueryExpressions)
134127
{
135128
inheritedExpressions[expression] = selectClause;
136-
indexes.Add(i);
137-
SelectExpressions.Insert(i, expression);
138-
i++;
129+
indexes.Add(SelectExpressions.Count);
130+
SelectExpressions.Add(expression);
139131
AddExpression(expression, queryReturnTypeList);
140132
}
141133

142-
i--;
143-
length = SelectExpressions.Count;
144134
_replacedExpressions.Add(expr, indexes);
145135
}
146136
else
@@ -150,6 +140,7 @@ public void InitializeExplicitSelectClause(FromClause fromClause)
150140
NonScalarExpressions.Add(expr);
151141
}
152142

143+
SelectExpressions.Add(expr);
153144
AddExpression(expr, queryReturnTypeList);
154145
}
155146
}

0 commit comments

Comments
 (0)