@@ -42,7 +42,10 @@ protected override Provider VisitInclude(IncludeProvider provider)
42
42
var sourceLength = provider . Source . Header . Length ;
43
43
mappings [ provider . Source ] = Merge ( mappings [ provider ] . Where ( i => i < sourceLength ) , provider . FilteredColumns ) ;
44
44
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 ) ) ;
46
49
if ( source == provider . Source ) {
47
50
return provider ;
48
51
}
@@ -110,14 +113,36 @@ protected override Provider VisitSeek(SeekProvider provider)
110
113
111
114
protected override Provider VisitFilter ( FilterProvider provider )
112
115
{
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 ;
114
121
var newSourceProvider = VisitCompilable ( provider . Source ) ;
115
- mappings [ provider ] = mappings [ provider . Source ] ;
122
+ var updatedSourceMappings = mappings [ provider . Source ] ;
123
+ mappings [ provider ] = updatedSourceMappings ;
116
124
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
119
127
? 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
+ //}
121
146
}
122
147
123
148
protected override Provider VisitJoin ( JoinProvider provider )
0 commit comments