Use lfirst_node() and linitial_node() where appropriate in planner.c.
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
This commit is contained in:
parent
153a49bb33
commit
6e427aa4e5
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue