diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-01-26 22:09:34 -0500 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-01-26 22:09:34 -0500 |
| commit | 7afd56c3c6d8360a5bfdfb2de30038b239fd756b (patch) | |
| tree | df9eb70bc951cdfe35629861285d5c6f31789ad7 /src/backend/commands | |
| parent | 9ba8a9ce4548bb34b7136b7463a61b2c499979a3 (diff) | |
| download | postgresql-7afd56c3c6d8360a5bfdfb2de30038b239fd756b.tar.gz | |
Use castNode() in a bunch of statement-list-related code.
When I wrote commit ab1f0c822, I really missed the castNode() macro that
Peter E. had proposed shortly before. This back-fills the uses I would
have put it to. It's probably not all that significant, but there are
more assertions here than there were before, and conceivably they will
help catch any bugs associated with those representation changes.
I left behind a number of usages like "(Query *) copyObject(query_var)".
Those could have been converted as well, but Peter has proposed another
notational improvement that would handle copyObject cases automatically,
so I let that be for now.
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/createas.c | 2 | ||||
| -rw-r--r-- | src/backend/commands/explain.c | 15 | ||||
| -rw-r--r-- | src/backend/commands/extension.c | 4 | ||||
| -rw-r--r-- | src/backend/commands/foreigncmds.c | 2 | ||||
| -rw-r--r-- | src/backend/commands/portalcmds.c | 6 | ||||
| -rw-r--r-- | src/backend/commands/prepare.c | 6 | ||||
| -rw-r--r-- | src/backend/commands/tablecmds.c | 2 |
7 files changed, 15 insertions, 22 deletions
diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 02cfcd182d..646a88409f 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -322,7 +322,7 @@ ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString, elog(ERROR, "unexpected rewrite result for %s", is_matview ? "CREATE MATERIALIZED VIEW" : "CREATE TABLE AS SELECT"); - query = (Query *) linitial(rewritten); + query = castNode(Query, linitial(rewritten)); Assert(query->commandType == CMD_SELECT); /* plan the query --- note we disallow parallelism */ diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 5d61a0195e..0a67be031b 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -224,8 +224,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString, * executed repeatedly. (See also the same hack in DECLARE CURSOR and * PREPARE.) XXX FIXME someday. */ - Assert(IsA(stmt->query, Query)); - rewritten = QueryRewrite((Query *) copyObject(stmt->query)); + rewritten = QueryRewrite(castNode(Query, copyObject(stmt->query))); /* emit opening boilerplate */ ExplainBeginOutput(es); @@ -246,7 +245,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString, /* Explain every plan */ foreach(l, rewritten) { - ExplainOneQuery((Query *) lfirst(l), + ExplainOneQuery(castNode(Query, lfirst(l)), CURSOR_OPT_PARALLEL_OK, NULL, es, queryString, params); @@ -395,10 +394,9 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, CreateTableAsStmt *ctas = (CreateTableAsStmt *) utilityStmt; List *rewritten; - Assert(IsA(ctas->query, Query)); - rewritten = QueryRewrite((Query *) copyObject(ctas->query)); + rewritten = QueryRewrite(castNode(Query, copyObject(ctas->query))); Assert(list_length(rewritten) == 1); - ExplainOneQuery((Query *) linitial(rewritten), + ExplainOneQuery(castNode(Query, linitial(rewritten)), 0, ctas->into, es, queryString, params); } @@ -415,10 +413,9 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es, DeclareCursorStmt *dcs = (DeclareCursorStmt *) utilityStmt; List *rewritten; - Assert(IsA(dcs->query, Query)); - rewritten = QueryRewrite((Query *) copyObject(dcs->query)); + rewritten = QueryRewrite(castNode(Query, copyObject(dcs->query))); Assert(list_length(rewritten) == 1); - ExplainOneQuery((Query *) linitial(rewritten), + ExplainOneQuery(castNode(Query, linitial(rewritten)), dcs->options, NULL, es, queryString, params); } diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 554fdc46b4..9680d986a0 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -713,7 +713,7 @@ execute_sql_string(const char *sql, const char *filename) */ foreach(lc1, raw_parsetree_list) { - RawStmt *parsetree = (RawStmt *) lfirst(lc1); + RawStmt *parsetree = castNode(RawStmt, lfirst(lc1)); List *stmt_list; ListCell *lc2; @@ -725,7 +725,7 @@ execute_sql_string(const char *sql, const char *filename) foreach(lc2, stmt_list) { - PlannedStmt *stmt = (PlannedStmt *) lfirst(lc2); + PlannedStmt *stmt = castNode(PlannedStmt, lfirst(lc2)); CommandCounterIncrement(); diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index 476a023ec5..6ff8b6998b 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -1572,7 +1572,7 @@ ImportForeignSchema(ImportForeignSchemaStmt *stmt) */ foreach(lc2, raw_parsetree_list) { - RawStmt *rs = (RawStmt *) lfirst(lc2); + RawStmt *rs = castNode(RawStmt, lfirst(lc2)); CreateForeignTableStmt *cstmt = (CreateForeignTableStmt *) rs->stmt; PlannedStmt *pstmt; diff --git a/src/backend/commands/portalcmds.c b/src/backend/commands/portalcmds.c index 1d3e39299b..29d0430dd8 100644 --- a/src/backend/commands/portalcmds.c +++ b/src/backend/commands/portalcmds.c @@ -42,14 +42,12 @@ void PerformCursorOpen(DeclareCursorStmt *cstmt, ParamListInfo params, const char *queryString, bool isTopLevel) { - Query *query = (Query *) cstmt->query; + Query *query = castNode(Query, cstmt->query); List *rewritten; PlannedStmt *plan; Portal portal; MemoryContext oldContext; - Assert(IsA(query, Query)); /* else parse analysis wasn't done */ - /* * Disallow empty-string cursor name (conflicts with protocol-level * unnamed portal). @@ -85,7 +83,7 @@ PerformCursorOpen(DeclareCursorStmt *cstmt, ParamListInfo params, if (list_length(rewritten) != 1) elog(ERROR, "non-SELECT statement in DECLARE CURSOR"); - query = (Query *) linitial(rewritten); + query = castNode(Query, linitial(rewritten)); if (query->commandType != CMD_SELECT) elog(ERROR, "non-SELECT statement in DECLARE CURSOR"); diff --git a/src/backend/commands/prepare.c b/src/backend/commands/prepare.c index 7d7e3daf1e..7b61da3ef0 100644 --- a/src/backend/commands/prepare.c +++ b/src/backend/commands/prepare.c @@ -265,8 +265,7 @@ ExecuteQuery(ExecuteStmt *stmt, IntoClause *intoClause, ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), errmsg("prepared statement is not a SELECT"))); - pstmt = (PlannedStmt *) linitial(plan_list); - Assert(IsA(pstmt, PlannedStmt)); + pstmt = castNode(PlannedStmt, linitial(plan_list)); if (pstmt->commandType != CMD_SELECT) ereport(ERROR, (errcode(ERRCODE_WRONG_OBJECT_TYPE), @@ -670,9 +669,8 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es, /* Explain each query */ foreach(p, plan_list) { - PlannedStmt *pstmt = (PlannedStmt *) lfirst(p); + PlannedStmt *pstmt = castNode(PlannedStmt, lfirst(p)); - Assert(IsA(pstmt, PlannedStmt)); if (pstmt->commandType != CMD_UTILITY) ExplainOnePlan(pstmt, into, es, query_string, paramLI, NULL); else diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 04b5d9a943..90f2f7f00e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -9281,7 +9281,7 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, querytree_list = NIL; foreach(list_item, raw_parsetree_list) { - RawStmt *rs = (RawStmt *) lfirst(list_item); + RawStmt *rs = castNode(RawStmt, lfirst(list_item)); Node *stmt = rs->stmt; if (IsA(stmt, IndexStmt)) |
