@@ -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