Skip to content

Commit 8b9fba7

Browse files
committed
IncludeProvider's hidden column index taken to account while columns optimization
1 parent 06fce7c commit 8b9fba7

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

Orm/Xtensive.Orm/Orm/Rse/Transformation/ColumnMappingInspector.cs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ protected override Provider VisitInclude(IncludeProvider provider)
4242
var sourceLength = provider.Source.Header.Length;
4343
mappings[provider.Source] = Merge(mappings[provider].Where(i => i < sourceLength), provider.FilteredColumns);
4444
var source = VisitCompilable(provider.Source);
45-
mappings[provider] = Merge(mappings[provider], mappings[provider.Source]);
45+
46+
var currentMapping = mappings[provider.Source];
47+
var calulatedColumn = provider.Header.Columns.Last();
48+
mappings[provider] = Merge(currentMapping, EnumerableUtils.One(calulatedColumn.Index));
4649
if (source == provider.Source) {
4750
return provider;
4851
}
@@ -110,14 +113,36 @@ protected override Provider VisitSeek(SeekProvider provider)
110113

111114
protected override Provider VisitFilter(FilterProvider provider)
112115
{
113-
mappings[provider.Source] = Merge(mappings[provider], mappingsGatherer.Gather(provider.Predicate));
116+
var gatheredMappings = mappingsGatherer.Gather(provider.Predicate);
117+
var originalMappingsOfProvider = mappings[provider];
118+
var mergedMappings = Merge(originalMappingsOfProvider, gatheredMappings);
119+
120+
mappings[provider.Source] = mergedMappings;
114121
var newSourceProvider = VisitCompilable(provider.Source);
115-
mappings[provider] = mappings[provider.Source];
122+
var updatedSourceMappings = mappings[provider.Source];
123+
mappings[provider] = updatedSourceMappings;
116124

117-
var predicate = TranslateLambda(provider, provider.Predicate);
118-
return newSourceProvider == provider.Source && predicate == provider.Predicate
125+
var newPredicate = TranslateLambda(provider, provider.Predicate);
126+
return newSourceProvider == provider.Source && newPredicate == provider.Predicate
119127
? provider
120-
: new FilterProvider(newSourceProvider, (Expression<Func<Tuple, bool>>) predicate);
128+
: new FilterProvider(newSourceProvider, (Expression<Func<Tuple, bool>>) newPredicate);
129+
130+
131+
//var isProviderTheSame = newSourceProvider == provider.Source;
132+
//if (isProviderTheSame) {
133+
// // If new source provider is the same as old provider.Source then there must be no changes in its mappings.
134+
// // No remap needed for predicate.
135+
// //if (TranslateLambda(provider, provider.Predicate) != provider.Predicate)
136+
// // throw new Exception("AAAA!!!! Mappings went wrong!!!");
137+
// return provider;
138+
//}
139+
//else {
140+
// // otherwise, there is a chance that new mappings should be applied to predicate
141+
// var newPredicate = TranslateLambda(provider, provider.Predicate);
142+
// return newPredicate == provider.Predicate
143+
// ? provider
144+
// : new FilterProvider(newSourceProvider, (Expression<Func<Tuple, bool>>) newPredicate);
145+
//}
121146
}
122147

123148
protected override Provider VisitJoin(JoinProvider provider)

0 commit comments

Comments
 (0)