diff options
| author | Peter Eisentraut | 2017-02-21 16:33:07 +0000 |
|---|---|---|
| committer | Peter Eisentraut | 2017-02-21 16:59:09 +0000 |
| commit | 38d103763d14baddf3cbfe4b00b501059fc9447f (patch) | |
| tree | a69106fc39af0e181307f40fd3ba43b1930c3fcc /src/backend/optimizer | |
| parent | 4e5ce3c1aeadf81b504bc9d683b67950bd3f8766 (diff) | |
Make more use of castNode()
Diffstat (limited to 'src/backend/optimizer')
| -rw-r--r-- | src/backend/optimizer/path/allpaths.c | 4 | ||||
| -rw-r--r-- | src/backend/optimizer/path/costsize.c | 20 | ||||
| -rw-r--r-- | src/backend/optimizer/path/indxpath.c | 10 | ||||
| -rw-r--r-- | src/backend/optimizer/path/joinrels.c | 3 | ||||
| -rw-r--r-- | src/backend/optimizer/plan/analyzejoins.c | 8 | ||||
| -rw-r--r-- | src/backend/optimizer/plan/createplan.c | 36 | ||||
| -rw-r--r-- | src/backend/optimizer/plan/planner.c | 3 | ||||
| -rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 4 | ||||
| -rw-r--r-- | src/backend/optimizer/plan/subselect.c | 17 | ||||
| -rw-r--r-- | src/backend/optimizer/prep/prepjointree.c | 7 | ||||
| -rw-r--r-- | src/backend/optimizer/prep/prepunion.c | 7 | ||||
| -rw-r--r-- | src/backend/optimizer/util/clauses.c | 10 | ||||
| -rw-r--r-- | src/backend/optimizer/util/orclauses.c | 13 | ||||
| -rw-r--r-- | src/backend/optimizer/util/restrictinfo.c | 12 |
14 files changed, 59 insertions, 95 deletions
diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index eeacf815e35..633b5c1608d 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -2382,8 +2382,8 @@ subquery_is_pushdown_safe(Query *subquery, Query *topquery, if (subquery->setOperations != NULL) return false; /* Check whether setop component output types match top level */ - topop = (SetOperationStmt *) topquery->setOperations; - Assert(topop && IsA(topop, SetOperationStmt)); + topop = castNode(SetOperationStmt, topquery->setOperations); + Assert(topop); compare_tlist_datatypes(subquery->targetList, topop->colTypes, safetyInfo); diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index d01630f8dba..c138f57ebb4 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -682,9 +682,8 @@ extract_nonindex_conditions(List *qual_clauses, List *indexquals) foreach(lc, qual_clauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); - Assert(IsA(rinfo, RestrictInfo)); if (rinfo->pseudoconstant) continue; /* we may drop pseudoconstants here */ if (list_member_ptr(indexquals, rinfo)) @@ -1804,12 +1803,10 @@ cost_windowagg(Path *path, PlannerInfo *root, */ foreach(lc, windowFuncs) { - WindowFunc *wfunc = (WindowFunc *) lfirst(lc); + WindowFunc *wfunc = castNode(WindowFunc, lfirst(lc)); Cost wfunccost; QualCost argcosts; - Assert(IsA(wfunc, WindowFunc)); - wfunccost = get_func_cost(wfunc->winfnoid) * cpu_operator_cost; /* also add the input expressions' cost to per-input-row costs */ @@ -2843,11 +2840,9 @@ final_cost_hashjoin(PlannerInfo *root, HashPath *path, innerbucketsize = 1.0; foreach(hcl, hashclauses) { - RestrictInfo *restrictinfo = (RestrictInfo *) lfirst(hcl); + RestrictInfo *restrictinfo = castNode(RestrictInfo, lfirst(hcl)); Selectivity thisbucketsize; - Assert(IsA(restrictinfo, RestrictInfo)); - /* * First we have to figure out which side of the hashjoin clause * is the inner side. @@ -3537,9 +3532,8 @@ compute_semi_anti_join_factors(PlannerInfo *root, joinquals = NIL; foreach(l, restrictlist) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); - Assert(IsA(rinfo, RestrictInfo)); if (!rinfo->is_pushed_down) joinquals = lappend(joinquals, rinfo); } @@ -3970,9 +3964,8 @@ calc_joinrel_size_estimate(PlannerInfo *root, /* Grovel through the clauses to separate into two lists */ foreach(l, restrictlist) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); - Assert(IsA(rinfo, RestrictInfo)); if (rinfo->is_pushed_down) pushedquals = lappend(pushedquals, rinfo); else @@ -4345,11 +4338,10 @@ set_subquery_size_estimates(PlannerInfo *root, RelOptInfo *rel) */ foreach(lc, subroot->parse->targetList) { - TargetEntry *te = (TargetEntry *) lfirst(lc); + TargetEntry *te = castNode(TargetEntry, lfirst(lc)); Node *texpr = (Node *) te->expr; int32 item_width = 0; - Assert(IsA(te, TargetEntry)); /* junk columns aren't visible to upper query */ if (te->resjunk) continue; diff --git a/src/backend/optimizer/path/indxpath.c b/src/backend/optimizer/path/indxpath.c index d92826bcfc9..9c069983d91 100644 --- a/src/backend/optimizer/path/indxpath.c +++ b/src/backend/optimizer/path/indxpath.c @@ -1273,12 +1273,11 @@ generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel, foreach(lc, clauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); List *pathlist; Path *bitmapqual; ListCell *j; - Assert(IsA(rinfo, RestrictInfo)); /* Ignore RestrictInfos that aren't ORs */ if (!restriction_is_or_clause(rinfo)) continue; @@ -1310,10 +1309,10 @@ generate_bitmap_or_paths(PlannerInfo *root, RelOptInfo *rel, } else { + RestrictInfo *rinfo = castNode(RestrictInfo, orarg); List *orargs; - Assert(IsA(orarg, RestrictInfo)); - Assert(!restriction_is_or_clause((RestrictInfo *) orarg)); + Assert(!restriction_is_or_clause(rinfo)); orargs = list_make1(orarg); indlist = build_paths_for_OR(root, rel, @@ -2174,9 +2173,8 @@ match_clauses_to_index(IndexOptInfo *index, foreach(lc, clauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); - Assert(IsA(rinfo, RestrictInfo)); match_clause_to_index(index, rinfo, clauseset); } } diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index 6f3c20b33ff..0d0068360c1 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -1230,9 +1230,8 @@ restriction_is_constant_false(List *restrictlist, bool only_pushed_down) */ foreach(lc, restrictlist) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); - Assert(IsA(rinfo, RestrictInfo)); 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 438baf1e61f..ac63f7572b6 100644 --- a/src/backend/optimizer/plan/analyzejoins.c +++ b/src/backend/optimizer/plan/analyzejoins.c @@ -596,7 +596,7 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list) */ foreach(l, clause_list) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); Oid op; Var *var; @@ -608,8 +608,7 @@ rel_is_distinct_for(PlannerInfo *root, RelOptInfo *rel, List *clause_list) * caller's mergejoinability test should have selected only * OpExprs. */ - Assert(IsA(rinfo->clause, OpExpr)); - op = ((OpExpr *) rinfo->clause)->opno; + op = castNode(OpExpr, rinfo->clause)->opno; /* caller identified the inner side for us */ if (rinfo->outer_is_left) @@ -782,9 +781,8 @@ query_is_distinct_for(Query *query, List *colnos, List *opids) */ if (query->setOperations) { - SetOperationStmt *topop = (SetOperationStmt *) query->setOperations; + SetOperationStmt *topop = castNode(SetOperationStmt, query->setOperations); - Assert(IsA(topop, SetOperationStmt)); Assert(topop->op != SETOP_NONE); if (!topop->all) diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index 997bdcff2ea..1e953b40d6f 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -508,8 +508,7 @@ create_scan_plan(PlannerInfo *root, Path *best_path, int flags) { case T_IndexScan: case T_IndexOnlyScan: - Assert(IsA(best_path, IndexPath)); - scan_clauses = ((IndexPath *) best_path)->indexinfo->indrestrictinfo; + scan_clauses = castNode(IndexPath, best_path)->indexinfo->indrestrictinfo; break; default: scan_clauses = rel->baserestrictinfo; @@ -2450,9 +2449,8 @@ create_indexscan_plan(PlannerInfo *root, qpqual = NIL; foreach(l, scan_clauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); - Assert(IsA(rinfo, RestrictInfo)); if (rinfo->pseudoconstant) continue; /* we may drop pseudoconstants here */ if (list_member_ptr(indexquals, rinfo)) @@ -2608,10 +2606,9 @@ create_bitmap_scan_plan(PlannerInfo *root, qpqual = NIL; foreach(l, scan_clauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); Node *clause = (Node *) rinfo->clause; - Assert(IsA(rinfo, RestrictInfo)); if (rinfo->pseudoconstant) continue; /* we may drop pseudoconstants here */ if (list_member(indexquals, clause)) @@ -2820,9 +2817,9 @@ create_bitmap_subplan(PlannerInfo *root, Path *bitmapqual, ListCell *l; /* Use the regular indexscan plan build machinery... */ - iscan = (IndexScan *) create_indexscan_plan(root, ipath, - NIL, NIL, false); - Assert(IsA(iscan, IndexScan)); + iscan = castNode(IndexScan, + create_indexscan_plan(root, ipath, + NIL, NIL, false)); /* then convert to a bitmap indexscan */ plan = (Plan *) make_bitmap_indexscan(iscan->scan.scanrelid, iscan->indexid, @@ -3391,13 +3388,13 @@ create_customscan_plan(PlannerInfo *root, CustomPath *best_path, * Invoke custom plan provider to create the Plan node represented by the * CustomPath. */ - cplan = (CustomScan *) best_path->methods->PlanCustomPath(root, - rel, - best_path, - tlist, - scan_clauses, - custom_plans); - Assert(IsA(cplan, CustomScan)); + cplan = castNode(CustomScan, + best_path->methods->PlanCustomPath(root, + rel, + best_path, + tlist, + scan_clauses, + custom_plans)); /* * Copy cost data from Path to Plan; no need to make custom-plan providers @@ -3683,7 +3680,7 @@ create_mergejoin_plan(PlannerInfo *root, i = 0; foreach(lc, best_path->path_mergeclauses) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc)); EquivalenceClass *oeclass; EquivalenceClass *ieclass; PathKey *opathkey; @@ -3693,7 +3690,6 @@ create_mergejoin_plan(PlannerInfo *root, ListCell *l2; /* fetch outer/inner eclass from mergeclause */ - Assert(IsA(rinfo, RestrictInfo)); if (rinfo->outer_is_left) { oeclass = rinfo->left_ec; @@ -4228,12 +4224,10 @@ fix_indexqual_references(PlannerInfo *root, IndexPath *index_path) forboth(lcc, index_path->indexquals, lci, index_path->indexqualcols) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lcc); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lcc)); int indexcol = lfirst_int(lci); Node *clause; - Assert(IsA(rinfo, RestrictInfo)); - /* * Replace any outer-relation variables with nestloop params. * diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 3d33d469713..ca0ae7883e7 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -3963,9 +3963,8 @@ create_one_window_path(PlannerInfo *root, window_target = copy_pathtarget(window_target); foreach(lc2, wflists->windowFuncs[wc->winref]) { - WindowFunc *wfunc = (WindowFunc *) lfirst(lc2); + WindowFunc *wfunc = castNode(WindowFunc, lfirst(lc2)); - Assert(IsA(wfunc, WindowFunc)); 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 be267b9da74..07ddbcf37e9 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -224,11 +224,9 @@ set_plan_references(PlannerInfo *root, Plan *plan) */ foreach(lc, root->rowMarks) { - PlanRowMark *rc = (PlanRowMark *) lfirst(lc); + PlanRowMark *rc = castNode(PlanRowMark, lfirst(lc)); PlanRowMark *newrc; - Assert(IsA(rc, PlanRowMark)); - /* flat copy is enough since all fields are scalars */ newrc = (PlanRowMark *) palloc(sizeof(PlanRowMark)); memcpy(newrc, rc, sizeof(PlanRowMark)); diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 7954c445dd9..3eb2bb749e4 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -433,9 +433,8 @@ 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 = (TargetEntry *) linitial(plan->targetlist); + TargetEntry *tent = castNode(TargetEntry, linitial(plan->targetlist)); - Assert(IsA(tent, TargetEntry)); if (!tent->resjunk) { *coltype = exprType((Node *) tent->expr); @@ -601,14 +600,14 @@ make_subplan(PlannerInfo *root, Query *orig_subquery, AlternativeSubPlan *asplan; /* OK, convert to SubPlan format. */ - hashplan = (SubPlan *) build_subplan(root, plan, subroot, - plan_params, - ANY_SUBLINK, 0, - newtestexpr, - false, true, - best_path->parallel_safe); + hashplan = castNode(SubPlan, + build_subplan(root, plan, subroot, + plan_params, + ANY_SUBLINK, 0, + newtestexpr, + false, true, + best_path->parallel_safe)); /* Check we got what we expected */ - Assert(IsA(hashplan, SubPlan)); Assert(hashplan->parParam == NIL); Assert(hashplan->useHashTable); /* build_subplan won't have filled in paramIds */ diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index 6911177b68a..6c6ac8dc0aa 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -1748,10 +1748,9 @@ is_simple_union_all(Query *subquery) elog(ERROR, "subquery is bogus"); /* Is it a set-operation query at all? */ - topop = (SetOperationStmt *) subquery->setOperations; + topop = castNode(SetOperationStmt, subquery->setOperations); if (!topop) return false; - Assert(IsA(topop, SetOperationStmt)); /* Can't handle ORDER BY, LIMIT/OFFSET, locking, or WITH */ if (subquery->sortClause || @@ -2323,8 +2322,8 @@ flatten_simple_union_all(PlannerInfo *root) RangeTblRef *rtr; /* Shouldn't be called unless query has setops */ - topop = (SetOperationStmt *) parse->setOperations; - Assert(topop && IsA(topop, SetOperationStmt)); + topop = castNode(SetOperationStmt, parse->setOperations); + Assert(topop); /* Can't optimize away a recursive UNION */ if (root->hasRecursion) diff --git a/src/backend/optimizer/prep/prepunion.c b/src/backend/optimizer/prep/prepunion.c index 06e843dff07..1389db18ba2 100644 --- a/src/backend/optimizer/prep/prepunion.c +++ b/src/backend/optimizer/prep/prepunion.c @@ -129,7 +129,7 @@ RelOptInfo * plan_set_operations(PlannerInfo *root) { Query *parse = root->parse; - SetOperationStmt *topop = (SetOperationStmt *) parse->setOperations; + SetOperationStmt *topop = castNode(SetOperationStmt, parse->setOperations); Node *node; RangeTblEntry *leftmostRTE; Query *leftmostQuery; @@ -137,7 +137,7 @@ plan_set_operations(PlannerInfo *root) Path *path; List *top_tlist; - Assert(topop && IsA(topop, SetOperationStmt)); + Assert(topop); /* check for unsupported stuff */ Assert(parse->jointree->fromlist == NIL); @@ -1701,12 +1701,11 @@ translate_col_privs(const Bitmapset *parent_privs, attno = InvalidAttrNumber; foreach(lc, translated_vars) { - Var *var = (Var *) lfirst(lc); + Var *var = castNode(Var, lfirst(lc)); attno++; if (var == NULL) /* ignore dropped columns */ continue; - Assert(IsA(var, Var)); if (whole_row || bms_is_member(attno - FirstLowInvalidHeapAttributeNumber, parent_privs)) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 3dedee6d699..b19380e1b1e 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -2700,9 +2700,8 @@ eval_const_expressions_mutator(Node *node, * Since the underlying operator is "=", must negate * its result */ - Const *csimple = (Const *) simple; + Const *csimple = castNode(Const, simple); - Assert(IsA(csimple, Const)); csimple->constvalue = BoolGetDatum(!DatumGetBool(csimple->constvalue)); return (Node *) csimple; @@ -3091,12 +3090,10 @@ eval_const_expressions_mutator(Node *node, const_true_cond = false; foreach(arg, caseexpr->args) { - CaseWhen *oldcasewhen = (CaseWhen *) lfirst(arg); + CaseWhen *oldcasewhen = castNode(CaseWhen, lfirst(arg)); Node *casecond; Node *caseresult; - Assert(IsA(oldcasewhen, CaseWhen)); - /* Simplify this alternative's test condition */ casecond = eval_const_expressions_mutator((Node *) oldcasewhen->expr, context); @@ -4081,8 +4078,7 @@ fetch_function_defaults(HeapTuple func_tuple) if (isnull) elog(ERROR, "not enough default arguments"); str = TextDatumGetCString(proargdefaults); - defaults = (List *) stringToNode(str); - Assert(IsA(defaults, List)); + defaults = castNode(List, stringToNode(str)); pfree(str); return defaults; } diff --git a/src/backend/optimizer/util/orclauses.c b/src/backend/optimizer/util/orclauses.c index c965bb678d3..9cbcaedb75d 100644 --- a/src/backend/optimizer/util/orclauses.c +++ b/src/backend/optimizer/util/orclauses.c @@ -188,9 +188,8 @@ extract_or_clause(RestrictInfo *or_rinfo, RelOptInfo *rel) foreach(lc2, andargs) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc2); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(lc2)); - Assert(IsA(rinfo, RestrictInfo)); if (restriction_is_or_clause(rinfo)) { /* @@ -211,11 +210,11 @@ extract_or_clause(RestrictInfo *or_rinfo, RelOptInfo *rel) } else { - Assert(IsA(orarg, RestrictInfo)); - Assert(!restriction_is_or_clause((RestrictInfo *) orarg)); - if (is_safe_restriction_clause_for((RestrictInfo *) orarg, rel)) - subclauses = lappend(subclauses, - ((RestrictInfo *) orarg)->clause); + RestrictInfo *rinfo = castNode(RestrictInfo, orarg); + + Assert(!restriction_is_or_clause(rinfo)); + if (is_safe_restriction_clause_for(rinfo, rel)) + subclauses = lappend(subclauses, rinfo->clause); } /* diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index 045b5cf5392..6f79f966544 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -335,9 +335,7 @@ get_actual_clauses(List *restrictinfo_list) foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); - - Assert(IsA(rinfo, RestrictInfo)); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); Assert(!rinfo->pseudoconstant); @@ -361,9 +359,7 @@ extract_actual_clauses(List *restrictinfo_list, foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); - - Assert(IsA(rinfo, RestrictInfo)); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); if (rinfo->pseudoconstant == pseudoconstant) result = lappend(result, rinfo->clause); @@ -393,9 +389,7 @@ extract_actual_join_clauses(List *restrictinfo_list, foreach(l, restrictinfo_list) { - RestrictInfo *rinfo = (RestrictInfo *) lfirst(l); - - Assert(IsA(rinfo, RestrictInfo)); + RestrictInfo *rinfo = castNode(RestrictInfo, lfirst(l)); if (rinfo->is_pushed_down) { |
