pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Quan Zongliang <quanzongliang@yeah.net>
To: Tender Wang <tndrwang@gmail.com>
To: Peter Eisentraut <peter@eisentraut.org>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Subject: Re: Standardize the definition of the subtype field of AlterDomainStmt
Date: Thu, 29 May 2025 06:09:00 +0800
Message-ID: <5ef3f194-0b7d-46d2-be41-bd27834fe58c@yeah.net> (raw)
In-Reply-To: <CAHewXN=PiSgK9i-pf1JbAZwiPd_RW4nHW=QQQ1thb0MieRyWcg@mail.gmail.com>
References: <41ff310b-16bd-44b9-a3ef-97e20f14b709@yeah.net>
	<bcae60ac-1d2f-443d-a13c-42588e55696a@eisentraut.org>
	<CAHewXN=PiSgK9i-pf1JbAZwiPd_RW4nHW=QQQ1thb0MieRyWcg@mail.gmail.com>

Updated

On 2025/5/28 19:30, Tender Wang wrote:
> 
> 
> Peter Eisentraut <peter@eisentraut.org <mailto:peter@eisentraut.org>> 于 
> 2025年5月28日周三 19:23写道:
> 
>     On 27.05.25 05:06, Quan Zongliang wrote:
>      > I noticed that the subtype of AlterDomainStmt is directly using
>      > constants in the code. It is not conducive to the maintenance and
>      > reading of the code. Based on the definition of AlterTableType, use
>      > "AD_" as the prefix. Define several macros to replace the original
>      > characters.
>      > The subtype of AlterTableCmd is defined using an enumeration. The
>      > subtypes of AlterDomainStmt are relatively few in number, and the
>      > original definition uses characters. These definitions still use
>      > characters and maintain the values unchanged. If some plugins or
>     tools
>      > are also processing AlterDomainStmt, there will be no errors.
> 
>     You can still make it an enum and assign the currently in use values to
>     the new symbols, like
> 
>     enum AlterDomainType
>     {
>           AD_AlterDefault = 'T',
>           AD_DropNotNull = 'N',
>           ...
> 
>     I would prefer that.
> 
> +1
> 
> -- 
> Thanks,
> Tender Wang

Attachments:

alterdomain_subtype-v2.patch (text/plain, 5.0K) download diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 54ad38247aa..3f09f85a480 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -15696,7 +15696,7 @@ ATPostAlterTypeParse(Oid oldId, Oid oldRelId, Oid refRelId, char *cmd, { AlterDomainStmt *stmt = (AlterDomainStmt *) stm; - if (stmt->subtype == 'C') /* ADD CONSTRAINT */ + if (stmt->subtype == AD_AddConstraint) { Constraint *con = castNode(Constraint, stmt->def); AlterTableCmd *cmd = makeNode(AlterTableCmd); diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 0b5652071d1..103021c0947 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11629,7 +11629,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'T'; + n->subtype = AD_AlterDefault; n->typeName = $3; n->def = $4; $$ = (Node *) n; @@ -11639,7 +11639,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'N'; + n->subtype = AD_DropNotNull; n->typeName = $3; $$ = (Node *) n; } @@ -11648,7 +11648,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'O'; + n->subtype = AD_SetNotNull; n->typeName = $3; $$ = (Node *) n; } @@ -11657,7 +11657,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'C'; + n->subtype = AD_AddConstraint; n->typeName = $3; n->def = $5; $$ = (Node *) n; @@ -11667,7 +11667,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'X'; + n->subtype = AD_DropConstraint; n->typeName = $3; n->name = $6; n->behavior = $7; @@ -11679,7 +11679,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'X'; + n->subtype = AD_DropConstraint; n->typeName = $3; n->name = $8; n->behavior = $9; @@ -11691,7 +11691,7 @@ AlterDomainStmt: { AlterDomainStmt *n = makeNode(AlterDomainStmt); - n->subtype = 'V'; + n->subtype = AD_ValidateConstraint; n->typeName = $3; n->name = $6; $$ = (Node *) n; diff --git a/src/backend/tcop/utility.c b/src/backend/tcop/utility.c index 25fe3d58016..aff8510755f 100644 --- a/src/backend/tcop/utility.c +++ b/src/backend/tcop/utility.c @@ -1343,7 +1343,7 @@ ProcessUtilitySlow(ParseState *pstate, */ switch (stmt->subtype) { - case 'T': /* ALTER DOMAIN DEFAULT */ + case AD_AlterDefault: /* * Recursively alter column default for table and, @@ -1353,30 +1353,30 @@ ProcessUtilitySlow(ParseState *pstate, AlterDomainDefault(stmt->typeName, stmt->def); break; - case 'N': /* ALTER DOMAIN DROP NOT NULL */ + case AD_DropNotNull: address = AlterDomainNotNull(stmt->typeName, false); break; - case 'O': /* ALTER DOMAIN SET NOT NULL */ + case AD_SetNotNull: address = AlterDomainNotNull(stmt->typeName, true); break; - case 'C': /* ADD CONSTRAINT */ + case AD_AddConstraint: address = AlterDomainAddConstraint(stmt->typeName, stmt->def, &secondaryObject); break; - case 'X': /* DROP CONSTRAINT */ + case AD_DropConstraint: address = AlterDomainDropConstraint(stmt->typeName, stmt->name, stmt->behavior, stmt->missing_ok); break; - case 'V': /* VALIDATE CONSTRAINT */ + case AD_ValidateConstraint: address = AlterDomainValidateConstraint(stmt->typeName, stmt->name); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 4610fc61293..27f54e933ca 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -2531,17 +2531,20 @@ typedef struct AlterCollationStmt * this command. * ---------------------- */ +typedef enum AlterDomainType +{ + AD_AlterDefault = 'T', /* SET|DROP DEFAULT */ + AD_DropNotNull = 'N', /* DROP NOT NULL */ + AD_SetNotNull = 'O', /* SET NOT NULL */ + AD_AddConstraint = 'C', /* ADD CONSTRAINT */ + AD_DropConstraint = 'X', /* DROP CONSTRAINT */ + AD_ValidateConstraint = 'V', /* VALIDATE CONSTRAINT */ +} AlterDomainType; + typedef struct AlterDomainStmt { NodeTag type; - char subtype; /*------------ - * T = alter column default - * N = alter column drop not null - * O = alter column set not null - * C = add constraint - * X = drop constraint - *------------ - */ + AlterDomainType subtype; /* Type of domain alteration to apply */ List *typeName; /* domain to work on */ char *name; /* column or constraint name to act on */ Node *def; /* definition of default or constraint */

view thread (9+ messages)  latest in thread

Message-ID: <5ef3f194-0b7d-46d2-be41-bd27834fe58c@yeah.net>
Permalink:  ../5ef3f194-0b7d-46d2-be41-bd27834fe58c@yeah.net/
Also on:    postgresql.org/message-id/5ef3f194-0b7d-46d2-be41-bd27834fe58c@yeah.net

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: quanzongliang@yeah.net, tndrwang@gmail.com, peter@eisentraut.org
  Subject: Re: Standardize the definition of the subtype field of AlterDomainStmt
  In-Reply-To: <5ef3f194-0b7d-46d2-be41-bd27834fe58c@yeah.net>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox