diff options
author | Álvaro Herrera <alvherre@alvh.no-ip.org> | 2025-03-27 09:24:52 +0100 |
---|---|---|
committer | Álvaro Herrera <alvherre@alvh.no-ip.org> | 2025-03-27 09:24:52 +0100 |
commit | 4a02af8b1a5f3f8221c7381bc4de08a3d830f682 (patch) | |
tree | 3d0b6fbd5e0e582495a3f4584b86498705c49c20 /src/backend/parser | |
parent | 72c2f36d572763201430a35414138c1b9ec3a106 (diff) | |
download | postgresql-4a02af8b1a5f3f8221c7381bc4de08a3d830f682.tar.gz postgresql-4a02af8b1a5f3f8221c7381bc4de08a3d830f682.zip |
Simplify syntax for ALTER TABLE ALTER CONSTRAINT NO INHERIT
Commit d45597f72fe5 introduced the ability to change a not-null
constraint from NO INHERIT to INHERIT and vice versa, but we included
the SET noise word in the syntax for it. The SET turns out not to be
necessary and goes against what the SQL standard says for other ALTER
TABLE subcommands, so remove it.
This changes the way this command is processed for constraint types
other than not-null, so there are some error message changes.
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Suraj Kharage <suraj.kharage@enterprisedb.com>
Discussion: https://postgr.es/m/202503251602.vsxaehsyaoac@alvherre.pgsql
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 271ae26cbaf..0fc502a3a40 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -2662,15 +2662,19 @@ alter_table_cmd: n->subtype = AT_AlterConstraint; n->def = (Node *) c; c->conname = $3; - c->alterDeferrability = true; + if ($4 & (CAS_DEFERRABLE | CAS_NOT_DEFERRABLE | + CAS_INITIALLY_DEFERRED | CAS_INITIALLY_IMMEDIATE)) + c->alterDeferrability = true; + if ($4 & CAS_NO_INHERIT) + c->alterInheritability = true; processCASbits($4, @4, "FOREIGN KEY", &c->deferrable, &c->initdeferred, - NULL, NULL, NULL, yyscanner); + NULL, NULL, &c->noinherit, yyscanner); $$ = (Node *) n; } - /* ALTER TABLE <name> ALTER CONSTRAINT SET INHERIT */ - | ALTER CONSTRAINT name SET INHERIT + /* ALTER TABLE <name> ALTER CONSTRAINT INHERIT */ + | ALTER CONSTRAINT name INHERIT { AlterTableCmd *n = makeNode(AlterTableCmd); ATAlterConstraint *c = makeNode(ATAlterConstraint); @@ -2683,20 +2687,6 @@ alter_table_cmd: $$ = (Node *) n; } - /* ALTER TABLE <name> ALTER CONSTRAINT SET NO INHERIT */ - | ALTER CONSTRAINT name SET NO INHERIT - { - AlterTableCmd *n = makeNode(AlterTableCmd); - ATAlterConstraint *c = makeNode(ATAlterConstraint); - - n->subtype = AT_AlterConstraint; - n->def = (Node *) c; - c->conname = $3; - c->alterInheritability = true; - c->noinherit = true; - - $$ = (Node *) n; - } /* ALTER TABLE <name> VALIDATE CONSTRAINT ... */ | VALIDATE CONSTRAINT name { |