Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7afd56c

Browse files
committed
Use castNode() in a bunch of statement-list-related code.
When I wrote commit ab1f0c8, 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.
1 parent 9ba8a9c commit 7afd56c

File tree

20 files changed

+63
-90
lines changed

20 files changed

+63
-90
lines changed

src/backend/catalog/pg_proc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ fmgr_sql_validator(PG_FUNCTION_ARGS)
930930
querytree_list = NIL;
931931
foreach(lc, raw_parsetree_list)
932932
{
933-
RawStmt *parsetree = (RawStmt *) lfirst(lc);
933+
RawStmt *parsetree = castNode(RawStmt, lfirst(lc));
934934
List *querytree_sublist;
935935

936936
querytree_sublist = pg_analyze_and_rewrite_params(parsetree,

src/backend/commands/createas.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ ExecCreateTableAs(CreateTableAsStmt *stmt, const char *queryString,
322322
elog(ERROR, "unexpected rewrite result for %s",
323323
is_matview ? "CREATE MATERIALIZED VIEW" :
324324
"CREATE TABLE AS SELECT");
325-
query = (Query *) linitial(rewritten);
325+
query = castNode(Query, linitial(rewritten));
326326
Assert(query->commandType == CMD_SELECT);
327327

328328
/* plan the query --- note we disallow parallelism */

src/backend/commands/explain.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString,
224224
* executed repeatedly. (See also the same hack in DECLARE CURSOR and
225225
* PREPARE.) XXX FIXME someday.
226226
*/
227-
Assert(IsA(stmt->query, Query));
228-
rewritten = QueryRewrite((Query *) copyObject(stmt->query));
227+
rewritten = QueryRewrite(castNode(Query, copyObject(stmt->query)));
229228

230229
/* emit opening boilerplate */
231230
ExplainBeginOutput(es);
@@ -246,7 +245,7 @@ ExplainQuery(ParseState *pstate, ExplainStmt *stmt, const char *queryString,
246245
/* Explain every plan */
247246
foreach(l, rewritten)
248247
{
249-
ExplainOneQuery((Query *) lfirst(l),
248+
ExplainOneQuery(castNode(Query, lfirst(l)),
250249
CURSOR_OPT_PARALLEL_OK, NULL, es,
251250
queryString, params);
252251

@@ -395,10 +394,9 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es,
395394
CreateTableAsStmt *ctas = (CreateTableAsStmt *) utilityStmt;
396395
List *rewritten;
397396

398-
Assert(IsA(ctas->query, Query));
399-
rewritten = QueryRewrite((Query *) copyObject(ctas->query));
397+
rewritten = QueryRewrite(castNode(Query, copyObject(ctas->query)));
400398
Assert(list_length(rewritten) == 1);
401-
ExplainOneQuery((Query *) linitial(rewritten),
399+
ExplainOneQuery(castNode(Query, linitial(rewritten)),
402400
0, ctas->into, es,
403401
queryString, params);
404402
}
@@ -415,10 +413,9 @@ ExplainOneUtility(Node *utilityStmt, IntoClause *into, ExplainState *es,
415413
DeclareCursorStmt *dcs = (DeclareCursorStmt *) utilityStmt;
416414
List *rewritten;
417415

418-
Assert(IsA(dcs->query, Query));
419-
rewritten = QueryRewrite((Query *) copyObject(dcs->query));
416+
rewritten = QueryRewrite(castNode(Query, copyObject(dcs->query)));
420417
Assert(list_length(rewritten) == 1);
421-
ExplainOneQuery((Query *) linitial(rewritten),
418+
ExplainOneQuery(castNode(Query, linitial(rewritten)),
422419
dcs->options, NULL, es,
423420
queryString, params);
424421
}

src/backend/commands/extension.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,7 @@ execute_sql_string(const char *sql, const char *filename)
713713
*/
714714
foreach(lc1, raw_parsetree_list)
715715
{
716-
RawStmt *parsetree = (RawStmt *) lfirst(lc1);
716+
RawStmt *parsetree = castNode(RawStmt, lfirst(lc1));
717717
List *stmt_list;
718718
ListCell *lc2;
719719

@@ -725,7 +725,7 @@ execute_sql_string(const char *sql, const char *filename)
725725

726726
foreach(lc2, stmt_list)
727727
{
728-
PlannedStmt *stmt = (PlannedStmt *) lfirst(lc2);
728+
PlannedStmt *stmt = castNode(PlannedStmt, lfirst(lc2));
729729

730730
CommandCounterIncrement();
731731

src/backend/commands/foreigncmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1572,7 +1572,7 @@ ImportForeignSchema(ImportForeignSchemaStmt *stmt)
15721572
*/
15731573
foreach(lc2, raw_parsetree_list)
15741574
{
1575-
RawStmt *rs = (RawStmt *) lfirst(lc2);
1575+
RawStmt *rs = castNode(RawStmt, lfirst(lc2));
15761576
CreateForeignTableStmt *cstmt = (CreateForeignTableStmt *) rs->stmt;
15771577
PlannedStmt *pstmt;
15781578

src/backend/commands/portalcmds.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,12 @@ void
4242
PerformCursorOpen(DeclareCursorStmt *cstmt, ParamListInfo params,
4343
const char *queryString, bool isTopLevel)
4444
{
45-
Query *query = (Query *) cstmt->query;
45+
Query *query = castNode(Query, cstmt->query);
4646
List *rewritten;
4747
PlannedStmt *plan;
4848
Portal portal;
4949
MemoryContext oldContext;
5050

51-
Assert(IsA(query, Query)); /* else parse analysis wasn't done */
52-
5351
/*
5452
* Disallow empty-string cursor name (conflicts with protocol-level
5553
* unnamed portal).
@@ -85,7 +83,7 @@ PerformCursorOpen(DeclareCursorStmt *cstmt, ParamListInfo params,
8583
if (list_length(rewritten) != 1)
8684
elog(ERROR, "non-SELECT statement in DECLARE CURSOR");
8785

88-
query = (Query *) linitial(rewritten);
86+
query = castNode(Query, linitial(rewritten));
8987

9088
if (query->commandType != CMD_SELECT)
9189
elog(ERROR, "non-SELECT statement in DECLARE CURSOR");

src/backend/commands/prepare.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,7 @@ ExecuteQuery(ExecuteStmt *stmt, IntoClause *intoClause,
265265
ereport(ERROR,
266266
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
267267
errmsg("prepared statement is not a SELECT")));
268-
pstmt = (PlannedStmt *) linitial(plan_list);
269-
Assert(IsA(pstmt, PlannedStmt));
268+
pstmt = castNode(PlannedStmt, linitial(plan_list));
270269
if (pstmt->commandType != CMD_SELECT)
271270
ereport(ERROR,
272271
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
@@ -670,9 +669,8 @@ ExplainExecuteQuery(ExecuteStmt *execstmt, IntoClause *into, ExplainState *es,
670669
/* Explain each query */
671670
foreach(p, plan_list)
672671
{
673-
PlannedStmt *pstmt = (PlannedStmt *) lfirst(p);
672+
PlannedStmt *pstmt = castNode(PlannedStmt, lfirst(p));
674673

675-
Assert(IsA(pstmt, PlannedStmt));
676674
if (pstmt->commandType != CMD_UTILITY)
677675
ExplainOnePlan(pstmt, into, es, query_string, paramLI, NULL);
678676
else

src/backend/commands/tablecmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9281,7 +9281,7 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd,
92819281
querytree_list = NIL;
92829282
foreach(list_item, raw_parsetree_list)
92839283
{
9284-
RawStmt *rs = (RawStmt *) lfirst(list_item);
9284+
RawStmt *rs = castNode(RawStmt, lfirst(list_item));
92859285
Node *stmt = rs->stmt;
92869286

92879287
if (IsA(stmt, IndexStmt))

src/backend/executor/functions.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ init_sql_fcache(FmgrInfo *finfo, Oid collation, bool lazyEvalOK)
707707
flat_query_list = NIL;
708708
foreach(lc, raw_parsetree_list)
709709
{
710-
RawStmt *parsetree = (RawStmt *) lfirst(lc);
710+
RawStmt *parsetree = castNode(RawStmt, lfirst(lc));
711711
List *queryTree_sublist;
712712

713713
queryTree_sublist = pg_analyze_and_rewrite_params(parsetree,
@@ -1551,7 +1551,7 @@ check_sql_fn_retval(Oid func_id, Oid rettype, List *queryTreeList,
15511551
parse = NULL;
15521552
foreach(lc, queryTreeList)
15531553
{
1554-
Query *q = (Query *) lfirst(lc);
1554+
Query *q = castNode(Query, lfirst(lc));
15551555

15561556
if (q->canSetTag)
15571557
parse = q;

src/backend/executor/spi.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,9 +1232,9 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
12321232
if (!(portal->cursorOptions & (CURSOR_OPT_SCROLL | CURSOR_OPT_NO_SCROLL)))
12331233
{
12341234
if (list_length(stmt_list) == 1 &&
1235-
((PlannedStmt *) linitial(stmt_list))->commandType != CMD_UTILITY &&
1236-
((PlannedStmt *) linitial(stmt_list))->rowMarks == NIL &&
1237-
ExecSupportsBackwardScan(((PlannedStmt *) linitial(stmt_list))->planTree))
1235+
castNode(PlannedStmt, linitial(stmt_list))->commandType != CMD_UTILITY &&
1236+
castNode(PlannedStmt, linitial(stmt_list))->rowMarks == NIL &&
1237+
ExecSupportsBackwardScan(castNode(PlannedStmt, linitial(stmt_list))->planTree))
12381238
portal->cursorOptions |= CURSOR_OPT_SCROLL;
12391239
else
12401240
portal->cursorOptions |= CURSOR_OPT_NO_SCROLL;
@@ -1248,8 +1248,8 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
12481248
if (portal->cursorOptions & CURSOR_OPT_SCROLL)
12491249
{
12501250
if (list_length(stmt_list) == 1 &&
1251-
((PlannedStmt *) linitial(stmt_list))->commandType != CMD_UTILITY &&
1252-
((PlannedStmt *) linitial(stmt_list))->rowMarks != NIL)
1251+
castNode(PlannedStmt, linitial(stmt_list))->commandType != CMD_UTILITY &&
1252+
castNode(PlannedStmt, linitial(stmt_list))->rowMarks != NIL)
12531253
ereport(ERROR,
12541254
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
12551255
errmsg("DECLARE SCROLL CURSOR ... FOR UPDATE/SHARE is not supported"),
@@ -1270,7 +1270,7 @@ SPI_cursor_open_internal(const char *name, SPIPlanPtr plan,
12701270

12711271
foreach(lc, stmt_list)
12721272
{
1273-
PlannedStmt *pstmt = (PlannedStmt *) lfirst(lc);
1273+
PlannedStmt *pstmt = castNode(PlannedStmt, lfirst(lc));
12741274

12751275
if (!CommandIsReadOnly(pstmt))
12761276
{
@@ -1757,7 +1757,7 @@ _SPI_prepare_plan(const char *src, SPIPlanPtr plan)
17571757

17581758
foreach(list_item, raw_parsetree_list)
17591759
{
1760-
RawStmt *parsetree = (RawStmt *) lfirst(list_item);
1760+
RawStmt *parsetree = castNode(RawStmt, lfirst(list_item));
17611761
List *stmt_list;
17621762
CachedPlanSource *plansource;
17631763

@@ -1859,7 +1859,7 @@ _SPI_prepare_oneshot_plan(const char *src, SPIPlanPtr plan)
18591859

18601860
foreach(list_item, raw_parsetree_list)
18611861
{
1862-
RawStmt *parsetree = (RawStmt *) lfirst(list_item);
1862+
RawStmt *parsetree = castNode(RawStmt, lfirst(list_item));
18631863
CachedPlanSource *plansource;
18641864

18651865
plansource = CreateOneShotCachedPlan(parsetree,
@@ -2018,7 +2018,7 @@ _SPI_execute_plan(SPIPlanPtr plan, ParamListInfo paramLI,
20182018

20192019
foreach(lc2, stmt_list)
20202020
{
2021-
PlannedStmt *stmt = (PlannedStmt *) lfirst(lc2);
2021+
PlannedStmt *stmt = castNode(PlannedStmt, lfirst(lc2));
20222022
bool canSetTag = stmt->canSetTag;
20232023
DestReceiver *dest;
20242024

src/backend/parser/gram.y

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,7 +788,7 @@ stmtmulti: stmtmulti ';' stmt
788788
if ($1 != NIL)
789789
{
790790
/* update length of previous stmt */
791-
updateRawStmtEnd((RawStmt *) llast($1), @2);
791+
updateRawStmtEnd(castNode(RawStmt, llast($1)), @2);
792792
}
793793
if ($3 != NULL)
794794
$$ = lappend($1, makeRawStmt($3, @2 + 1));

src/backend/parser/parse_expr.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1502,8 +1502,7 @@ transformMultiAssignRef(ParseState *pstate, MultiAssignRef *maref)
15021502
sublink = (SubLink *) transformExprRecurse(pstate,
15031503
(Node *) sublink);
15041504

1505-
qtree = (Query *) sublink->subselect;
1506-
Assert(IsA(qtree, Query));
1505+
qtree = castNode(Query, sublink->subselect);
15071506

15081507
/* Check subquery returns required number of columns */
15091508
if (count_nonjunk_tlist_entries(qtree->targetList) != maref->ncolumns)
@@ -1578,8 +1577,7 @@ transformMultiAssignRef(ParseState *pstate, MultiAssignRef *maref)
15781577

15791578
sublink = (SubLink *) tle->expr;
15801579
Assert(sublink->subLinkType == MULTIEXPR_SUBLINK);
1581-
qtree = (Query *) sublink->subselect;
1582-
Assert(IsA(qtree, Query));
1580+
qtree = castNode(Query, sublink->subselect);
15831581

15841582
/* Build a Param representing the current subquery output column */
15851583
tle = (TargetEntry *) list_nth(qtree->targetList, maref->colno - 1);

src/backend/parser/parse_type.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,7 +720,7 @@ typeStringToTypeName(const char *str)
720720
*/
721721
if (list_length(raw_parsetree_list) != 1)
722722
goto fail;
723-
stmt = (SelectStmt *) ((RawStmt *) linitial(raw_parsetree_list))->stmt;
723+
stmt = (SelectStmt *) castNode(RawStmt, linitial(raw_parsetree_list))->stmt;
724724
if (stmt == NULL ||
725725
!IsA(stmt, SelectStmt) ||
726726
stmt->distinctClause != NIL ||

src/backend/rewrite/rewriteDefine.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ InsertRule(char *rulname,
173173
if (event_qual != NULL)
174174
{
175175
/* Find query containing OLD/NEW rtable entries */
176-
Query *qry = (Query *) linitial(action);
176+
Query *qry = castNode(Query, linitial(action));
177177

178178
qry = getInsertSelectQuery(qry, NULL);
179179
recordDependencyOnExpr(&myself, event_qual, qry->rtable,
@@ -286,7 +286,7 @@ DefineQueryRewrite(char *rulename,
286286
*/
287287
foreach(l, action)
288288
{
289-
query = (Query *) lfirst(l);
289+
query = castNode(Query, lfirst(l));
290290
if (query->resultRelation == 0)
291291
continue;
292292
/* Don't be fooled by INSERT/SELECT */
@@ -328,7 +328,7 @@ DefineQueryRewrite(char *rulename,
328328
/*
329329
* ... the one action must be a SELECT, ...
330330
*/
331-
query = (Query *) linitial(action);
331+
query = castNode(Query, linitial(action));
332332
if (!is_instead ||
333333
query->commandType != CMD_SELECT)
334334
ereport(ERROR,
@@ -482,7 +482,7 @@ DefineQueryRewrite(char *rulename,
482482

483483
foreach(l, action)
484484
{
485-
query = (Query *) lfirst(l);
485+
query = castNode(Query, lfirst(l));
486486

487487
if (!query->returningList)
488488
continue;
@@ -813,7 +813,7 @@ setRuleCheckAsUser_Query(Query *qry, Oid userid)
813813
{
814814
CommonTableExpr *cte = (CommonTableExpr *) lfirst(l);
815815

816-
setRuleCheckAsUser_Query((Query *) cte->ctequery, userid);
816+
setRuleCheckAsUser_Query(castNode(Query, cte->ctequery), userid);
817817
}
818818

819819
/* If there are sublinks, search for them and process their RTEs */

src/backend/tcop/postgres.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -962,7 +962,7 @@ exec_simple_query(const char *query_string)
962962
*/
963963
foreach(parsetree_item, parsetree_list)
964964
{
965-
RawStmt *parsetree = (RawStmt *) lfirst(parsetree_item);
965+
RawStmt *parsetree = castNode(RawStmt, lfirst(parsetree_item));
966966
bool snapshot_set = false;
967967
const char *commandTag;
968968
char completionTag[COMPLETION_TAG_BUFSIZE];
@@ -1286,7 +1286,7 @@ exec_parse_message(const char *query_string, /* string to execute */
12861286
bool snapshot_set = false;
12871287
int i;
12881288

1289-
raw_parse_tree = (RawStmt *) linitial(parsetree_list);
1289+
raw_parse_tree = castNode(RawStmt, linitial(parsetree_list));
12901290

12911291
/*
12921292
* Get the command name for possible use in status display.
@@ -2148,7 +2148,7 @@ errdetail_execute(List *raw_parsetree_list)
21482148

21492149
foreach(parsetree_item, raw_parsetree_list)
21502150
{
2151-
RawStmt *parsetree = (RawStmt *) lfirst(parsetree_item);
2151+
RawStmt *parsetree = castNode(RawStmt, lfirst(parsetree_item));
21522152

21532153
if (IsA(parsetree->stmt, ExecuteStmt))
21542154
{
@@ -2502,9 +2502,8 @@ IsTransactionExitStmtList(List *pstmts)
25022502
{
25032503
if (list_length(pstmts) == 1)
25042504
{
2505-
PlannedStmt *pstmt = (PlannedStmt *) linitial(pstmts);
2505+
PlannedStmt *pstmt = castNode(PlannedStmt, linitial(pstmts));
25062506

2507-
Assert(IsA(pstmt, PlannedStmt));
25082507
if (pstmt->commandType == CMD_UTILITY &&
25092508
IsTransactionExitStmt(pstmt->utilityStmt))
25102509
return true;
@@ -2518,9 +2517,8 @@ IsTransactionStmtList(List *pstmts)
25182517
{
25192518
if (list_length(pstmts) == 1)
25202519
{
2521-
PlannedStmt *pstmt = (PlannedStmt *) linitial(pstmts);
2520+
PlannedStmt *pstmt = castNode(PlannedStmt, linitial(pstmts));
25222521

2523-
Assert(IsA(pstmt, PlannedStmt));
25242522
if (pstmt->commandType == CMD_UTILITY &&
25252523
IsA(pstmt->utilityStmt, TransactionStmt))
25262524
return true;

src/backend/tcop/pquery.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ PortalStart(Portal portal, ParamListInfo params,
487487
* Create QueryDesc in portal's context; for the moment, set
488488
* the destination to DestNone.
489489
*/
490-
queryDesc = CreateQueryDesc((PlannedStmt *) linitial(portal->stmts),
490+
queryDesc = CreateQueryDesc(castNode(PlannedStmt, linitial(portal->stmts)),
491491
portal->sourceText,
492492
GetActiveSnapshot(),
493493
InvalidSnapshot,
@@ -1020,7 +1020,7 @@ FillPortalStore(Portal portal, bool isTopLevel)
10201020
break;
10211021

10221022
case PORTAL_UTIL_SELECT:
1023-
PortalRunUtility(portal, (PlannedStmt *) linitial(portal->stmts),
1023+
PortalRunUtility(portal, castNode(PlannedStmt, linitial(portal->stmts)),
10241024
isTopLevel, true, treceiver, completionTag);
10251025
break;
10261026

@@ -1215,7 +1215,7 @@ PortalRunMulti(Portal portal,
12151215
*/
12161216
foreach(stmtlist_item, portal->stmts)
12171217
{
1218-
PlannedStmt *pstmt = (PlannedStmt *) lfirst(stmtlist_item);
1218+
PlannedStmt *pstmt = castNode(PlannedStmt, lfirst(stmtlist_item));
12191219

12201220
/*
12211221
* If we got a cancel signal in prior command, quit

0 commit comments

Comments
 (0)