Skip to content

Commit f86c551

Browse files
committed
Refactor ColumnCollection ctor
1 parent d1acc1f commit f86c551

File tree

5 files changed

+21
-16
lines changed

5 files changed

+21
-16
lines changed

Orm/Xtensive.Orm/Orm/Linq/Translator.Expressions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1594,7 +1594,10 @@ private static ProjectionExpression CreateLocalCollectionProjectionExpression(Ty
15941594
{
15951595
var storedEntityType = translator.State.TypeOfEntityStoredInKey;
15961596
var itemToTupleConverter = ItemToTupleConverter.BuildConverter(itemType, storedEntityType, value, translator.context.Model, sourceExpression);
1597-
var rsHeader = new RecordSetHeader(itemToTupleConverter.TupleDescriptor, itemToTupleConverter.TupleDescriptor.Select(x => new SystemColumn(translator.context.GetNextColumnAlias(), 0, x)).Cast<Column>());
1597+
var rsHeader = new RecordSetHeader(
1598+
itemToTupleConverter.TupleDescriptor,
1599+
itemToTupleConverter.TupleDescriptor.Select(x => new SystemColumn(translator.context.GetNextColumnAlias(), 0, x)).Cast<Column>().ToArray(itemToTupleConverter.TupleDescriptor.Count)
1600+
);
15981601
var rawProvider = new RawProvider(rsHeader, itemToTupleConverter.GetEnumerable());
15991602
var recordset = new StoreProvider(rawProvider);
16001603
var itemProjector = new ItemProjectorExpression(itemToTupleConverter.Expression, recordset, translator.context);

Orm/Xtensive.Orm/Orm/Rse/ColumnCollection.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2007-2021 Xtensive LLC.
1+
// Copyright (C) 2007-2022 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Kochetov
@@ -89,7 +89,7 @@ internal Enumerator(IReadOnlyList<Column> list)
8989
/// <returns>The joined collection.</returns>
9090
public ColumnCollection Join(IEnumerable<Column> joined)
9191
{
92-
return new ColumnCollection(this.Concat(joined));
92+
return new ColumnCollection(this.Concat(joined).ToList());
9393
}
9494

9595
/// <summary>
@@ -100,7 +100,7 @@ public ColumnCollection Join(IEnumerable<Column> joined)
100100
public ColumnCollection Alias(string alias)
101101
{
102102
ArgumentValidator.EnsureArgumentNotNullOrEmpty(alias, "alias");
103-
return new ColumnCollection(this.Select(column => column.Clone(alias + "." + column.Name)));
103+
return new ColumnCollection(this.Select(column => column.Clone(alias + "." + column.Name)).ToArray(Count));
104104
}
105105

106106
/// <summary>
@@ -122,9 +122,9 @@ public ColumnCollection Alias(string alias)
122122
/// Initializes a new instance of this class.
123123
/// </summary>
124124
/// <param name="columns">Collection of items to add.</param>
125-
public ColumnCollection(IEnumerable<Column> columns)
125+
public ColumnCollection(IReadOnlyList<Column> columns)
126126
{
127-
this.columns = columns as IReadOnlyList<Column> ?? columns.ToList();
127+
this.columns = columns;
128128
var count = this.columns.Count;
129129
nameIndex = new Dictionary<string, int>(count);
130130
for (var index = count; index-- > 0;) {

Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/ContainsTableProvider.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2016-2020 Xtensive LLC.
1+
// Copyright (C) 2016-2022 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44

@@ -74,7 +74,8 @@ public ContainsTableProvider(FullTextIndexInfo index, Func<ParameterContext, str
7474
var tupleDescriptor = TupleDescriptor.Create(fieldTypes);
7575
var columns = primaryIndexKeyColumns
7676
.Select((c, i) => (Column) new MappedColumn("KEY", i, c.Key.ValueType))
77-
.Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double));
77+
.Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double))
78+
.ToArray(primaryIndexKeyColumns.Count + 1);;
7879
indexHeader = new RecordSetHeader(tupleDescriptor, columns);
7980
}
8081
Initialize();

