summaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorPeter Eisentraut2011-12-22 20:43:56 +0000
committerPeter Eisentraut2011-12-22 20:43:56 +0000
commitf90dd28062db2128a340fbe02f55829f15ab5561 (patch)
tree06636b98c913bfde151cc5ce2d62649f4a14eedb /src/backend
parent8d15e3ec4fcb735875a8a70a09ec0c62153c3329 (diff)
Add ALTER DOMAIN ... RENAME
You could already rename domains using ALTER TYPE, but with this new command it is more consistent with how other commands treat domains as a subcategory of types.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/commands/alter.c3
-rw-r--r--src/backend/commands/typecmds.c11
-rw-r--r--src/backend/parser/gram.y8
3 files changed, 20 insertions, 2 deletions
diff --git a/src/backend/commands/alter.c b/src/backend/commands/alter.c
index 8513837fa10..cc11858d174 100644
--- a/src/backend/commands/alter.c
+++ b/src/backend/commands/alter.c
@@ -134,8 +134,9 @@ ExecRenameStmt(RenameStmt *stmt)
RenameTSConfiguration(stmt->object, stmt->newname);
break;
+ case OBJECT_DOMAIN:
case OBJECT_TYPE:
- RenameType(stmt->object, stmt->newname);
+ RenameType(stmt);
break;
default:
diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c
index ea8f7f099a2..811273a01d7 100644
--- a/src/backend/commands/typecmds.c
+++ b/src/backend/commands/typecmds.c
@@ -3074,8 +3074,10 @@ GetDomainConstraints(Oid typeOid)
* Execute ALTER TYPE RENAME
*/
void
-RenameType(List *names, const char *newTypeName)
+RenameType(RenameStmt *stmt)
{
+ List *names = stmt->object;
+ const char *newTypeName = stmt->newname;
TypeName *typename;
Oid typeOid;
Relation rel;
@@ -3099,6 +3101,13 @@ RenameType(List *names, const char *newTypeName)
aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TYPE,
format_type_be(typeOid));
+ /* ALTER DOMAIN used on a non-domain? */
+ if (stmt->renameType == OBJECT_DOMAIN && typTup->typtype != TYPTYPE_DOMAIN)
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("\"%s\" is not a domain",
+ format_type_be(typeOid))));
+
/*
* If it's a composite type, we need to check that it really is a
* free-standing composite type, and not a table's rowtype. We want people
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index e0ff49f048a..7e8f39abdf7 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -6451,6 +6451,14 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
n->newname = $6;
$$ = (Node *)n;
}
+ | ALTER DOMAIN_P any_name RENAME TO name
+ {
+ RenameStmt *n = makeNode(RenameStmt);
+ n->renameType = OBJECT_DOMAIN;
+ n->object = $3;
+ n->newname = $6;
+ $$ = (Node *)n;
+ }
| ALTER FOREIGN DATA_P WRAPPER name RENAME TO name
{
RenameStmt *n = makeNode(RenameStmt);