diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index 92a0ab6..e8de6ac 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -2617,7 +2617,7 @@ deparseFuncExpr(FuncExpr *node, deparse_expr_cxt *context) { if (!first) appendStringInfoString(buf, ", "); - if (use_variadic && lnext(arg) == NULL) + if (use_variadic && list_cell_is_last(arg)) appendStringInfoString(buf, "VARIADIC "); deparseExpr((Expr *) lfirst(arg), context); first = false; @@ -2945,7 +2945,7 @@ deparseAggref(Aggref *node, deparse_expr_cxt *context) first = false; /* Add VARIADIC */ - if (use_variadic && lnext(arg) == NULL) + if (use_variadic && list_cell_is_last(arg)) appendStringInfoString(buf, "VARIADIC "); deparseExpr((Expr *) n, context); diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 1831ea8..c3d898e 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -254,7 +254,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString, queryString, params, queryEnv); /* Separate plans with an appropriate separator */ - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) ExplainSeparatePlans(es); } } diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index a98c836..f7a1333 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -692,7 +692,7 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es, /* No need for CommandCounterIncrement, as ExplainOnePlan did it */ /* Separate plans with an appropriate separator */ - if (lnext(p) != NULL) + if (list_cell_is_not_last(p)) ExplainSeparatePlans(es); } diff --git a/src/backend/commands/seclabel.c b/src/backend/commands/seclabel.c index 9db8228..e0cc3e9 100644 --- a/src/backend/commands/seclabel.c +++ b/src/backend/commands/seclabel.c @@ -58,7 +58,7 @@ ExecSecLabelStmt(SecLabelStmt *stmt) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("no security label providers have been loaded"))); - if (lnext(list_head(label_provider_list)) != NULL) + if (list_length(label_provider_list) > 1) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("must specify provider when multiple security label providers have been loaded"))); diff --git a/src/backend/commands/tsearchcmds.c b/src/backend/commands/tsearchcmds.c index 8e5eec2..7c8990a 100644 --- a/src/backend/commands/tsearchcmds.c +++ b/src/backend/commands/tsearchcmds.c @@ -1558,7 +1558,7 @@ serialize_deflist(List *deflist) appendStringInfoChar(&buf, ch); } appendStringInfoChar(&buf, '\''); - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) appendStringInfoString(&buf, ", "); } diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 65302fe..7232552 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -218,7 +218,7 @@ _outList(StringInfo str, const List *node) if (IsA(node, List)) { outNode(str, lfirst(lc)); - if (lnext(lc)) + if (list_cell_is_not_last(lc)) appendStringInfoChar(str, ' '); } else if (IsA(node, IntList)) diff --git a/src/backend/nodes/print.c b/src/backend/nodes/print.c index 4b9e141..8fb8634 100644 --- a/src/backend/nodes/print.c +++ b/src/backend/nodes/print.c @@ -410,7 +410,7 @@ print_expr(const Node *expr, const List *rtable) foreach(l, e->args) { print_expr(lfirst(l), rtable); - if (lnext(l)) + if (list_cell_is_not_last(l)) printf(","); } printf(")"); @@ -453,7 +453,7 @@ print_pathkeys(const List *pathkeys, const List *rtable) print_expr((Node *) mem->em_expr, rtable); } printf(")"); - if (lnext(i)) + if (list_cell_is_not_last(i)) printf(", "); } printf(")\n"); diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 0debac7..0c14af2 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -3721,7 +3721,7 @@ print_restrictclauses(PlannerInfo *root, List *clauses) RestrictInfo *c = lfirst(l); print_expr((Node *) c->clause, root->parse->rtable); - if (lnext(l)) + if (list_cell_is_not_last(l)) printf(", "); } } diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index 3434219..bd94800 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -1558,7 +1558,7 @@ choose_bitmap_and(PlannerInfo *root, RelOptInfo *rel, List *paths) /* reject new path, remove it from paths list */ paths = list_delete_cell(paths, lnext(lastcell), lastcell); } - Assert(lnext(lastcell) == NULL); + Assert(list_cell_is_last(lastcell)); } /* Keep the cheapest AND-group (or singleton) */ diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index bc81535..e6a7d00 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -4581,7 +4581,7 @@ create_one_window_path(PlannerInfo *root, -1.0); } - if (lnext(l)) + if (list_cell_is_not_last(l)) { /* * Add the current WindowFuncs to the output target for this diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 555c91f..0f8663f 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -565,7 +565,7 @@ build_subplan(PlannerInfo *root, Plan *plan, PlannerInfo *subroot, { ptr += sprintf(ptr, "$%d%s", lfirst_int(lc), - lnext(lc) ? "," : ")"); + list_cell_is_not_last(lc) ? "," : ")"); } } diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index 14d1c67..a5e7207 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -997,7 +997,7 @@ split_pathtarget_at_srfs(PlannerInfo *root, List *level_srfs = (List *) lfirst(lc1); PathTarget *ntarget; - if (lnext(lc1) == NULL) + if (list_cell_is_last(lc1)) { ntarget = target; } diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0279013..96077ec 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -15509,7 +15509,7 @@ makeColumnRef(char *colname, List *indirection, else if (IsA(lfirst(l), A_Star)) { /* We only allow '*' at the end of a ColumnRef */ - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) parser_yyerror("improper use of \"*\""); } nfields++; @@ -15698,7 +15698,7 @@ check_indirection(List *indirection, core_yyscan_t yyscanner) { if (IsA(lfirst(l), A_Star)) { - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) parser_yyerror("improper use of \"*\""); } } diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index def6c03..ab32e59 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -355,7 +355,7 @@ perform_base_backup(basebackup_options *opt) */ if (opt->includewal && ti->path == NULL) { - Assert(lnext(lc) == NULL); + Assert(list_cell_is_last(lc)); } else pq_putemptymessage('c'); /* CopyDone */ diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 8b4d94c..82f275e 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -1224,7 +1224,7 @@ exec_simple_query(const char *query_string) PortalDrop(portal, false); - if (lnext(parsetree_item) == NULL) + if (list_cell_is_last(parsetree_item)) { /* * If this is the last parsetree of the query string, close down diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c index 7f15933..9a31ff1 100644 --- a/src/backend/tcop/pquery.c +++ b/src/backend/tcop/pquery.c @@ -1334,7 +1334,7 @@ PortalRunMulti(Portal portal, * Increment command counter between queries, but not after the last * one. */ - if (lnext(stmtlist_item) != NULL) + if (list_cell_is_not_last(stmtlist_item)) CommandCounterIncrement(); /* diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 6ec795f..3a67d4d 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1070,7 +1070,7 @@ ProcessUtilitySlow(ParseState *pstate, } /* Need CCI between commands */ - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) CommandCounterIncrement(); } @@ -1151,7 +1151,7 @@ ProcessUtilitySlow(ParseState *pstate, } /* Need CCI between commands */ - if (lnext(l) != NULL) + if (list_cell_is_not_last(l)) CommandCounterIncrement(); } diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 85055bb..564bd49 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -2722,7 +2722,7 @@ pg_get_functiondef(PG_FUNCTION_ARGS) char *curname = (char *) lfirst(lc); simple_quote_literal(&buf, curname); - if (lnext(lc)) + if (list_cell_is_not_last(lc)) appendStringInfoString(&buf, ", "); } } @@ -8081,7 +8081,7 @@ get_rule_expr(Node *node, deparse_context *context, appendStringInfo(buf, "hashed %s", splan->plan_name); else appendStringInfoString(buf, splan->plan_name); - if (lnext(lc)) + if (list_cell_is_not_last(lc)) appendStringInfoString(buf, " or "); } appendStringInfoChar(buf, ')'); @@ -9189,7 +9189,7 @@ get_func_expr(FuncExpr *expr, deparse_context *context, { if (nargs++ > 0) appendStringInfoString(buf, ", "); - if (use_variadic && lnext(l) == NULL) + if (use_variadic && list_cell_is_last(l)) appendStringInfoString(buf, "VARIADIC "); get_rule_expr((Node *) lfirst(l), context, true); } diff --git a/src/include/nodes/pg_list.h b/src/include/nodes/pg_list.h index 8dd22e7..a35772d 100644 --- a/src/include/nodes/pg_list.h +++ b/src/include/nodes/pg_list.h @@ -133,6 +133,9 @@ list_length(const List *l) #define llast_oid(l) lfirst_oid(list_tail(l)) #define llast_node(type,l) castNode(type, llast(l)) +#define list_cell_is_last(l) (lnext(l) == NULL) +#define list_cell_is_not_last(l) (lnext(l) != NULL) + /* * Convenience macros for building fixed-length lists */