Orm/Xtensive.Orm/Orm/Rse/Providers/Compilable/FreeTextProvider.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public FreeTextProvider(
6767
var tupleDescriptor = TupleDescriptor.Create(fieldTypes);
6868
var columns = primaryIndexKeyColumns
6969
.Select((c, i) => (Column) new MappedColumn("KEY", i, c.Key.ValueType))
70-
.Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double));
70+
.Append(new MappedColumn("RANK", tupleDescriptor.Count, WellKnownTypes.Double))
71+
.ToArray(primaryIndexKeyColumns.Count + 1);
7172
indexHeader = new RecordSetHeader(tupleDescriptor, columns);
7273
}
7374
Initialize();

Orm/Xtensive.Orm/Orm/Rse/RecordSetHeader.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (C) 2007-2021 Xtensive LLC.
1+
// Copyright (C) 2007-2022 Xtensive LLC.
22
// This code is distributed under MIT license terms.
33
// See the License.txt file in the project root for more information.
44
// Created by: Alexey Kochetov
@@ -181,7 +181,7 @@ public RecordSetHeader Select(IEnumerable<int> selectedColumns)
181181
.Select(o => new KeyValuePair<int, Direction>(columnsMap[o.Key], o.Value))
182182
.TakeWhile(o => o.Key >= 0));
183183

184-
var resultColumns = columns.Select((oldIndex, newIndex) => Columns[oldIndex].Clone(newIndex));
184+
var resultColumns = columns.Select((oldIndex, newIndex) => Columns[oldIndex].Clone(newIndex)).ToArray(columns.Count);
185185

186186
var resultGroups = ColumnGroups
187187
.Where(g => g.Keys.All(k => columnsMap[k]>=0))
@@ -251,7 +251,7 @@ private static RecordSetHeader CreateHeader(IndexInfo indexInfo)
251251
.ToArray(indexInfoKeyColumns.Count);
252252
var keyDescriptor = TupleDescriptor.Create(keyFieldTypes);
253253

254-
var resultColumns = indexInfoColumns.Select((c,i) => (Column) new MappedColumn(new ColumnInfoRef(c), i,c.ValueType));
254+
var resultColumns = indexInfoColumns.Select((c,i) => (Column) new MappedColumn(new ColumnInfoRef(c), i,c.ValueType)).ToArray(indexInfoColumns.Count);
255255
var resultGroups = new[]{indexInfo.Group};
256256

257257
return new RecordSetHeader(
@@ -278,7 +278,7 @@ public override string ToString()
278278
/// <param name="columns">Result columns.</param>
279279
public RecordSetHeader(
280280
TupleDescriptor tupleDescriptor,
281-
IEnumerable<Column> columns)
281+
IReadOnlyList<Column> columns)
282282
: this(tupleDescriptor, columns, null, null, null)
283283
{
284284
}
@@ -291,7 +291,7 @@ public RecordSetHeader(
291291
/// <param name="columnGroups">Column groups.</param>
292292
public RecordSetHeader(
293293
TupleDescriptor tupleDescriptor,
294-
IEnumerable<Column> columns,
294+
IReadOnlyList<Column> columns,
295295
IReadOnlyList<ColumnGroup> columnGroups)
296296
: this(tupleDescriptor, columns, columnGroups, null, null)
297297
{
@@ -306,7 +306,7 @@ public RecordSetHeader(
306306
/// <param name="order">Result sort order.</param>
307307
public RecordSetHeader(
308308
TupleDescriptor tupleDescriptor,
309-
IEnumerable<Column> columns,
309+
IReadOnlyList<Column> columns,
310310
TupleDescriptor orderKeyDescriptor,
311311
DirectionCollection<int> order)
312312
: this(tupleDescriptor, columns, null, orderKeyDescriptor, order)
@@ -324,7 +324,7 @@ public RecordSetHeader(
324324
/// <exception cref="ArgumentOutOfRangeException"><c>columns.Count</c> is out of range.</exception>
325325
public RecordSetHeader(
326326
TupleDescriptor tupleDescriptor,
327-
IEnumerable<Column> columns,
327+
IReadOnlyList<Column> columns,
328328
IReadOnlyList<ColumnGroup> columnGroups,
329329
TupleDescriptor orderKeyDescriptor,
330330
DirectionCollection<int> order)

0 commit comments

Comments
 (0)