Skip to content

Commit 26ab97d

Browse files
committed
pathman: bugfix for multiple joins
1 parent e1ef6f1 commit 26ab97d

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

contrib/pg_pathman/pg_pathman.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,9 @@ append_child_relation(PlannerInfo *root, RelOptInfo *rel, Index rti,
590590
childrel->reltargetlist = lappend(childrel->reltargetlist, new_target);
591591
}
592592

593+
/* Copy attr_needed (used in build_joinrel_tlist() function) */
594+
childrel->attr_needed = rel->attr_needed;
595+
593596
/* Copy restrictions */
594597
childrel->baserestrictinfo = NIL;
595598
forboth(lc, wrappers, lc2, rel->baserestrictinfo)
@@ -761,6 +764,7 @@ change_varno_walker(Node *node, change_varno_context *context)
761764
ListCell *lc;
762765
Var *var;
763766
EquivalenceClass *ec;
767+
EquivalenceMember *em;
764768

765769
if (node == NULL)
766770
return false;
@@ -794,7 +798,13 @@ change_varno_walker(Node *node, change_varno_context *context)
794798
return false;
795799

796800
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+
}
798808
return false;
799809

800810
case T_TargetEntry:

0 commit comments

Comments
 (0)