@@ -7847,14 +7847,13 @@ conversion_error_callback(void *arg)
7847
7847
EquivalenceMember *
7848
7848
find_em_for_rel (PlannerInfo * root , EquivalenceClass * ec , RelOptInfo * rel )
7849
7849
{
7850
- ListCell * lc ;
7851
-
7852
7850
PgFdwRelationInfo * fpinfo = (PgFdwRelationInfo * ) rel -> fdw_private ;
7851
+ EquivalenceMemberIterator it ;
7852
+ EquivalenceMember * em ;
7853
7853
7854
- foreach (lc , ec -> ec_members )
7854
+ setup_eclass_member_iterator (& it , ec , rel -> relids );
7855
+ while ((em = eclass_member_iterator_next (& it )) != NULL )
7855
7856
{
7856
- EquivalenceMember * em = (EquivalenceMember * ) lfirst (lc );
7857
-
7858
7857
/*
7859
7858
* Note we require !bms_is_empty, else we'd accept constant
7860
7859
* expressions which are not suitable for the purpose.
@@ -7908,7 +7907,10 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec,
7908
7907
while (expr && IsA (expr , RelabelType ))
7909
7908
expr = ((RelabelType * ) expr )-> arg ;
7910
7909
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
+ */
7912
7914
foreach (lc2 , ec -> ec_members )
7913
7915
{
7914
7916
EquivalenceMember * em = (EquivalenceMember * ) lfirst (lc2 );
@@ -7918,9 +7920,8 @@ find_em_for_rel_target(PlannerInfo *root, EquivalenceClass *ec,
7918
7920
if (em -> em_is_const )
7919
7921
continue ;
7920
7922
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 );
7924
7925
7925
7926
/* Match if same expression (after stripping relabel) */
7926
7927
em_expr = em -> em_expr ;
0 commit comments