Index: doc/src/sgml/ref/alter_type.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/alter_type.sgml,v
retrieving revision 1.4
diff -c -r1.4 alter_type.sgml
*** doc/src/sgml/ref/alter_type.sgml 16 Sep 2006 00:30:16 -0000 1.4
--- doc/src/sgml/ref/alter_type.sgml 29 Sep 2007 05:43:14 -0000
***************
*** 26,31 ****
--- 26,32 ----
ALTER TYPE name OWNER TO new_owner
ALTER TYPE name SET SCHEMA new_schema
+ ALTER TYPE name RENAME TO new_name
***************
*** 83,88 ****
--- 84,98 ----
+
+ new_name
+
+
+ The new name for the type.
+
+
+
+
Index: src/backend/commands/alter.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/alter.c,v
retrieving revision 1.25
diff -c -r1.25 alter.c
*** src/backend/commands/alter.c 21 Aug 2007 01:11:14 -0000 1.25
--- src/backend/commands/alter.c 29 Sep 2007 05:12:31 -0000
***************
*** 154,159 ****
--- 154,164 ----
RenameTSConfiguration(stmt->object, stmt->newname);
break;
+ case OBJECT_TYPE:
+ case OBJECT_DOMAIN:
+ RenameType(stmt->object, stmt->newname);
+ break;
+
default:
elog(ERROR, "unrecognized rename stmt type: %d",
(int) stmt->renameType);
Index: src/backend/commands/typecmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/typecmds.c,v
retrieving revision 1.107
diff -c -r1.107 typecmds.c
*** src/backend/commands/typecmds.c 4 Sep 2007 16:41:42 -0000 1.107
--- src/backend/commands/typecmds.c 29 Sep 2007 05:11:22 -0000
***************
*** 2514,2519 ****
--- 2514,2567 ----
}
/*
+ * Execute ALTER TYPE RENAME
+ */
+ void
+ RenameType(List *names, const char *newTypeName)
+ {
+ TypeName *typename;
+ Oid typeOid;
+ Relation rel;
+ HeapTuple tup;
+ Form_pg_type typTup;
+
+ /* Make a TypeName so we can use standard type lookup machinery */
+ typename = makeTypeNameFromNameList(names);
+ typeOid = typenameTypeId(NULL, typename);
+
+ /* Look up the type in the type table */
+ rel = heap_open(TypeRelationId, RowExclusiveLock);
+
+ tup = SearchSysCacheCopy(TYPEOID,
+ ObjectIdGetDatum(typeOid),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(tup))
+ elog(ERROR, "cache lookup failed for type %u", typeOid);
+ typTup = (Form_pg_type) GETSTRUCT(tup);
+
+ /* check permissions on type */
+ if (!pg_type_ownercheck(typeOid, GetUserId()))
+ aclcheck_error(ACLCHECK_NOT_OWNER, ACL_KIND_TYPE,
+ format_type_be(typeOid));
+
+ /* don't allow direct alteration of array types */
+ if (OidIsValid(typTup->typelem) &&
+ get_array_type(typTup->typelem) == typeOid)
+ ereport(ERROR,
+ (errcode(ERRCODE_WRONG_OBJECT_TYPE),
+ errmsg("cannot alter array type %s",
+ format_type_be(typeOid)),
+ errhint("You can alter type %s, which will alter the array type as well.",
+ format_type_be(typTup->typelem))));
+
+ /* and do the work */
+ TypeRename(typeOid, newTypeName, typTup->typnamespace);
+
+ /* Clean up */
+ heap_close(rel, RowExclusiveLock);
+ }
+
+ /*
* Move specified type to new namespace.
*
* Caller must have already checked privileges.
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.603
diff -c -r2.603 gram.y
*** src/backend/parser/gram.y 24 Sep 2007 01:29:28 -0000 2.603
--- src/backend/parser/gram.y 29 Sep 2007 05:13:21 -0000
***************
*** 4748,4753 ****
--- 4748,4761 ----
n->newname = $8;
$$ = (Node *)n;
}
+ | ALTER TYPE_P any_name RENAME TO name
+ {
+ RenameStmt *n = makeNode(RenameStmt);
+ n->renameType = OBJECT_TYPE;
+ n->object = $3;
+ n->newname = $6;
+ $$ = (Node *)n;
+ }
;
opt_column: COLUMN { $$ = COLUMN; }
Index: src/include/commands/typecmds.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/commands/typecmds.h,v
retrieving revision 1.19
diff -c -r1.19 typecmds.h
*** src/include/commands/typecmds.h 11 May 2007 17:57:14 -0000 1.19
--- src/include/commands/typecmds.h 29 Sep 2007 05:11:57 -0000
***************
*** 43,46 ****
--- 43,48 ----
bool isImplicitArray,
bool errorOnTableType);
+ extern void RenameType(List *names, const char *newTypeName);
+
#endif /* TYPECMDS_H */