Updated

On 2025/5/28 19:30, Tender Wang wrote:


Peter Eisentraut <pe...@eisentraut.org <mailto:pe...@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
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 */

Reply via email to