* Execute ALTER TYPE SET SCHEMA */
| 4000 | * Execute ALTER TYPE SET SCHEMA |
| 4001 | */ |
| 4002 | ObjectAddress |
| 4003 | AlterTypeNamespace(List *names, const char *newschema, ObjectType objecttype, |
| 4004 | Oid *oldschema) |
| 4005 | { |
| 4006 | TypeName *typename; |
| 4007 | Oid typeOid; |
| 4008 | Oid nspOid; |
| 4009 | Oid oldNspOid; |
| 4010 | ObjectAddresses *objsMoved; |
| 4011 | ObjectAddress myself; |
| 4012 | |
| 4013 | /* Make a TypeName so we can use standard type lookup machinery */ |
| 4014 | typename = makeTypeNameFromNameList(names); |
| 4015 | typeOid = typenameTypeId(NULL, typename); |
| 4016 | |
| 4017 | /* Don't allow ALTER DOMAIN on a type */ |
| 4018 | if (objecttype == OBJECT_DOMAIN && get_typtype(typeOid) != TYPTYPE_DOMAIN) |
| 4019 | ereport(ERROR, |
| 4020 | (errcode(ERRCODE_WRONG_OBJECT_TYPE), |
| 4021 | errmsg("%s is not a domain", |
| 4022 | format_type_be(typeOid)))); |
| 4023 | |
| 4024 | /* get schema OID and check its permissions */ |
| 4025 | nspOid = LookupCreationNamespace(newschema); |
| 4026 | |
| 4027 | objsMoved = new_object_addresses(); |
| 4028 | oldNspOid = AlterTypeNamespace_oid(typeOid, nspOid, objsMoved); |
| 4029 | free_object_addresses(objsMoved); |
| 4030 | |
| 4031 | if (oldschema) |
| 4032 | *oldschema = oldNspOid; |
| 4033 | |
| 4034 | ObjectAddressSet(myself, TypeRelationId, typeOid); |
| 4035 | |
| 4036 | return myself; |
| 4037 | } |
| 4038 | |
| 4039 | Oid |
| 4040 | AlterTypeNamespace_oid(Oid typeOid, Oid nspOid, ObjectAddresses *objsMoved) |
no test coverage detected