diff options
author | Tom Lane | 2017-04-10 17:51:29 +0000 |
---|---|---|
committer | Tom Lane | 2017-04-10 17:51:53 +0000 |
commit | 8f0530f58061b185dc385df42e62d78a18d4ae3e (patch) | |
tree | 63d038ae4012dcdcff3b556dde4c654959f8448e /src/backend/optimizer | |
parent | 56dd8e85c40fef3e3c2c10afa186ee30416ec507 (diff) |
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')
-rw-r--r-- | src/backend/optimizer/path/costsize.c | 12 | ||||
-rw-r--r-- | src/backend/optimizer/path/indxpath.c | 4 | ||||
-rw-r--r-- | src/backend/optimizer/path/joinrels.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/plan/analyzejoins.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 8 | ||||
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/plan/subselect.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/prep/prepunion.c | 2 | ||||
-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 |
12 files changed, 23 insertions, 23 deletions
diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 1f510c2819..52643d0ad6 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -757,7 +757,7 @@ extract_nonindex_conditions(List *qual_clauses, List *indexquals) foreach(lc, qual_clauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc); if (rinfo->pseudoconstant) continue; /* we may drop pseudoconstants here */ @@ -1990,7 +1990,7 @@ cost_windowagg(Path *path, PlannerInfo *root, */ foreach(lc, windowFuncs) { - WindowFunc *wfunc = castNode(WindowFunc, lfirst(lc)); + WindowFunc *wfunc = lfirst_node(WindowFunc, lc); Cost wfunccost; QualCost argcosts; @@ -3066,7 +3066,7 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path, innerbucketsize = 1.0; foreach(hcl, hashclauses) { - RestrictInfo *restrictinfo = castNode(RestrictInfo, lfirst(hcl)); + RestrictInfo *restrictinfo = lfirst_node(RestrictInfo, hcl); Selectivity thisbucketsize; /* @@ -3760,7 +3760,7 @@ compute_semi_anti_join_factors(PlannerInfo *root, joinquals = NIL; foreach(l, restrictlist) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); if (!rinfo->is_pushed_down) joinquals = lappend(joinquals, rinfo); @@ -4192,7 +4192,7 @@ calc_joinrel_size_estimate(PlannerInfo *root, /* Grovel through the clauses to separate into two lists */ foreach(l, restrictlist) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); if (rinfo->is_pushed_down) pushedquals = lappend(pushedquals, rinfo); @@ -4568,7 +4568,7 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel) */ foreach(lc, subroot->parse->targetList) { - TargetEntry *te = castNode(TargetEntry, lfirst(lc)); + TargetEntry *te = lfirst_node(TargetEntry, lc); Node *texpr = (Node *) te->expr; int32 item_width = 0; diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index cec9822cb7..6e4bae854a 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -1277,7 +1277,7 @@ generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel, foreach(lc, clauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc); List *pathlist; Path *bitmapqual; ListCell *j; @@ -2188,7 +2188,7 @@ match_clauses_to_index(IndexOptInfo *index, foreach(lc, clauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc); match_clause_to_index(index, rinfo, clauseset); } diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index 6a0c67b9ab..5a68de3cc8 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -1250,7 +1250,7 @@ restriction_is_constant_false(List *restrictlist, bool only_pushed_down) */ foreach(lc, restrictlist) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc); if (only_pushed_down && !rinfo->is_pushed_down) continue; diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c index cb283f686e..69b9be4d76 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -601,7 +601,7 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list) */ foreach(l, clause_list) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); Oid op; Var *var; diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 124fef78f5..717b78c161 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -2550,7 +2550,7 @@ create_indexscan_plan(PlannerInfo *root, qpqual = NIL; foreach(l, scan_clauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); if (rinfo->pseudoconstant) continue; /* we may drop pseudoconstants here */ @@ -2710,7 +2710,7 @@ create_bitmap_scan_plan(PlannerInfo *root, qpqual = NIL; foreach(l, scan_clauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); Node *clause = (Node *) rinfo->clause; if (rinfo->pseudoconstant) @@ -3867,7 +3867,7 @@ create_mergejoin_plan(PlannerInfo *root, i = 0; foreach(lc, best_path->path_mergeclauses) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lc); EquivalenceClass *oeclass; EquivalenceClass *ieclass; PathKey *opathkey; @@ -4414,7 +4414,7 @@ fix_indexqual_references(PlannerInfo *root, IndexPath *index_path) forboth(lcc, index_path->indexquals, lci, index_path->indexqualcols) { - RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lcc)); + RestrictInfo *rinfo = lfirst_node(RestrictInfo, lcc); int indexcol = lfirst_int(lci); Node *clause; diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 17cd683d85..4d5ee01b24 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -4631,7 +4631,7 @@ create_one_window_path(PlannerInfo *root, window_target = copy_pathtarget(window_target); foreach(lc2, wflists->windowFuncs[wc->winref]) { - WindowFunc *wfunc = castNode(WindowFunc, lfirst(lc2)); + WindowFunc *wfunc = lfirst_node(WindowFunc, lc2); add_column_to_pathtarget(window_target, (Expr *) wfunc, 0); window_target->width += get_typavgwidth(wfunc->wintype, -1); diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index cdb8e95deb..1278371b65 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -224,7 +224,7 @@ set_plan_references(PlannerInfo *root, Plan *plan) */ foreach(lc, root->rowMarks) { - PlanRowMark *rc = castNode(PlanRowMark, lfirst(lc)); + PlanRowMark *rc = lfirst_node(PlanRowMark, lc); PlanRowMark *newrc; /* flat copy is enough since all fields are scalars */ diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 87cc44d678..8d0d8aed66 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -433,7 +433,7 @@ get_first_col_type(Plan *plan, Oid *coltype, int32 *coltypmod, /* In cases such as EXISTS, tlist might be empty; arbitrarily use VOID */ if (plan->targetlist) { - TargetEntry *tent = castNode(TargetEntry, linitial(plan->targetlist)); + TargetEntry *tent = linitial_node(TargetEntry, plan->targetlist); if (!tent->resjunk) { diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 881d85e26c..a1be858901 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -1750,7 +1750,7 @@ translate_col_privs(const Bitmapset *parent_privs, attno = InvalidAttrNumber; foreach(lc, translated_vars) { - Var *var = castNode(Var, lfirst(lc)); + Var *var = lfirst_node(Var, lc); attno++; if (var == NULL) /* ignore dropped columns */ 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) { |