Hi!

On 24.10.2024 16:07, hugo wrote:

Hi!

       When looking at the partition-related code, I found that the ispartitioned

field in CreateStmtContext is not used. It looks like we can safely remove it and

avoid invalid assignment logic.

Here's a very simple fix, any suggestion?

diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c

index 1e15ce10b48..6dea85cc2dc 100644

--- a/src/backend/parser/parse_utilcmd.c

+++ b/src/backend/parser/parse_utilcmd.c

@@ -89,7 +89,6 @@ typedef struct

        List *alist;                      /* "after list" of things to do after creating

* the table */

        IndexStmt *pkey;                       /* PRIMARY KEY index, if any */

-       bool ispartitioned;  /* true if table is partitioned */

PartitionBoundSpec *partbound;  /* transformed FOR VALUES */

        bool ofType;                 /* true if statement contains OF typename */

} CreateStmtContext;

@@ -246,7 +245,6 @@ transformCreateStmt(CreateStmt *stmt, const char *queryString)

        cxt.blist = NIL;

        cxt.alist = NIL;

        cxt.pkey = NULL;

- cxt.ispartitioned = stmt->partspec != NULL;

        cxt.partbound = stmt->partbound;

        cxt.ofType = (stmt->ofTypename != NULL);

@@ -3401,7 +3399,6 @@ transformAlterTableStmt(Oid relid, AlterTableStmt *stmt,

        cxt.blist = NIL;

        cxt.alist = NIL;

        cxt.pkey = NULL;

- cxt.ispartitioned = (rel->rd_rel->relkind == RELKIND_PARTITIONED_TABLE);

        cxt.partbound = NULL;

        cxt.ofType = false;

I absolutely agree with you. I found that ispartitioned parameter has been defined but it is never used during optimization.

I also noticed that its local copy is being redefined in the ATExecDropIdentity, ATExecSetIdentity and ATExecAddIdentity functions.

So, I'm willing to agree with you.

BTW, the regression tests were successful.

--
Regards,
Alena Rybakina
Postgres Professional

Reply via email to