From 8f0530f58061b185dc385df42e62d78a18d4ae3e Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 10 Apr 2017 13:51:29 -0400 Subject: Improve castNode notation by introducing list-extraction-specific variants. This extends the castNode() notation introduced by commit 5bcab1114 to provide, in one step, extraction of a list cell's pointer and coercion to a concrete node type. For example, "lfirst_node(Foo, lc)" is the same as "castNode(Foo, lfirst(lc))". Almost half of the uses of castNode that have appeared so far include a list extraction call, so this is pretty widely useful, and it saves a few more keystrokes compared to the old way. As with the previous patch, back-patch the addition of these macros to pg_list.h, so that the notation will be available when back-patching. Patch by me, after an idea of Andrew Gierth's. Discussion: https://postgr.es/m/14197.1491841216@sss.pgh.pa.us --- src/backend/optimizer/util/clauses.c | 2 +- src/backend/optimizer/util/orclauses.c | 2 +- src/backend/optimizer/util/restrictinfo.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/backend/optimizer/util') diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 59d71c1b32..e196c5e2b5 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -3090,7 +3090,7 @@ eval_const_expressions_mutator(Node *node, const_true_cond = false; foreach(arg, caseexpr->args) { - CaseWhen *oldcasewhen = castNode(CaseWhen, lfirst(arg)); + CaseWhen *oldcasewhen = lfirst_node(CaseWhen, arg); Node *casecond; Node *caseresult; diff --git a/src/backend/optimizer/util/orclauses.c b/src/backend/optimizer/util/orclauses.c index 9cbcaedb75..b6867e3001 100644 --- a/src/backend/optimizer/util/orclauses.c +++ b/src/backend/optimizer/util/orclauses.c @@ -188,7 +188,7 @@ extract_or_clause(RestrictInfo *or_rinfo, RelOptInfo *rel) foreach(lc2, andargs) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc2)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc2); if (restriction_is_or_clause(rinfo)) { diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index 6f79f96654..e946290af5 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -335,7 +335,7 @@ get_actual_clauses(List *restrictinfo_list) foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); Assert(!rinfo->pseudoconstant); @@ -359,7 +359,7 @@ extract_actual_clauses(List *restrictinfo_list, foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); if (rinfo->pseudoconstant == pseudoconstant) result = lappend(result, rinfo->clause); @@ -389,7 +389,7 @@ extract_actual_join_clauses(List *restrictinfo_list, foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); if (rinfo->is_pushed_down) { -- cgit v1.2.1