@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $ PostgreSQL : pgsql / src / backend / catalog / pg_proc . c , v 1.164 2009 / 06 / 11 14 : 48 : 55 momjian Exp $
* $ PostgreSQL : pgsql / src / backend / catalog / pg_proc . c , v 1.164 .2 .1 2009 / 10 / 02 18 : 13 : 10 tgl Exp $
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
@ -89,6 +89,7 @@ ProcedureCreate(const char *procedureName,
bool internalInParam = false ;
bool internalOutParam = false ;
Oid variadicType = InvalidOid ;
Oid proowner = GetUserId ( ) ;
Relation rel ;
HeapTuple tup ;
HeapTuple oldtup ;
@ -290,7 +291,7 @@ ProcedureCreate(const char *procedureName,
namestrcpy ( & procname , procedureName ) ;
values [ Anum_pg_proc_proname - 1 ] = NameGetDatum ( & procname ) ;
values [ Anum_pg_proc_pronamespace - 1 ] = ObjectIdGetDatum ( procNamespace ) ;
values [ Anum_pg_proc_proowner - 1 ] = ObjectIdGetDatum ( GetUserId ( ) ) ;
values [ Anum_pg_proc_proowner - 1 ] = ObjectIdGetDatum ( proowner ) ;
values [ Anum_pg_proc_prolang - 1 ] = ObjectIdGetDatum ( languageObjectId ) ;
values [ Anum_pg_proc_procost - 1 ] = Float4GetDatum ( procost ) ;
values [ Anum_pg_proc_prorows - 1 ] = Float4GetDatum ( prorows ) ;
@ -353,7 +354,7 @@ ProcedureCreate(const char *procedureName,
( errcode ( ERRCODE_DUPLICATE_FUNCTION ) ,
errmsg ( " function \" %s \" already exists with same argument types " ,
procedureName ) ) ) ;
if ( ! pg_proc_ownercheck ( HeapTupleGetOid ( oldtup ) , GetUserId ( ) ) )
if ( ! pg_proc_ownercheck ( HeapTupleGetOid ( oldtup ) , proowner ) )
aclcheck_error ( ACLCHECK_NOT_OWNER , ACL_KIND_PROC ,
procedureName ) ;
@ -471,7 +472,10 @@ ProcedureCreate(const char *procedureName,
procedureName ) ) ) ;
}
/* do not change existing ownership or permissions, either */
/*
* Do not change existing ownership or permissions , either . Note
* dependency - update code below has to agree with this decision .
*/
replaces [ Anum_pg_proc_proowner - 1 ] = false ;
replaces [ Anum_pg_proc_proacl - 1 ] = false ;
@ -498,12 +502,11 @@ ProcedureCreate(const char *procedureName,
/*
* Create dependencies for the new function . If we are updating an
* existing function , first delete any existing pg_depend entries .
* ( However , since we are not changing ownership or permissions , the
* shared dependencies do * not * need to change , and we leave them alone . )
*/
if ( is_update )
{
deleteDependencyRecordsFor ( ProcedureRelationId , retval ) ;
deleteSharedDependencyRecordsFor ( ProcedureRelationId , retval , 0 ) ;
}
myself . classId = ProcedureRelationId ;
myself . objectId = retval ;
@ -537,7 +540,8 @@ ProcedureCreate(const char *procedureName,
}
/* dependency on owner */
recordDependencyOnOwner ( ProcedureRelationId , retval , GetUserId ( ) ) ;
if ( ! is_update )
recordDependencyOnOwner ( ProcedureRelationId , retval , proowner ) ;
heap_freetuple ( tup ) ;