Skip to content

Commit f802349

Browse files
committed
Remove excessive MapTransform and ConcatTransform usage from the IncludeProvider
1 parent 64276ac commit f802349

2 files changed

Lines changed: 11 additions & 13 deletions

File tree

Orm/Xtensive.Orm/Orm/Providers/SqlCompiler.Include.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ protected SqlExpression CreateIncludeViaComplexConditionExpression(
7777
IncludeProvider provider, Func<ParameterContext, object> valueAccessor,
7878
IList<SqlExpression> sourceColumns, out QueryParameterBinding binding)
7979
{
80-
var filterTupleDescriptor = provider.FilteredColumnsExtractionTransform.Descriptor;
80+
var filterTupleDescriptor = provider.FilteredTupleDescriptor;
8181
var mappings = filterTupleDescriptor.Select(type => Driver.GetTypeMapping(type));
8282
binding = new QueryRowFilterParameterBinding(mappings, valueAccessor);
8383
var resultExpression = SqlDml.DynamicFilter(binding);
@@ -89,7 +89,7 @@ protected SqlExpression CreateIncludeViaTemporaryTableExpression(
8989
IncludeProvider provider, IList<SqlExpression> sourceColumns,
9090
out TemporaryTableDescriptor tableDescriptor)
9191
{
92-
var filterTupleDescriptor = provider.FilteredColumnsExtractionTransform.Descriptor;
92+
var filterTupleDescriptor = provider.FilteredTupleDescriptor;
9393
var filteredColumns = provider.FilteredColumns.Select(index => sourceColumns[index]).ToList();
9494
tableDescriptor = DomainHandler.TemporaryTableManager
9595
.BuildDescriptor(Mapping, Guid.NewGuid().ToString(), filterTupleDescriptor);

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

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
using Xtensive.Tuples;
1414
using Tuple = Xtensive.Tuples.Tuple;
1515
using Xtensive.Tuples.Transform;
16-
using System.Linq;
1716
using Xtensive.Reflection;
1817

1918
namespace Xtensive.Orm.Rse.Providers
@@ -53,27 +52,26 @@ public sealed class IncludeProvider: UnaryProvider,
5352
/// </summary>
5453
public Expression<Func<ParameterContext, IEnumerable<Tuple>>> FilterDataSource { get; private set; }
5554

56-
public MapTransform FilteredColumnsExtractionTransform { get; private set; }
57-
58-
public ConcatTransform ResultTransform { get; private set; }
55+
public TupleDescriptor FilteredTupleDescriptor { get; private set; }
5956

6057
private static readonly TupleDescriptor BoolTupleDescriptor = TupleDescriptor.Create(new[] {WellKnownTypes.Bool});
6158

6259
/// <inheritdoc/>
6360
protected override RecordSetHeader BuildHeader()
6461
{
65-
var newHeader = Source.Header.Add(new SystemColumn(ResultColumnName, 0, WellKnownTypes.Bool));
62+
return Source.Header.Add(new SystemColumn(ResultColumnName, 0, WellKnownTypes.Bool));
63+
}
64+
65+
protected override void Initialize()
66+
{
67+
base.Initialize();
6668
var fieldTypes = new Type[FilteredColumns.Count];
6769
for (var index = 0; index < fieldTypes.Length; index++) {
68-
fieldTypes[index] = newHeader.Columns[FilteredColumns[index]].Type;
70+
fieldTypes[index] = Header.Columns[FilteredColumns[index]].Type;
6971
}
70-
var tupleDescriptor = TupleDescriptor.Create(fieldTypes);
71-
FilteredColumnsExtractionTransform = new MapTransform(true, tupleDescriptor, FilteredColumns);
72-
ResultTransform = new ConcatTransform(true, Source.Header.TupleDescriptor, BoolTupleDescriptor);
73-
return newHeader;
72+
FilteredTupleDescriptor = TupleDescriptor.Create(fieldTypes);
7473
}
7574

76-
7775
// Constructors
7876

7977
/// <summary>

0 commit comments

Comments
 (0)