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
This commit is contained in:
parent
41b023946d
commit
eafda78fc4
@ -133,7 +133,7 @@ create_ctas_internal(List *attrList, IntoClause *into)
|
|||||||
if (is_matview)
|
if (is_matview)
|
||||||
{
|
{
|
||||||
/* StoreViewQuery scribbles on tree, so make a copy */
|
/* StoreViewQuery scribbles on tree, so make a copy */
|
||||||
Query *query = (Query *) copyObject(into->viewQuery);
|
Query *query = copyObject(into->viewQuery);
|
||||||
|
|
||||||
StoreViewQuery(intoRelationAddr.objectId, query, false);
|
StoreViewQuery(intoRelationAddr.objectId, query, false);
|
||||||
CommandCounterIncrement();
|
CommandCounterIncrement();
|
||||||
|
@ -3077,7 +3077,7 @@ transformCreateTableAsStmt(ParseState *pstate, CreateTableAsStmt *stmt)
|
|||||||
* in the IntoClause because that's where intorel_startup() can
|
* in the IntoClause because that's where intorel_startup() can
|
||||||
* conveniently get it from.
|
* conveniently get it from.
|
||||||
*/
|
*/
|
||||||
stmt->into->viewQuery = (Node *) copyObject(query);
|
stmt->into->viewQuery = copyObject(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* represent the command as a utility Query */
|
/* represent the command as a utility Query */
|
||||||
|
@ -152,8 +152,8 @@ typedef struct TableFunc
|
|||||||
* For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten
|
* For CREATE MATERIALIZED VIEW, viewQuery is the parsed-but-not-rewritten
|
||||||
* SELECT Query for the view; otherwise it's NULL. This is irrelevant in
|
* SELECT Query for the view; otherwise it's NULL. This is irrelevant in
|
||||||
* the query jumbling as CreateTableAsStmt already includes a reference to
|
* the query jumbling as CreateTableAsStmt already includes a reference to
|
||||||
* its own Query, so ignore it. (Although it's actually Query*, we declare
|
* its own Query, so ignore it. (We declare it as struct Query* to avoid a
|
||||||
* it as Node* to avoid a forward reference.)
|
* forward reference.)
|
||||||
*/
|
*/
|
||||||
typedef struct IntoClause
|
typedef struct IntoClause
|
||||||
{
|
{
|
||||||
@ -166,7 +166,7 @@ typedef struct IntoClause
|
|||||||
OnCommitAction onCommit; /* what do we do at COMMIT? */
|
OnCommitAction onCommit; /* what do we do at COMMIT? */
|
||||||
char *tableSpaceName; /* table space to use, or NULL */
|
char *tableSpaceName; /* table space to use, or NULL */
|
||||||
/* materialized view's SELECT query */
|
/* 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 */
|
bool skipData; /* true for WITH NO DATA */
|
||||||
} IntoClause;
|
} IntoClause;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user