Re: Useless field ispartitioned in CreateStmtContext

From: Kirill Reshke <reshkekirill(at)gmail(dot)com>
To: Alena Rybakina <a(dot)rybakina(at)postgrespro(dot)ru>
Cc: hugo <2689496754(at)qq(dot)com>, pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: Useless field ispartitioned in CreateStmtContext
Date: 2024-10-25 07:31:45
Message-ID: CALdSSPhwp7t0kM1Ts7YRscXVGvAO2Gs2s2B0fKyfXSV8BNA9cg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, 24 Oct 2024 at 19:23, Alena Rybakina <a(dot)rybakina(at)postgrespro(dot)ru> wrote:
>
> 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

Hi all.
This field was introduced by f0e4475

It was useful for various checks [1]
but after we allowed unique keys on partition tables in commit eb7ed3f
[2], this field became unneeded. CreateStmtContext is internal parser
struct, so no not used outside PG core (i mean, by any extension).
So, my suggestion is to remove it.

Hugo, can you please create a CF entry for this patch? Patch itself looks good.

[1] https://github.com/postgres/postgres/blob/f0e44751d7175fa3394da2c8f85e3ceb3cdbfe63/src/backend/parser/parse_utilcmd.c#L617

[2] https://github.com/postgres/postgres/commit/eb7ed3f3063401496e4aa4bd68fa33f0be31a72f#diff-5bd59ecc8991bacaefd56f7fe986287b8d664e62566eb3588c3845d7625cacf1L715

--
Best regards,
Kirill Reshke

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Laurenz Albe 2024-10-25 07:41:40 Re: proposal: schema variables
Previous Message Kirill Reshke 2024-10-25 07:15:23 Re: cache lookup failed when \d t concurrent with DML change column data type