@@ -590,6 +590,9 @@ append_child_relation(PlannerInfo *root, RelOptInfo *rel, Index rti,
590
590
childrel -> reltargetlist = lappend (childrel -> reltargetlist ,new_target );
591
591
}
592
592
593
+ /* Copy attr_needed (used in build_joinrel_tlist() function) */
594
+ childrel -> attr_needed = rel -> attr_needed ;
595
+
593
596
/* Copy restrictions */
594
597
childrel -> baserestrictinfo = NIL ;
595
598
forboth (lc ,wrappers ,lc2 ,rel -> baserestrictinfo )
@@ -761,6 +764,7 @@ change_varno_walker(Node *node, change_varno_context *context)
761
764
ListCell * lc ;
762
765
Var * var ;
763
766
EquivalenceClass * ec ;
767
+ EquivalenceMember * em ;
764
768
765
769
if (node == NULL )
766
770
return false;
@@ -794,7 +798,13 @@ change_varno_walker(Node *node, change_varno_context *context)
794
798
return false;
795
799
796
800
case T_EquivalenceMember :
797
- change_varno_walker ((Node * ) ((EquivalenceMember * )node )-> em_expr ,context );
801
+ em = (EquivalenceMember * )node ;
802
+ change_varno_walker ((Node * )em -> em_expr ,context );
803
+ if (bms_is_member (context -> old_varno ,em -> em_relids ))
804
+ {
805
+ bms_del_member (em -> em_relids ,context -> old_varno );
806
+ bms_add_member (em -> em_relids ,context -> new_varno );
807
+ }
798
808
return false;
799
809
800
810
case T_TargetEntry :