aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2014-12-23 09:06:44 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2014-12-23 09:06:44 -0300
commit7eca575d1c28f6eee2bf4564f3d458d10c4a8f47 (patch)
treeb76301d5241e8720d23ae9020fac1b48d0af7c0e /src/backend/parser
parent584e35d17c00b69d598522d3cf321fbd9b7dbd03 (diff)
downloadpostgresql-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.y18
-rw-r--r--src/backend/parser/parse_utilcmd.c2
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));