postgres.git / summary / log / commit / refs

commit    eafda78fc404c706da4cfa254dafb3e97f6cd111
Author:   Peter Eisentraut <peter@eisentraut.org>
Date:     Thu Oct 17 06:36:14 2024 +0000
First released in: 18.0

    Improve node type forward reference
    
    Instead of using Node *, we can use an incomplete struct.  That way,
    everything has the correct type and fewer casts are required.  This
    technique is already used elsewhere in node type definitions.
    
    Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
    Reviewed-by: Tender Wang <tndrwang@gmail.com>
    Discussion: https://www.postgresql.org/message-id/flat/637eeea8-5663-460b-a114-39572c0f6c6e%40eisentraut.org


src/backend/commands/createas.c | 2 +- src/backend/parser/analyze.c | 2 +- src/include/nodes/primnodes.h | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/backend/commands/createas.c b/src/backend/commands/createas.c index 0b629b1f79c..68ec122dbf9 100644 --- a/src/backend/commands/createas.c +++ b/src/backend/commands/createas.c @@ -133,7 +133,7 @@ create_ctas_internal(List *attrList, IntoClause *into) if (is_matview) { /* StoreViewQuery scribbles on tree, so make a copy */ - Query *query = (Query *) copyObject(into->viewQuery); + Query *query = copyObject(into->viewQuery); StoreViewQuery(intoRelationAddr.objectId, query, false); CommandCounterIncrement(); diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c index 2d3d8fcf769..8a6ba1692e8 100644 --- a/src/backend/parser/analyze.c +++ b/src/backend/parser/analyze.c @@ -3077,7 +3077,7 @@ transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt) * in the IntoClause because that's where intorel_startup() can * conveniently get it from. */ - stmt->into->viewQuery = (Node *) copyObject(query); + stmt->into->viewQuery = copyObject(query); } /* represent the command as a utility Query */ diff --git a/src/include/nodes/primnodes.h b/src/include/nodes/primnodes.h index ea47652adb8..5b7b87dea54 100644 --- a/src/include/nodes/primnodes.h +++ b/src/include/nodes/primnodes.h @@ -152,8 +152,8 @@ typedef struct TableFunc * For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten * SELECT Query for the view; otherwise it's NULL. This is irrelevant in * the query jumbling as CreateTableAsStmt already includes a reference to - * its own Query, so ignore it. (Although it's actually Query*, we declare - * it as Node* to avoid a forward reference.) + * its own Query, so ignore it. (We declare it as struct Query* to avoid a + * forward reference.) */ typedef struct IntoClause { @@ -166,7 +166,7 @@ typedef struct IntoClause OnCommitAction onCommit; /* what do we do at COMMIT? */ char *tableSpaceName; /* table space to use, or NULL */ /* materialized view's SELECT query */ - Node *viewQuery pg_node_attr(query_jumble_ignore); + struct Query *viewQuery pg_node_attr(query_jumble_ignore); bool skipData; /* true for WITH NO DATA */ } IntoClause; [parent: 41b023946dfd]