@@ -7847,14 +7847,13 @@ conversion_error_callback(void *arg)
78477847EquivalenceMember *
78487848find_em_for_rel (PlannerInfo * root , EquivalenceClass * ec , RelOptInfo * rel )
78497849{
7850- ListCell * lc ;
7851-
78527850 PgFdwRelationInfo * fpinfo = (PgFdwRelationInfo * ) rel -> fdw_private ;
7851+ EquivalenceMemberIterator it ;
7852+ EquivalenceMember * em ;
78537853
7854- foreach (lc , ec -> ec_members )
7854+ setup_eclass_member_iterator (& it , ec , rel -> relids );
7855+ while ((em = eclass_member_iterator_next (& it )) != NULL )
78557856 {
7856- EquivalenceMember * em = (EquivalenceMember * ) lfirst (lc );
7857-
78587857 /*
78597858 * Note we require !bms_is_empty, else we'd accept constant
78607859 * expressions which are not suitable for the purpose.
@@ -7908,7 +7907,10 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec,
79087907 while (expr && IsA (expr , RelabelType ))
79097908 expr = ((RelabelType * ) expr )-> arg ;
79107909
7911- /* Locate an EquivalenceClass member matching this expr, if any */
7910+ /*
7911+ * Locate an EquivalenceClass member matching this expr, if any.
7912+ * Ignore child members.
7913+ */
79127914 foreach (lc2 , ec -> ec_members )
79137915 {
79147916 EquivalenceMember * em = (EquivalenceMember * ) lfirst (lc2 );
@@ -7918,9 +7920,8 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec,
79187920 if (em -> em_is_const )
79197921 continue ;
79207922
7921- /* Ignore child members */
7922- if (em -> em_is_child )
7923- continue ;
7923+ /* Child members should not exist in ec_members */
7924+ Assert (!em -> em_is_child );
79247925
79257926 /* Match if same expression (after stripping relabel) */
79267927 em_expr = em -> em_expr ;
0 commit comments