diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-12-23 09:06:44 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-12-23 09:06:44 -0300 |
commit | 7eca575d1c28f6eee2bf4564f3d458d10c4a8f47 (patch) | |
tree | b76301d5241e8720d23ae9020fac1b48d0af7c0e /src/backend/parser | |
parent | 584e35d17c00b69d598522d3cf321fbd9b7dbd03 (diff) | |
download | postgresql-7eca575d1c28f6eee2bf4564f3d458d10c4a8f47.tar.gz postgresql-7eca575d1c28f6eee2bf4564f3d458d10c4a8f47.zip |
get_object_address: separate domain constraints from table constraints
Apart from enabling comments on domain constraints, this enables a
future project to replicate object dropping to remote servers: with the
current mechanism there's no way to distinguish between the two types of
constraints, so there's no way to know what to drop.
Also added support for the domain constraint comments in psql's \dd and
pg_dump.
Catalog version bumped due to the change in ObjectType enum.
Diffstat (limited to 'src/backend/parser')
-rw-r--r-- | src/backend/parser/gram.y | 18 | ||||
-rw-r--r-- | src/backend/parser/parse_utilcmd.c | 2 |
2 files changed, 14 insertions, 6 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 1f4fe9d4943..6431601c665 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -5572,6 +5572,7 @@ opt_restart_seqs: * CAST (<src type> AS <dst type>) | * COLUMN <relname>.<colname> | * CONSTRAINT <constraintname> ON <relname> | + * CONSTRAINT <constraintname> ON DOMAIN <domainname> | * FUNCTION <funcname> (arg1, arg2, ...) | * LARGE OBJECT <oid> | * OPERATOR <op> (leftoperand_typ, rightoperand_typ) | @@ -5623,12 +5624,21 @@ CommentStmt: | COMMENT ON CONSTRAINT name ON any_name IS comment_text { CommentStmt *n = makeNode(CommentStmt); - n->objtype = OBJECT_CONSTRAINT; + n->objtype = OBJECT_TABCONSTRAINT; n->objname = lappend($6, makeString($4)); n->objargs = NIL; n->comment = $8; $$ = (Node *) n; } + | COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text + { + CommentStmt *n = makeNode(CommentStmt); + n->objtype = OBJECT_DOMCONSTRAINT; + n->objname = lappend($7, makeString($4)); + n->objargs = NIL; + n->comment = $9; + $$ = (Node *) n; + } | COMMENT ON POLICY name ON any_name IS comment_text { CommentStmt *n = makeNode(CommentStmt); @@ -7355,8 +7365,7 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name | ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name { RenameStmt *n = makeNode(RenameStmt); - n->renameType = OBJECT_CONSTRAINT; - n->relationType = OBJECT_DOMAIN; + n->renameType = OBJECT_DOMCONSTRAINT; n->object = $3; n->subname = $6; n->newname = $8; @@ -7624,8 +7633,7 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name | ALTER TABLE relation_expr RENAME CONSTRAINT name TO name { RenameStmt *n = makeNode(RenameStmt); - n->renameType = OBJECT_CONSTRAINT; - n->relationType = OBJECT_TABLE; + n->renameType = OBJECT_TABCONSTRAINT; n->relation = $3; n->subname = $6; n->newname = $8; diff --git a/src/backend/parser/parse_utilcmd.c b/src/backend/parser/parse_utilcmd.c index b9fbb5b6efd..a85327df2cb 100644 --- a/src/backend/parser/parse_utilcmd.c +++ b/src/backend/parser/parse_utilcmd.c @@ -896,7 +896,7 @@ transformTableLikeClause(CreateStmtContext *cxt, TableLikeClause *table_like_cla { CommentStmt *stmt = makeNode(CommentStmt); - stmt->objtype = OBJECT_CONSTRAINT; + stmt->objtype = OBJECT_TABCONSTRAINT; stmt->objname = list_make3(makeString(cxt->relation->schemaname), makeString(cxt->relation->relname), makeString(n->conname)); |