Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Pgsql Bugs > Re: BUG #4132: ...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 3 of 3 Topic 3742 of 3967
Post > Topic >>

Re: BUG #4132: REASSIGN OWNED fails on procedural languages

by alvherre@[EMAIL PROTECTED] (Alvaro Herrera) Apr 29, 2008 at 03:25 PM

--bg08WKrSYDhXBjb5
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Alvaro Herrera wrote:

> The attached patch should fix the problem.  I'm going to commit to 8.3
> and HEAD in a jiffy.

Really attached this time.  (Thanks Stefan.)

-- 
Alvaro Herrera                               
http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 sup****t

--bg08WKrSYDhXBjb5
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="reassign-owner-language.patch"

Index: src/backend/catalog/pg_shdepend.c
===================================================================
RCS file:
/home/alvherre/Code/cvs/pgsql/src/backend/catalog/pg_shdepend.c,v
retrieving revision 1.23.2.1
diff -c -p -r1.23.2.1 pg_shdepend.c
*** src/backend/catalog/pg_shdepend.c	24 Mar 2008 19:12:58 -0000	1.23.2.1
--- src/backend/catalog/pg_shdepend.c	29 Apr 2008 19:08:26 -0000
***************
*** 32,37 ****
--- 32,38 ----
  #include "catalog/pg_type.h"
  #include "commands/conversioncmds.h"
  #include "commands/defrem.h"
+ #include "commands/proclang.h"
  #include "commands/schemacmds.h"
  #include "commands/tablecmds.h"
  #include "commands/typecmds.h"
*************** shdepReassignOwned(List *roleids, Oid ne
*** 1342,1347 ****
--- 1343,1352 ----
  					AlterFunctionOwner_oid(sdepForm->objid, newrole);
  					break;
  
+ 				case LanguageRelationId:
+ 					AlterLanguageOwner_oid(sdepForm->objid, newrole);
+ 					break;
+ 
  				default:
  					elog(ERROR, "unexpected classid %d", sdepForm->classid);
  					break;
Index: src/backend/commands/proclang.c
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/backend/commands/proclang.c,v
retrieving revision 1.74
diff -c -p -r1.74 proclang.c
*** src/backend/commands/proclang.c	1 Jan 2008 19:45:49 -0000	1.74
--- src/backend/commands/proclang.c	29 Apr 2008 19:04:50 -0000
*************** typedef struct
*** 48,53 ****
--- 48,55 ----
  static void create_proc_lang(const char *languageName,
  				 Oid languageOwner, Oid handlerOid, Oid valOid, bool trusted);
  static PLTemplate *find_language_template(const char *languageName);
+ static void AlterLanguageOwner_internal(HeapTuple tup, Relation rel,
+ 							Oid newOwnerId);
  
  
  /* ---------------------------------------------------------------------
*************** AlterLanguageOwner(const char *name, Oid
*** 529,535 ****
  {
  	HeapTuple	tup;
  	Relation	rel;
- 	Form_pg_language lanForm;
  
  	/* Translate name for consistency with CREATE */
  	name = case_translate_language_name(name);
--- 531,536 ----
*************** AlterLanguageOwner(const char *name, Oid
*** 543,548 ****
--- 544,590 ----
  		ere****t(ERROR,
  				(errcode(ERRCODE_UNDEFINED_OBJECT),
  				 errmsg("language \"%s\" does not exist", name)));
+ 
+ 	AlterLanguageOwner_internal(tup, rel, newOwnerId);
+ 	
+ 	ReleaseSysCache(tup);
+ 	
+ 	heap_close(rel, RowExclusiveLock);
+ 
+ }
+ 
+ /*
+  * Change language owner, specified by OID
+  */
+ void
+ AlterLanguageOwner_oid(Oid oid, Oid newOwnerId)
+ {
+ 	HeapTuple	tup;
+ 	Relation	rel;
+ 
+ 	rel = heap_open(LanguageRelationId, RowExclusiveLock);
+ 
+ 	tup = SearchSysCache(LANGOID,
+ 						 ObjectIdGetDatum(oid),
+ 						 0, 0, 0);
+ 	if (!HeapTupleIsValid(tup))
+ 		elog(ERROR, "cache lookup failed for language %u", oid);
+ 
+ 	AlterLanguageOwner_internal(tup, rel, newOwnerId);
+ 
+ 	ReleaseSysCache(tup);
+ 
+ 	heap_close(rel, RowExclusiveLock);
+ }
+ 
+ /*
+  * Workhorse for AlterLanguageOwner variants
+  */
+ static void
+ AlterLanguageOwner_internal(HeapTuple tup, Relation rel, Oid newOwnerId)
+ {
+ 	Form_pg_language lanForm;
+ 
  	lanForm = (Form_pg_language) GETSTRUCT(tup);
  
  	/*
*************** AlterLanguageOwner(const char *name, Oid
*** 600,606 ****
  		changeDependencyOnOwner(LanguageRelationId, HeapTupleGetOid(tup),
  								newOwnerId);
  	}
- 
- 	ReleaseSysCache(tup);
- 	heap_close(rel, RowExclusiveLock);
  }
--- 642,645 ----
Index: src/include/commands/proclang.h
===================================================================
RCS file: /home/alvherre/Code/cvs/pgsql/src/include/commands/proclang.h,v
retrieving revision 1.12
diff -c -p -r1.12 proclang.h
*** src/include/commands/proclang.h	26 Mar 2007 16:58:41 -0000	1.12
--- src/include/commands/proclang.h	29 Apr 2008 19:04:50 -0000
*************** extern void DropProceduralLanguage(DropP
*** 16,21 ****
--- 16,22 ----
  extern void DropProceduralLanguageById(Oid langOid);
  extern void RenameLanguage(const char *oldname, const char *newname);
  extern void AlterLanguageOwner(const char *name, Oid newOwnerId);
+ extern void AlterLanguageOwner_oid(Oid oid, Oid newOwnerId);
  extern bool PLTemplateExists(const char *languageName);
  
  #endif   /* PROCLANG_H */

--bg08WKrSYDhXBjb5
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0


-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@[EMAIL PROTECTED]
)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

--bg08WKrSYDhXBjb5--
 




 3 Posts in Topic:
BUG #4132: REASSIGN OWNED fails on procedural languages
xi@[EMAIL PROTECTED] (&q  2008-04-29 18:42:45 
Re: BUG #4132: REASSIGN OWNED fails on procedural languages
alvherre@[EMAIL PROTECTED  2008-04-29 15:20:23 
Re: BUG #4132: REASSIGN OWNED fails on procedural languages
alvherre@[EMAIL PROTECTED  2008-04-29 15:25:36 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Wed Aug 20 7:43:41 CDT 2008.