Thanks to visit codestin.com
Credit goes to github.com

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

0 commit comments

Comments
 (0)