]> granicus.if.org Git - postgresql/commitdiff
Use lfirst_node() and linitial_node() where appropriate in planner.c.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 5 Sep 2017 19:57:48 +0000 (15:57 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 5 Sep 2017 19:57:48 +0000 (15:57 -0400)
There's no particular reason to target this module for the first
wholesale application of these macros; but we gotta start somewhere.

Ashutosh Bapat and Jeevan Chalke

Discussion: https://postgr.es/m/CAFjFpRcNr3r=u0ni=7A4GD9NnHQVq+dkFafzqo2rS6zy=dt1eg@mail.gmail.com

src/backend/optimizer/plan/planner.c

index 966230256eaaa2437eaacab40ac052cb64fbb216..6b79b3ad994b8c6f351e8aff8981dae2b3d33188 100644 (file)
@@ -411,7 +411,7 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
                forboth(lp, glob->subplans, lr, glob->subroots)
                {
                        Plan       *subplan = (Plan *) lfirst(lp);
-                       PlannerInfo *subroot = (PlannerInfo *) lfirst(lr);
+                       PlannerInfo *subroot = lfirst_node(PlannerInfo, lr);
 
                        SS_finalize_plan(subroot, subplan);
                }
@@ -430,7 +430,7 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
        forboth(lp, glob->subplans, lr, glob->subroots)
        {
                Plan       *subplan = (Plan *) lfirst(lp);
-               PlannerInfo *subroot = (PlannerInfo *) lfirst(lr);
+               PlannerInfo *subroot = lfirst_node(PlannerInfo, lr);
 
                lfirst(lp) = set_plan_references(subroot, subplan);
        }
@@ -586,7 +586,7 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
        hasOuterJoins = false;
        foreach(l, parse->rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(l);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, l);
 
                if (rte->rtekind == RTE_JOIN)
                {
@@ -643,7 +643,7 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
        newWithCheckOptions = NIL;
        foreach(l, parse->withCheckOptions)
        {
-               WithCheckOption *wco = (WithCheckOption *) lfirst(l);
+               WithCheckOption *wco = lfirst_node(WithCheckOption, l);
 
                wco->qual = preprocess_expression(root, wco->qual,
                                                                                  EXPRKIND_QUAL);
@@ -663,7 +663,7 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
 
        foreach(l, parse->windowClause)
        {
-               WindowClause *wc = (WindowClause *) lfirst(l);
+               WindowClause *wc = lfirst_node(WindowClause, l);
 
                /* partitionClause/orderClause are sort/group expressions */
                wc->startOffset = preprocess_expression(root, wc->startOffset,
@@ -705,7 +705,7 @@ subquery_planner(PlannerGlobal *glob, Query *parse,
        /* Also need to preprocess expressions within RTEs */
        foreach(l, parse->rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(l);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, l);
                int                     kind;
                ListCell   *lcsq;
 
@@ -1080,7 +1080,7 @@ inheritance_planner(PlannerInfo *root)
        rti = 1;
        foreach(lc, parse->rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc);
 
                if (rte->rtekind == RTE_SUBQUERY)
                        subqueryRTindexes = bms_add_member(subqueryRTindexes, rti);
@@ -1102,7 +1102,7 @@ inheritance_planner(PlannerInfo *root)
        {
                foreach(lc, root->append_rel_list)
                {
-                       AppendRelInfo *appinfo = (AppendRelInfo *) lfirst(lc);
+                       AppendRelInfo *appinfo = lfirst_node(AppendRelInfo, lc);
 
                        if (bms_is_member(appinfo->parent_relid, subqueryRTindexes) ||
                                bms_is_member(appinfo->child_relid, subqueryRTindexes) ||
@@ -1130,7 +1130,7 @@ inheritance_planner(PlannerInfo *root)
         */
        foreach(lc, root->append_rel_list)
        {
-               AppendRelInfo *appinfo = (AppendRelInfo *) lfirst(lc);
+               AppendRelInfo *appinfo = lfirst_node(AppendRelInfo, lc);
                PlannerInfo *subroot;
                RangeTblEntry *child_rte;
                RelOptInfo *sub_final_rel;
@@ -1192,7 +1192,7 @@ inheritance_planner(PlannerInfo *root)
                        subroot->append_rel_list = NIL;
                        foreach(lc2, root->append_rel_list)
                        {
-                               AppendRelInfo *appinfo2 = (AppendRelInfo *) lfirst(lc2);
+                               AppendRelInfo *appinfo2 = lfirst_node(AppendRelInfo, lc2);
 
                                if (bms_is_member(appinfo2->child_relid, modifiableARIindexes))
                                        appinfo2 = copyObject(appinfo2);
@@ -1227,7 +1227,7 @@ inheritance_planner(PlannerInfo *root)
                        rti = 1;
                        foreach(lr, parse->rtable)
                        {
-                               RangeTblEntry *rte = (RangeTblEntry *) lfirst(lr);
+                               RangeTblEntry *rte = lfirst_node(RangeTblEntry, lr);
 
                                if (bms_is_member(rti, subqueryRTindexes))
                                {
@@ -1249,7 +1249,7 @@ inheritance_planner(PlannerInfo *root)
 
                                                foreach(lc2, subroot->append_rel_list)
                                                {
-                                                       AppendRelInfo *appinfo2 = (AppendRelInfo *) lfirst(lc2);
+                                                       AppendRelInfo *appinfo2 = lfirst_node(AppendRelInfo, lc2);
 
                                                        if (bms_is_member(appinfo2->child_relid,
                                                                                          modifiableARIindexes))
@@ -1407,7 +1407,7 @@ inheritance_planner(PlannerInfo *root)
        rti = 1;
        foreach(lc, final_rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc);
 
                root->simple_rte_array[rti++] = rte;
        }
@@ -1556,8 +1556,8 @@ grouping_planner(PlannerInfo *root, bool inheritance_update,
                        /*------
                          translator: %s is a SQL row locking clause such as FOR UPDATE */
                                         errmsg("%s is not allowed with UNION/INTERSECT/EXCEPT",
-                                                       LCS_asString(((RowMarkClause *)
-                                                                                 linitial(parse->rowMarks))->strength))));
+                                                       LCS_asString(linitial_node(RowMarkClause,
+                                                                                                          parse->rowMarks)->strength))));
 
                /*
                 * Calculate pathkeys that represent result ordering requirements
@@ -1687,7 +1687,7 @@ grouping_planner(PlannerInfo *root, bool inheritance_update,
                qp_extra.tlist = tlist;
                qp_extra.activeWindows = activeWindows;
                qp_extra.groupClause = (gset_data
-                                                               ? (gset_data->rollups ? ((RollupData *) linitial(gset_data->rollups))->groupClause : NIL)
+                                                               ? (gset_data->rollups ? linitial_node(RollupData, gset_data->rollups)->groupClause : NIL)
                                                                : parse->groupClause);
 
                /*
@@ -1757,25 +1757,25 @@ grouping_planner(PlannerInfo *root, bool inheritance_update,
                        split_pathtarget_at_srfs(root, final_target, sort_input_target,
                                                                         &final_targets,
                                                                         &final_targets_contain_srfs);
-                       final_target = (PathTarget *) linitial(final_targets);
+                       final_target = linitial_node(PathTarget, final_targets);
                        Assert(!linitial_int(final_targets_contain_srfs));
                        /* likewise for sort_input_target vs. grouping_target */
                        split_pathtarget_at_srfs(root, sort_input_target, grouping_target,
                                                                         &sort_input_targets,
                                                                         &sort_input_targets_contain_srfs);
-                       sort_input_target = (PathTarget *) linitial(sort_input_targets);
+                       sort_input_target = linitial_node(PathTarget, sort_input_targets);
                        Assert(!linitial_int(sort_input_targets_contain_srfs));
                        /* likewise for grouping_target vs. scanjoin_target */
                        split_pathtarget_at_srfs(root, grouping_target, scanjoin_target,
                                                                         &grouping_targets,
                                                                         &grouping_targets_contain_srfs);
-                       grouping_target = (PathTarget *) linitial(grouping_targets);
+                       grouping_target = linitial_node(PathTarget, grouping_targets);
                        Assert(!linitial_int(grouping_targets_contain_srfs));
                        /* scanjoin_target will not have any SRFs precomputed for it */
                        split_pathtarget_at_srfs(root, scanjoin_target, NULL,
                                                                         &scanjoin_targets,
                                                                         &scanjoin_targets_contain_srfs);
-                       scanjoin_target = (PathTarget *) linitial(scanjoin_targets);
+                       scanjoin_target = linitial_node(PathTarget, scanjoin_targets);
                        Assert(!linitial_int(scanjoin_targets_contain_srfs));
                }
                else
@@ -2106,7 +2106,7 @@ preprocess_grouping_sets(PlannerInfo *root)
 
                foreach(lc, parse->groupClause)
                {
-                       SortGroupClause *gc = lfirst(lc);
+                       SortGroupClause *gc = lfirst_node(SortGroupClause, lc);
                        Index           ref = gc->tleSortGroupRef;
 
                        if (ref > maxref)
@@ -2135,7 +2135,7 @@ preprocess_grouping_sets(PlannerInfo *root)
 
                foreach(lc, parse->groupingSets)
                {
-                       List       *gset = lfirst(lc);
+                       List       *gset = (List *) lfirst(lc);
 
                        if (bms_overlap_list(gd->unsortable_refs, gset))
                        {
@@ -2194,7 +2194,7 @@ preprocess_grouping_sets(PlannerInfo *root)
                /*
                 * Get the initial (and therefore largest) grouping set.
                 */
-               gs = linitial(current_sets);
+               gs = linitial_node(GroupingSetData, current_sets);
 
                /*
                 * Order the groupClause appropriately.  If the first grouping set is
@@ -2269,7 +2269,7 @@ remap_to_groupclause_idx(List *groupClause,
 
        foreach(lc, groupClause)
        {
-               SortGroupClause *gc = lfirst(lc);
+               SortGroupClause *gc = lfirst_node(SortGroupClause, lc);
 
                tleref_to_colnum_map[gc->tleSortGroupRef] = ref++;
        }
@@ -2278,7 +2278,7 @@ remap_to_groupclause_idx(List *groupClause,
        {
                List       *set = NIL;
                ListCell   *lc2;
-               GroupingSetData *gs = lfirst(lc);
+               GroupingSetData *gs = lfirst_node(GroupingSetData, lc);
 
                foreach(lc2, gs->set)
                {
@@ -2344,8 +2344,8 @@ preprocess_rowmarks(PlannerInfo *root)
                 * CTIDs invalid.  This is also checked at parse time, but that's
                 * insufficient because of rule substitution, query pullup, etc.
                 */
-               CheckSelectLocking(parse, ((RowMarkClause *)
-                                                                  linitial(parse->rowMarks))->strength);
+               CheckSelectLocking(parse, linitial_node(RowMarkClause,
+                                                                                               parse->rowMarks)->strength);
        }
        else
        {
@@ -2373,7 +2373,7 @@ preprocess_rowmarks(PlannerInfo *root)
        prowmarks = NIL;
        foreach(l, parse->rowMarks)
        {
-               RowMarkClause *rc = (RowMarkClause *) lfirst(l);
+               RowMarkClause *rc = lfirst_node(RowMarkClause, l);
                RangeTblEntry *rte = rt_fetch(rc->rti, parse->rtable);
                PlanRowMark *newrc;
 
@@ -2413,7 +2413,7 @@ preprocess_rowmarks(PlannerInfo *root)
        i = 0;
        foreach(l, parse->rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(l);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, l);
                PlanRowMark *newrc;
 
                i++;
@@ -2772,7 +2772,7 @@ remove_useless_groupby_columns(PlannerInfo *root)
                                                                                   (list_length(parse->rtable) + 1));
        foreach(lc, parse->groupClause)
        {
-               SortGroupClause *sgc = (SortGroupClause *) lfirst(lc);
+               SortGroupClause *sgc = lfirst_node(SortGroupClause, lc);
                TargetEntry *tle = get_sortgroupclause_tle(sgc, parse->targetList);
                Var                *var = (Var *) tle->expr;
 
@@ -2805,7 +2805,7 @@ remove_useless_groupby_columns(PlannerInfo *root)
        relid = 0;
        foreach(lc, parse->rtable)
        {
-               RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc);
+               RangeTblEntry *rte = lfirst_node(RangeTblEntry, lc);
                Bitmapset  *relattnos;
                Bitmapset  *pkattnos;
                Oid                     constraintOid;
@@ -2863,7 +2863,7 @@ remove_useless_groupby_columns(PlannerInfo *root)
 
                foreach(lc, parse->groupClause)
                {
-                       SortGroupClause *sgc = (SortGroupClause *) lfirst(lc);
+                       SortGroupClause *sgc = lfirst_node(SortGroupClause, lc);
                        TargetEntry *tle = get_sortgroupclause_tle(sgc, parse->targetList);
                        Var                *var = (Var *) tle->expr;
 
@@ -2938,11 +2938,11 @@ preprocess_groupclause(PlannerInfo *root, List *force)
         */
        foreach(sl, parse->sortClause)
        {
-               SortGroupClause *sc = (SortGroupClause *) lfirst(sl);
+               SortGroupClause *sc = lfirst_node(SortGroupClause, sl);
 
                foreach(gl, parse->groupClause)
                {
-                       SortGroupClause *gc = (SortGroupClause *) lfirst(gl);
+                       SortGroupClause *gc = lfirst_node(SortGroupClause, gl);
 
                        if (equal(gc, sc))
                        {
@@ -2971,7 +2971,7 @@ preprocess_groupclause(PlannerInfo *root, List *force)
         */
        foreach(gl, parse->groupClause)
        {
-               SortGroupClause *gc = (SortGroupClause *) lfirst(gl);
+               SortGroupClause *gc = lfirst_node(SortGroupClause, gl);
 
                if (list_member_ptr(new_groupclause, gc))
                        continue;                       /* it matched an ORDER BY item */
@@ -3071,7 +3071,7 @@ extract_rollup_sets(List *groupingSets)
 
        for_each_cell(lc, lc1)
        {
-               List       *candidate = lfirst(lc);
+               List       *candidate = (List *) lfirst(lc);
                Bitmapset  *candidate_set = NULL;
                ListCell   *lc2;
                int                     dup_of = 0;
@@ -3228,7 +3228,7 @@ reorder_grouping_sets(List *groupingsets, List *sortclause)
 
        foreach(lc, groupingsets)
        {
-               List       *candidate = lfirst(lc);
+               List       *candidate = (List *) lfirst(lc);
                List       *new_elems = list_difference_int(candidate, previous);
                GroupingSetData *gs = makeNode(GroupingSetData);
 
@@ -3296,7 +3296,7 @@ standard_qp_callback(PlannerInfo *root, void *extra)
        /* We consider only the first (bottom) window in pathkeys logic */
        if (activeWindows != NIL)
        {
-               WindowClause *wc = (WindowClause *) linitial(activeWindows);
+               WindowClause *wc = linitial_node(WindowClause, activeWindows);
 
                root->window_pathkeys = make_pathkeys_for_window(root,
                                                                                                                 wc,
@@ -3384,7 +3384,7 @@ get_number_of_groups(PlannerInfo *root,
 
                        foreach(lc, gd->rollups)
                        {
-                               RollupData *rollup = lfirst(lc);
+                               RollupData *rollup = lfirst_node(RollupData, lc);
                                ListCell   *lc;
 
                                groupExprs = get_sortgrouplist_exprs(rollup->groupClause,
@@ -3395,7 +3395,7 @@ get_number_of_groups(PlannerInfo *root,
                                forboth(lc, rollup->gsets, lc2, rollup->gsets_data)
                                {
                                        List       *gset = (List *) lfirst(lc);
-                                       GroupingSetData *gs = lfirst(lc2);
+                                       GroupingSetData *gs = lfirst_node(GroupingSetData, lc2);
                                        double          numGroups = estimate_num_groups(root,
                                                                                                                                groupExprs,
                                                                                                                                path_rows,
@@ -3420,7 +3420,7 @@ get_number_of_groups(PlannerInfo *root,
                                forboth(lc, gd->hash_sets_idx, lc2, gd->unsortable_sets)
                                {
                                        List       *gset = (List *) lfirst(lc);
-                                       GroupingSetData *gs = lfirst(lc2);
+                                       GroupingSetData *gs = lfirst_node(GroupingSetData, lc2);
                                        double          numGroups = estimate_num_groups(root,
                                                                                                                                groupExprs,
                                                                                                                                path_rows,
@@ -4194,7 +4194,7 @@ consider_groupingsets_paths(PlannerInfo *root,
 
                if (pathkeys_contained_in(root->group_pathkeys, path->pathkeys))
                {
-                       unhashed_rollup = lfirst(l_start);
+                       unhashed_rollup = lfirst_node(RollupData, l_start);
                        exclude_groups = unhashed_rollup->numGroups;
                        l_start = lnext(l_start);
                }
@@ -4219,7 +4219,7 @@ consider_groupingsets_paths(PlannerInfo *root,
 
                for_each_cell(lc, l_start)
                {
-                       RollupData *rollup = lfirst(lc);
+                       RollupData *rollup = lfirst_node(RollupData, lc);
 
                        /*
                         * If we find an unhashable rollup that's not been skipped by the
@@ -4239,7 +4239,7 @@ consider_groupingsets_paths(PlannerInfo *root,
                }
                foreach(lc, sets_data)
                {
-                       GroupingSetData *gs = lfirst(lc);
+                       GroupingSetData *gs = lfirst_node(GroupingSetData, lc);
                        List       *gset = gs->set;
                        RollupData *rollup;
 
@@ -4381,7 +4381,7 @@ consider_groupingsets_paths(PlannerInfo *root,
                        i = 0;
                        for_each_cell(lc, lnext(list_head(gd->rollups)))
                        {
-                               RollupData *rollup = lfirst(lc);
+                               RollupData *rollup = lfirst_node(RollupData, lc);
 
                                if (rollup->hashable)
                                {
@@ -4415,7 +4415,7 @@ consider_groupingsets_paths(PlannerInfo *root,
                                i = 0;
                                for_each_cell(lc, lnext(list_head(gd->rollups)))
                                {
-                                       RollupData *rollup = lfirst(lc);
+                                       RollupData *rollup = lfirst_node(RollupData, lc);
 
                                        if (rollup->hashable)
                                        {
@@ -4437,7 +4437,7 @@ consider_groupingsets_paths(PlannerInfo *root,
 
                foreach(lc, hash_sets)
                {
-                       GroupingSetData *gs = lfirst(lc);
+                       GroupingSetData *gs = lfirst_node(GroupingSetData, lc);
                        RollupData *rollup = makeNode(RollupData);
 
                        Assert(gs->set != NIL);
@@ -4616,7 +4616,7 @@ create_one_window_path(PlannerInfo *root,
 
        foreach(l, activeWindows)
        {
-               WindowClause *wc = (WindowClause *) lfirst(l);
+               WindowClause *wc = lfirst_node(WindowClause, l);
                List       *window_pathkeys;
 
                window_pathkeys = make_pathkeys_for_window(root,
@@ -5280,7 +5280,7 @@ postprocess_setop_tlist(List *new_tlist, List *orig_tlist)
 
        foreach(l, new_tlist)
        {
-               TargetEntry *new_tle = (TargetEntry *) lfirst(l);
+               TargetEntry *new_tle = lfirst_node(TargetEntry, l);
                TargetEntry *orig_tle;
 
                /* ignore resjunk columns in setop result */
@@ -5288,7 +5288,7 @@ postprocess_setop_tlist(List *new_tlist, List *orig_tlist)
                        continue;
 
                Assert(orig_tlist_item != NULL);
-               orig_tle = (TargetEntry *) lfirst(orig_tlist_item);
+               orig_tle = lfirst_node(TargetEntry, orig_tlist_item);
                orig_tlist_item = lnext(orig_tlist_item);
                if (orig_tle->resjunk)  /* should not happen */
                        elog(ERROR, "resjunk output columns are not implemented");
@@ -5316,7 +5316,7 @@ select_active_windows(PlannerInfo *root, WindowFuncLists *wflists)
        actives = NIL;
        foreach(lc, root->parse->windowClause)
        {
-               WindowClause *wc = (WindowClause *) lfirst(lc);
+               WindowClause *wc = lfirst_node(WindowClause, lc);
 
                /* It's only active if wflists shows some related WindowFuncs */
                Assert(wc->winref <= wflists->maxWinRef);
@@ -5339,7 +5339,7 @@ select_active_windows(PlannerInfo *root, WindowFuncLists *wflists)
        result = NIL;
        while (actives != NIL)
        {
-               WindowClause *wc = (WindowClause *) linitial(actives);
+               WindowClause *wc = linitial_node(WindowClause, actives);
                ListCell   *prev;
                ListCell   *next;
 
@@ -5351,7 +5351,7 @@ select_active_windows(PlannerInfo *root, WindowFuncLists *wflists)
                prev = NULL;
                for (lc = list_head(actives); lc; lc = next)
                {
-                       WindowClause *wc2 = (WindowClause *) lfirst(lc);
+                       WindowClause *wc2 = lfirst_node(WindowClause, lc);
 
                        next = lnext(lc);
                        /* framing options are NOT to be compared here! */
@@ -5424,18 +5424,18 @@ make_window_input_target(PlannerInfo *root,
        sgrefs = NULL;
        foreach(lc, activeWindows)
        {
-               WindowClause *wc = (WindowClause *) lfirst(lc);
+               WindowClause *wc = lfirst_node(WindowClause, lc);
                ListCell   *lc2;
 
                foreach(lc2, wc->partitionClause)
                {
-                       SortGroupClause *sortcl = (SortGroupClause *) lfirst(lc2);
+                       SortGroupClause *sortcl = lfirst_node(SortGroupClause, lc2);
 
                        sgrefs = bms_add_member(sgrefs, sortcl->tleSortGroupRef);
                }
                foreach(lc2, wc->orderClause)
                {
-                       SortGroupClause *sortcl = (SortGroupClause *) lfirst(lc2);
+                       SortGroupClause *sortcl = lfirst_node(SortGroupClause, lc2);
 
                        sgrefs = bms_add_member(sgrefs, sortcl->tleSortGroupRef);
                }
@@ -5444,7 +5444,7 @@ make_window_input_target(PlannerInfo *root,
        /* Add in sortgroupref numbers of GROUP BY clauses, too */
        foreach(lc, parse->groupClause)
        {
-               SortGroupClause *grpcl = (SortGroupClause *) lfirst(lc);
+               SortGroupClause *grpcl = lfirst_node(SortGroupClause, lc);
 
                sgrefs = bms_add_member(sgrefs, grpcl->tleSortGroupRef);
        }
@@ -5864,7 +5864,7 @@ adjust_paths_for_srfs(PlannerInfo *root, RelOptInfo *rel,
                Assert(subpath->param_info == NULL);
                forboth(lc1, targets, lc2, targets_contain_srfs)
                {
-                       PathTarget *thistarget = (PathTarget *) lfirst(lc1);
+                       PathTarget *thistarget = lfirst_node(PathTarget, lc1);
                        bool            contains_srfs = (bool) lfirst_int(lc2);
 
                        /* If this level doesn't contain SRFs, do regular projection */
@@ -5897,7 +5897,7 @@ adjust_paths_for_srfs(PlannerInfo *root, RelOptInfo *rel,
                Assert(subpath->param_info == NULL);
                forboth(lc1, targets, lc2, targets_contain_srfs)
                {
-                       PathTarget *thistarget = (PathTarget *) lfirst(lc1);
+                       PathTarget *thistarget = lfirst_node(PathTarget, lc1);
                        bool            contains_srfs = (bool) lfirst_int(lc2);
 
                        /* If this level doesn't contain SRFs, do regular projection */
@@ -6023,7 +6023,7 @@ plan_cluster_use_sort(Oid tableOid, Oid indexOid)
        indexInfo = NULL;
        foreach(lc, rel->indexlist)
        {
-               indexInfo = (IndexOptInfo *) lfirst(lc);
+               indexInfo = lfirst_node(IndexOptInfo, lc);
                if (indexInfo->indexoid == indexOid)
                        break;
        }
@@ -6086,7 +6086,7 @@ get_partitioned_child_rels(PlannerInfo *root, Index rti)
 
        foreach(l, root->pcinfo_list)
        {
-               PartitionedChildRelInfo *pc = lfirst(l);
+               PartitionedChildRelInfo *pc = lfirst_node(PartitionedChildRelInfo, l);
 
                if (pc->parent_relid == rti)
                {