Hello Bruce,

there is a contextual diff of my patch w/ the current
(I hope) snapshot of postgresql.

I test it on my own database, but I found another bug
w/ SEQUENCE this time. I have created a new ticket,
#918 for this as it's totaly a separate problem.

Bye

Laurent

------

*** pg_dump.c.org	Tue Mar 25 10:33:01 2003
--- pg_dump.c	Tue Mar 25 11:42:17 2003
***************
*** 605,610 ****
--- 605,618 ----
  
  	/* Now sort the output nicely */
  	SortTocByOID(g_fout);
+ 
+ 		/*
+ 		 * Procedural languages have to be declared just after
+ 		 * database and schema creation, before they are used.
+ 		 */
+ 	MoveToStart(g_fout, "ACL LANGUAGE");
+ 	MoveToStart(g_fout, "PROCEDURAL LANGUAGE");
+ 	MoveToStart(g_fout, "FUNC PROCEDURAL LANGUAGE");
  	MoveToStart(g_fout, "SCHEMA");
  	MoveToStart(g_fout, "DATABASE");
  	MoveToEnd(g_fout, "TABLE DATA");
***************
*** 3626,3632 ****
  		{
  			char	   *tmp = strdup(fmtId(lanname));
  
! 			dumpACL(fout, "LANGUAGE", tmp, lanname,
  					finfo[fidx].pronamespace->nspname,
  					NULL, lanacl, lanoid);
  			free(tmp);
--- 3634,3640 ----
  		{
  			char	   *tmp = strdup(fmtId(lanname));
  
! 			dumpACL(fout, "ACL LANGUAGE", tmp, lanname,
  					finfo[fidx].pronamespace->nspname,
  					NULL, lanacl, lanoid);
  			free(tmp);
***************
*** 3732,3737 ****
--- 3740,3746 ----
  	char	   *prosecdef;
  	char	   *lanname;
  	char	   *rettypename;
+ 	char       *funcproclang;	/* Boolean : is this function a PLang handler ? */
  
  	if (finfo->dumped)
  		goto done;
***************
*** 3747,3753 ****
  		appendPQExpBuffer(query,
  						  "SELECT proretset, prosrc, probin, "
  						  "provolatile, proisstrict, prosecdef, "
! 						  "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname "
  						  "FROM pg_catalog.pg_proc "
  						  "WHERE oid = '%s'::pg_catalog.oid",
  						  finfo->oid);
--- 3756,3763 ----
  		appendPQExpBuffer(query,
  						  "SELECT proretset, prosrc, probin, "
  						  "provolatile, proisstrict, prosecdef, "
! 						  "(SELECT lanname FROM pg_catalog.pg_language WHERE oid = prolang) as lanname, "
! 						  "exists (SELECT 'x' FROM pg_catalog.pg_language WHERE lanplcallfoid = pg_catalog.pg_proc.oid) as funcproclang "
  						  "FROM pg_catalog.pg_proc "
  						  "WHERE oid = '%s'::pg_catalog.oid",
  						  finfo->oid);
***************
*** 3759,3765 ****
  		 "case when proiscachable then 'i' else 'v' end as provolatile, "
  						  "proisstrict, "
  						  "'f'::boolean as prosecdef, "
! 						  "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
  						  "FROM pg_proc "
  						  "WHERE oid = '%s'::oid",
  						  finfo->oid);
--- 3769,3776 ----
  		 "case when proiscachable then 'i' else 'v' end as provolatile, "
  						  "proisstrict, "
  						  "'f'::boolean as prosecdef, "
! 						  "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
! 						  "exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
  						  "FROM pg_proc "
  						  "WHERE oid = '%s'::oid",
  						  finfo->oid);
***************
*** 3771,3777 ****
  		 "case when proiscachable then 'i' else 'v' end as provolatile, "
  						  "'f'::boolean as proisstrict, "
  						  "'f'::boolean as prosecdef, "
! 						  "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname "
  						  "FROM pg_proc "
  						  "WHERE oid = '%s'::oid",
  						  finfo->oid);
--- 3782,3789 ----
  		 "case when proiscachable then 'i' else 'v' end as provolatile, "
  						  "'f'::boolean as proisstrict, "
  						  "'f'::boolean as prosecdef, "
! 						  "(SELECT lanname FROM pg_language WHERE oid = prolang) as lanname, "
! 						  "exists (SELECT 'x' FROM pg_language WHERE lanplcallfoid = pg_proc.oid) as funcproclang "
  						  "FROM pg_proc "
  						  "WHERE oid = '%s'::oid",
  						  finfo->oid);
***************
*** 3802,3807 ****
--- 3814,3820 ----
  	proisstrict = PQgetvalue(res, 0, PQfnumber(res, "proisstrict"));
  	prosecdef = PQgetvalue(res, 0, PQfnumber(res, "prosecdef"));
  	lanname = PQgetvalue(res, 0, PQfnumber(res, "lanname"));
+ 	funcproclang = PQgetvalue(res, 0, PQfnumber(res, "funcproclang"));
  
  	/*
  	 * See backend/commands/define.c for details of how the 'AS' clause is
***************
*** 3872,3878 ****
  
  	ArchiveEntry(fout, finfo->oid, funcsig_tag,
  				 finfo->pronamespace->nspname,
! 				 finfo->usename, "FUNCTION", NULL,
  				 q->data, delqry->data,
  				 NULL, NULL, NULL);
  
--- 3885,3891 ----
  
  	ArchiveEntry(fout, finfo->oid, funcsig_tag,
  				 finfo->pronamespace->nspname,
! 				 finfo->usename, strcmp(funcproclang,"t")?"FUNCTION":"FUNC PROCEDURAL LANGUAGE", NULL,
  				 q->data, delqry->data,
  				 NULL, NULL, NULL);
  
***************
*** 5024,5034 ****
  	PQExpBuffer sql, grantee, grantor, privs, privswgo;
  	bool		found_owner_privs = false;
  
  	if (strlen(acls) == 0)
  		return;					/* object has default permissions */
  
  #define MKENTRY(grantor, command) \
! 	ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "", "ACL", NULL, command, "", NULL, NULL, NULL)
  
  	sql = createPQExpBuffer();
  	grantee = createPQExpBuffer();
--- 5037,5057 ----
  	PQExpBuffer sql, grantee, grantor, privs, privswgo;
  	bool		found_owner_privs = false;
  
+ 		/* acl_lang is a flag only true if we are dumping language's ACL,
+ 		 * so we can set 'type' to a value that is suitable to build
+ 		 * SQL requests as for other types.
+ 		 */
+ 	bool       acl_lang = false;
+ 	if(!strcmp(type,"ACL LANGUAGE")){
+ 		type = "LANGUAGE";
+ 		acl_lang = true;
+ 	}
+ 
  	if (strlen(acls) == 0)
  		return;					/* object has default permissions */
  
  #define MKENTRY(grantor, command) \
! 	ArchiveEntry(fout, objoid, tag, nspname, grantor ? grantor : "", acl_lang ? "ACL LANGUAGE" : "ACL" , NULL, command, "", NULL, NULL, NULL)
  
  	sql = createPQExpBuffer();
  	grantee = createPQExpBuffer();


=====
The misspelling master is on the Web.
   _________	100 % Dictionnary Free !
  /        /(
 /  Dico  / /	Pleins d'autres fautes sur
/________/ /	http://go.to/destroyedlolo
(#######( /	http://destroyedlolo.homeunix.org:8080
Quoi, des fautes d'orthographe! Pas possible ;-D.

___________________________________________________________
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en franais !
Yahoo! Mail : http://fr.mail.yahoo.com


---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly

