|
9 | 9 | *
|
10 | 10 | *
|
11 | 11 | * IDENTIFICATION
|
12 |
| - * $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.45 2008/01/01 19:45:48momjian Exp $ |
| 12 | + * $PostgreSQL: pgsql/src/backend/commands/aggregatecmds.c,v 1.46 2008/06/08 21:09:48tgl Exp $ |
13 | 13 | *
|
14 | 14 | * DESCRIPTION
|
15 | 15 | * The "DefineFoo" routines take the parse tree and pick out the
|
@@ -318,58 +318,10 @@ void
|
318 | 318 | AlterAggregateOwner(List*name,List*args,OidnewOwnerId)
|
319 | 319 | {
|
320 | 320 | OidprocOid;
|
321 |
| -HeapTupletup; |
322 |
| -Form_pg_procprocForm; |
323 |
| -Relationrel; |
324 |
| -AclResultaclresult; |
325 |
| - |
326 |
| -rel=heap_open(ProcedureRelationId,RowExclusiveLock); |
327 | 321 |
|
328 | 322 | /* Look up function and make sure it's an aggregate */
|
329 | 323 | procOid=LookupAggNameTypeNames(name,args, false);
|
330 | 324 |
|
331 |
| -tup=SearchSysCacheCopy(PROCOID, |
332 |
| -ObjectIdGetDatum(procOid), |
333 |
| -0,0,0); |
334 |
| -if (!HeapTupleIsValid(tup))/* should not happen */ |
335 |
| -elog(ERROR,"cache lookup failed for function %u",procOid); |
336 |
| -procForm= (Form_pg_proc)GETSTRUCT(tup); |
337 |
| - |
338 |
| -/* |
339 |
| - * If the new owner is the same as the existing owner, consider the |
340 |
| - * command to have succeeded. This is for dump restoration purposes. |
341 |
| - */ |
342 |
| -if (procForm->proowner!=newOwnerId) |
343 |
| -{ |
344 |
| -/* Superusers can always do it */ |
345 |
| -if (!superuser()) |
346 |
| -{ |
347 |
| -/* Otherwise, must be owner of the existing object */ |
348 |
| -if (!pg_proc_ownercheck(procOid,GetUserId())) |
349 |
| -aclcheck_error(ACLCHECK_NOT_OWNER,ACL_KIND_PROC, |
350 |
| -NameListToString(name)); |
351 |
| - |
352 |
| -/* Must be able to become new owner */ |
353 |
| -check_is_member_of_role(GetUserId(),newOwnerId); |
354 |
| - |
355 |
| -/* New owner must have CREATE privilege on namespace */ |
356 |
| -aclresult=pg_namespace_aclcheck(procForm->pronamespace, |
357 |
| -newOwnerId, |
358 |
| -ACL_CREATE); |
359 |
| -if (aclresult!=ACLCHECK_OK) |
360 |
| -aclcheck_error(aclresult,ACL_KIND_NAMESPACE, |
361 |
| -get_namespace_name(procForm->pronamespace)); |
362 |
| -} |
363 |
| - |
364 |
| -/* |
365 |
| - * Modify the owner --- okay to scribble on tup because it's a copy |
366 |
| - */ |
367 |
| -procForm->proowner=newOwnerId; |
368 |
| - |
369 |
| -simple_heap_update(rel,&tup->t_self,tup); |
370 |
| -CatalogUpdateIndexes(rel,tup); |
371 |
| -} |
372 |
| - |
373 |
| -heap_close(rel,NoLock); |
374 |
| -heap_freetuple(tup); |
| 325 | +/* The rest is just like a function */ |
| 326 | +AlterFunctionOwner_oid(procOid,newOwnerId); |
375 | 327 | }
|