diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-04-10 13:51:29 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-04-10 13:51:53 -0400 |
| commit | 8f0530f58061b185dc385df42e62d78a18d4ae3e (patch) | |
| tree | 63d038ae4012dcdcff3b556dde4c654959f8448e /src/backend/optimizer/util | |
| parent | 56dd8e85c40fef3e3c2c10afa186ee30416ec507 (diff) | |
| download | postgresql-8f0530f58061b185dc385df42e62d78a18d4ae3e.tar.gz | |
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
Diffstat (limited to 'src/backend/optimizer/util')
| -rw-r--r-- | src/backend/optimizer/util/clauses.c | 2 | ||||
| -rw-r--r-- | src/backend/optimizer/util/orclauses.c | 2 | ||||
| -rw-r--r-- | src/backend/optimizer/util/restrictinfo.c | 6 |
3 files changed, 5 insertions, 5 deletions
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) { |
