mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
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.
This commit is contained in:
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -37,7 +37,7 @@ extern void AlterDomainDropConstraint(List *names, const char *constrName,
|
||||
|
||||
extern List *GetDomainConstraints(Oid typeOid);
|
||||
|
||||
extern void RenameType(List *names, const char *newTypeName);
|
||||
extern void RenameType(RenameStmt *stmt);
|
||||
extern void AlterTypeOwner(List *names, Oid newOwnerId);
|
||||
extern void AlterTypeOwnerInternal(Oid typeOid, Oid newOwnerId,
|
||||
bool hasDependEntry);
|
||||
|
@ -648,3 +648,10 @@ select array_elem_check(-1);
|
||||
ERROR: value for domain orderedpair violates check constraint "orderedpair_check"
|
||||
CONTEXT: PL/pgSQL function "array_elem_check" line 5 at assignment
|
||||
drop function array_elem_check(int);
|
||||
--
|
||||
-- Renaming
|
||||
--
|
||||
create domain testdomain1 as int;
|
||||
alter domain testdomain1 rename to testdomain2;
|
||||
alter type testdomain2 rename to testdomain3; -- alter type also works
|
||||
drop domain testdomain3;
|
||||
|
@ -483,3 +483,13 @@ select array_elem_check(3);
|
||||
select array_elem_check(-1);
|
||||
|
||||
drop function array_elem_check(int);
|
||||
|
||||
|
||||
--
|
||||
-- Renaming
|
||||
--
|
||||
|
||||
create domain testdomain1 as int;
|
||||
alter domain testdomain1 rename to testdomain2;
|
||||
alter type testdomain2 rename to testdomain3; -- alter type also works
|
||||
drop domain testdomain3;
|
||||
|
Reference in New Issue
Block a user