0001-Improve-node-type-forward-reference.patch
text/plain
Filename: 0001-Improve-node-type-forward-reference.patch
Type: text/plain
Part: 0
Message:
Improve node type forward reference
Patch
Format: format-patch
Series: patch 0001
Subject: Improve node type forward reference
| File | + | − |
|---|---|---|
| src/backend/commands/createas.c | 1 | 1 |
| src/backend/parser/analyze.c | 1 | 1 |
| src/include/nodes/primnodes.h | 2 | 3 |
From df3f09a1d12c91595ad0702a17a2a7d884f5193f Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Mon, 14 Oct 2024 08:52:34 +0200
Subject: [PATCH 1/2] 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.
---
src/backend/commands/createas.c | 2 +-
src/backend/parser/analyze.c | 2 +-
src/include/nodes/primnodes.h | 5 ++---
3 files changed, 4 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 e901203424d..5e5e0b1c5cf 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -3076,7 +3076,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..f2677b2da1d 100644
--- a/src/include/nodes/primnodes.h
+++ b/src/include/nodes/primnodes.h
@@ -152,8 +152,7 @@ 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.
*/
typedef struct IntoClause
{
@@ -166,7 +165,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;
--
2.47.0