Solution for bug #899

Started by Laurent FAILLIEabout 23 years ago12 messagesbugs
Jump to latest
#1Laurent FAILLIE
l_faillie@yahoo.com

Hi,

I have patched pg_dump.c to have a correct output file
when the database use procedure langages.

Bye

Laurent

PS: I have tryed to send the full source code as
attachement but my message never appear in this ML, so
I hope this diff file is enought ...

**** diff ****

603a604,606

MoveToStart(g_fout, "ACL LANGUAGE");
MoveToStart(g_fout, "PROCEDURAL LANGUAGE");
MoveToStart(g_fout, "FUNC PROCEDURAL LANGUAGE");

3522c3525
< dumpACL(fout, "LANGUAGE", tmp, lanname,
---

dumpACL(fout, "ACL LANGUAGE", tmp, lanname,

3526a3530,3531

3627a3633

char *funcproclang;

3643c3649,3650
< "(SELECT lanname FROM pg_catalog.pg_language
WHERE oid = prolang) as lanname "
---

"(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 "
3655c3662,3663
< "(SELECT lanname FROM pg_language WHERE oid
= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3667c3675,3676
< "(SELECT lanname FROM pg_language WHERE oid
= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3697a3707

funcproclang = PQgetvalue(res, 0, PQfnumber(res,

"funcproclang"));
3768c3778
< finfo->usename, "FUNCTION", NULL,
---

finfo->usename,

strcmp(funcproclang,"t")?"FUNCTION":"FUNC PROCEDURAL
LANGUAGE", NULL,
4874a4885,4886

char acl_lang=0;

4877a4890,4894

if(!strcmp(type,"ACL LANGUAGE")){
type = "LANGUAGE";
acl_lang = 1;
}

4992c5009
< "ACL", NULL, sql->data, "", NULL, NULL, NULL);
---

acl_lang ? "ACL LANGUAGE" : "ACL", NULL,

sql->data, "", NULL, NULL, NULL);

=====
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 fran�ais !
Yahoo! Mail : http://fr.mail.yahoo.com

#2Bruce Momjian
bruce@momjian.us
In reply to: Laurent FAILLIE (#1)
Re: Solution for bug #899

Can I get a context diff (diff -c) of this? What exactly did you
change and why?

---------------------------------------------------------------------------

Laurent FAILLIE wrote:

Hi,

I have patched pg_dump.c to have a correct output file
when the database use procedure langages.

Bye

Laurent

PS: I have tryed to send the full source code as
attachement but my message never appear in this ML, so
I hope this diff file is enought ...

**** diff ****

603a604,606

MoveToStart(g_fout, "ACL LANGUAGE");
MoveToStart(g_fout, "PROCEDURAL LANGUAGE");
MoveToStart(g_fout, "FUNC PROCEDURAL LANGUAGE");

3522c3525
< dumpACL(fout, "LANGUAGE", tmp, lanname,
---

dumpACL(fout, "ACL LANGUAGE", tmp, lanname,

3526a3530,3531

3627a3633

char *funcproclang;

3643c3649,3650
< "(SELECT lanname FROM pg_catalog.pg_language
WHERE oid = prolang) as lanname "
---

"(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 "
3655c3662,3663
< "(SELECT lanname FROM pg_language WHERE oid
= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3667c3675,3676
< "(SELECT lanname FROM pg_language WHERE oid
= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3697a3707

funcproclang = PQgetvalue(res, 0, PQfnumber(res,

"funcproclang"));
3768c3778
< finfo->usename, "FUNCTION", NULL,
---

finfo->usename,

strcmp(funcproclang,"t")?"FUNCTION":"FUNC PROCEDURAL
LANGUAGE", NULL,
4874a4885,4886

char acl_lang=0;

4877a4890,4894

if(!strcmp(type,"ACL LANGUAGE")){
type = "LANGUAGE";
acl_lang = 1;
}

4992c5009
< "ACL", NULL, sql->data, "", NULL, NULL, NULL);
---

acl_lang ? "ACL LANGUAGE" : "ACL", NULL,

sql->data, "", NULL, NULL, NULL);

=====
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 fran?ais !
Yahoo! Mail : http://fr.mail.yahoo.com

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#3Laurent FAILLIE
l_faillie@yahoo.com
In reply to: Bruce Momjian (#2)
Re: Solution for bug #899
 --- Bruce Momjian <pgman@candle.pha.pa.us> a �crit : 

Can I get a context diff (diff -c) of this?

Ok, but you have to wait 'till end of next week
because I'm on hollidays (SSSskkkkkkiiiii :-)))) ).

What
exactly did you
change and why?

Ok, some explanations :

603a604,606

MoveToStart(g_fout, "ACL LANGUAGE");
MoveToStart(g_fout, "PROCEDURAL LANGUAGE");
MoveToStart(g_fout, "FUNC PROCEDURAL

LANGUAGE");

-> Move all Languages stuffs in the beggining of the
listing, juste after database creation. In order :
- handler of the language,
- language declaration,
- ACL for them.

3522c3525
< dumpACL(fout, "LANGUAGE", tmp, lanname,
---

dumpACL(fout, "ACL LANGUAGE", tmp, lanname,

-> it's not a "normal" ACL, but it's for procedural
language. We need to have a specific signature, "ACL
LANGUAGE", to make differences w/ other ACL.

3526a3530,3531

3627a3633

char *funcproclang;

3643c3649,3650
< "(SELECT lanname FROM

pg_catalog.pg_language

WHERE oid = prolang) as lanname "
---

"(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 "
3655c3662,3663
< "(SELECT lanname FROM pg_language WHERE

oid

= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE

oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language

WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3667c3675,3676
< "(SELECT lanname FROM pg_language WHERE

oid

= prolang) as lanname "
---

"(SELECT lanname FROM pg_language WHERE

oid

= prolang) as lanname, "

"exists (SELECT 'x' FROM pg_language

WHERE

lanplcallfoid = pg_proc.oid) as funcproclang "
3697a3707

funcproclang = PQgetvalue(res, 0,

PQfnumber(res,

"funcproclang"));
3768c3778

=> add a new flags, funcproclang, which is true only
if the record is for an handler for procedural
language.

< finfo->usename, "FUNCTION", NULL,
---

finfo->usename,

strcmp(funcproclang,"t")?"FUNCTION":"FUNC

PROCEDURAL

LANGUAGE", NULL,

=> Change the signature for handler, according to
funcproclang.

4874a4885,4886

char acl_lang=0;

4877a4890,4894

if(!strcmp(type,"ACL LANGUAGE")){
type = "LANGUAGE";
acl_lang = 1;
}

4992c5009
< "ACL", NULL, sql->data, "", NULL, NULL,

NULL);

---

acl_lang ? "ACL LANGUAGE" : "ACL", NULL,

sql->data, "", NULL, NULL, NULL);

=> We have changed the signature of language ACL. But,
dumpACL()'s code use this signature to build requests
to take informations inside the database, and,
obviously, it doesn't work w/ my new one.
So, my solution was to use a flag, acl_lang, about
dumping language ACL, and reset type to the standard
"LANGUAGE".
The last step is to store ACL w/ the right signature
according to this flag ...

That's all, I hope my poor english will be
understandable ;-D

Bye

Laurent

=====
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 fran�ais !
Yahoo! Mail : http://fr.mail.yahoo.com

#4Laurent FAILLIE
l_faillie@yahoo.com
In reply to: Laurent FAILLIE (#3)
Re: Solution for bug #899

Ok there is the context diff of my modification :

Bye

Laurent

-------------------

*** postgresql-7.3.2/src/bin/pg_dump/pg_dump.c	Fri Dec
27 18:10:55 2002
--- postgresql-7.3.2/src/bin/pg_dump/pg_dump.c.new	Wed
Mar  5 12:12:32 2003
***************
*** 601,606 ****
--- 601,609 ----
  	/* Now sort the output nicely */
  	SortTocByOID(g_fout);
+ 	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");
***************
*** 3519,3529 ****
  		{
  			char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
}

  	PQclear(res);
--- 3522,3534 ----
  		{
  			char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "ACL LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
+
+
}

  	PQclear(res);
***************
*** 3625,3630 ****
--- 3630,3636 ----
  	char	   *prosecdef;
  	char	   *lanname;
  	char	   *rettypename;
+ 	char       *funcproclang;
  	if (finfo->dumped)
  		goto done;
***************
*** 3640,3646 ****
  		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);
--- 3646,3653 ----
  		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);
***************
*** 3652,3658 ****
  		 "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);
--- 3659,3666 ----
  		 "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);
***************
*** 3664,3670 ****
  		 "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);
--- 3672,3679 ----
  		 "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);
***************
*** 3695,3700 ****
--- 3704,3710 ----
  	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
***************
*** 3765,3771 ****

ArchiveEntry(fout, finfo->oid, funcsig_tag,
finfo->pronamespace->nspname,
! finfo->usename, "FUNCTION", NULL,
q->data, delqry->data,
NULL, NULL, NULL);

--- 3775,3781 ----

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);

***************
*** 4872,4880 ****
--- 4882,4897 ----
  			   *tok,
  			   *eqpos,
  			   *priv;
+ 	char       acl_lang=0;
+ 
  	PQExpBuffer sql;
  	bool		found_owner_privs = false;
+ 	if(!strcmp(type,"ACL LANGUAGE")){
+ 		type = "LANGUAGE";
+ 		acl_lang = 1;
+ 	}
+ 
  	if (strlen(acls) == 0)
  		return;					/* object has default permissions */

***************
*** 4989,4995 ****
}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! "ACL", NULL, sql->data, "", NULL, NULL, NULL);

  	free(aclbuf);
  	destroyPQExpBuffer(sql);
--- 5006,5012 ----
  	}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! acl_lang ? "ACL LANGUAGE" : "ACL", NULL,
sql->data, "", NULL, NULL, NULL);

free(aclbuf);
destroyPQExpBuffer(sql);

=====
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 fran�ais !
Yahoo! Mail : http://fr.mail.yahoo.com

#5Bruce Momjian
bruce@momjian.us
In reply to: Laurent FAILLIE (#4)
Re: Solution for bug #899

Your patch has been added to the PostgreSQL unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

---------------------------------------------------------------------------

Laurent FAILLIE wrote:

Ok there is the context diff of my modification :

Bye

Laurent

-------------------

*** postgresql-7.3.2/src/bin/pg_dump/pg_dump.c	Fri Dec
27 18:10:55 2002
--- postgresql-7.3.2/src/bin/pg_dump/pg_dump.c.new	Wed
Mar  5 12:12:32 2003
***************
*** 601,606 ****
--- 601,609 ----
/* Now sort the output nicely */
SortTocByOID(g_fout);
+ 	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");
***************
*** 3519,3529 ****
{
char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
}

PQclear(res);
--- 3522,3534 ----
{
char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "ACL LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
+
+
}

PQclear(res);
***************
*** 3625,3630 ****
--- 3630,3636 ----
char	   *prosecdef;
char	   *lanname;
char	   *rettypename;
+ 	char       *funcproclang;
if (finfo->dumped)
goto done;
***************
*** 3640,3646 ****
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);
--- 3646,3653 ----
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);
***************
*** 3652,3658 ****
"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);
--- 3659,3666 ----
"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);
***************
*** 3664,3670 ****
"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);
--- 3672,3679 ----
"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);
***************
*** 3695,3700 ****
--- 3704,3710 ----
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
***************
*** 3765,3771 ****

ArchiveEntry(fout, finfo->oid, funcsig_tag,
finfo->pronamespace->nspname,
! finfo->usename, "FUNCTION", NULL,
q->data, delqry->data,
NULL, NULL, NULL);

--- 3775,3781 ----

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);

***************
*** 4872,4880 ****
--- 4882,4897 ----
*tok,
*eqpos,
*priv;
+ 	char       acl_lang=0;
+ 
PQExpBuffer sql;
bool		found_owner_privs = false;
+ 	if(!strcmp(type,"ACL LANGUAGE")){
+ 		type = "LANGUAGE";
+ 		acl_lang = 1;
+ 	}
+ 
if (strlen(acls) == 0)
return;					/* object has default permissions */

***************
*** 4989,4995 ****
}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! "ACL", NULL, sql->data, "", NULL, NULL, NULL);

free(aclbuf);
destroyPQExpBuffer(sql);
--- 5006,5012 ----
}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! acl_lang ? "ACL LANGUAGE" : "ACL", NULL,
sql->data, "", NULL, NULL, NULL);

free(aclbuf);
destroyPQExpBuffer(sql);

=====
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 fran?ais !
Yahoo! Mail : http://fr.mail.yahoo.com

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#6Laurent FAILLIE
l_faillie@yahoo.com
In reply to: Bruce Momjian (#5)
Re: Solution for bug #899
 --- Bruce Momjian <pgman@candle.pha.pa.us> a �crit�:

Your patch has been added to the PostgreSQL
unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

Ok, thanks a lot.

Have a nice day.

Laurent

=====
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 fran�ais !
Yahoo! Mail : http://fr.mail.yahoo.com

#7Bruce Momjian
bruce@momjian.us
In reply to: Laurent FAILLIE (#4)
Re: Solution for bug #899

This patch can't be applied to CVS. The pg_dump code has changed too
much since 7.3.X. Would you supply a new patch for this? Thanks. You
can grab the current CVS or a snapshot from our ftp server.

Also, would you add a comment of how you are manipulating the ACL tags,
and its purpose. Thanks.

---------------------------------------------------------------------------

Laurent FAILLIE wrote:

Ok there is the context diff of my modification :

Bye

Laurent

-------------------

*** postgresql-7.3.2/src/bin/pg_dump/pg_dump.c	Fri Dec
27 18:10:55 2002
--- postgresql-7.3.2/src/bin/pg_dump/pg_dump.c.new	Wed
Mar  5 12:12:32 2003
***************
*** 601,606 ****
--- 601,609 ----
/* Now sort the output nicely */
SortTocByOID(g_fout);
+ 	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");
***************
*** 3519,3529 ****
{
char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
}

PQclear(res);
--- 3522,3534 ----
{
char	   *tmp = strdup(fmtId(lanname));

! dumpACL(fout, "ACL LANGUAGE", tmp, lanname,
finfo[fidx].pronamespace->nspname,
NULL, lanacl, lanoid);
free(tmp);
}
+
+
}

PQclear(res);
***************
*** 3625,3630 ****
--- 3630,3636 ----
char	   *prosecdef;
char	   *lanname;
char	   *rettypename;
+ 	char       *funcproclang;
if (finfo->dumped)
goto done;
***************
*** 3640,3646 ****
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);
--- 3646,3653 ----
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);
***************
*** 3652,3658 ****
"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);
--- 3659,3666 ----
"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);
***************
*** 3664,3670 ****
"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);
--- 3672,3679 ----
"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);
***************
*** 3695,3700 ****
--- 3704,3710 ----
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
***************
*** 3765,3771 ****

ArchiveEntry(fout, finfo->oid, funcsig_tag,
finfo->pronamespace->nspname,
! finfo->usename, "FUNCTION", NULL,
q->data, delqry->data,
NULL, NULL, NULL);

--- 3775,3781 ----

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);

***************
*** 4872,4880 ****
--- 4882,4897 ----
*tok,
*eqpos,
*priv;
+ 	char       acl_lang=0;
+ 
PQExpBuffer sql;
bool		found_owner_privs = false;
+ 	if(!strcmp(type,"ACL LANGUAGE")){
+ 		type = "LANGUAGE";
+ 		acl_lang = 1;
+ 	}
+ 
if (strlen(acls) == 0)
return;					/* object has default permissions */

***************
*** 4989,4995 ****
}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! "ACL", NULL, sql->data, "", NULL, NULL, NULL);

free(aclbuf);
destroyPQExpBuffer(sql);
--- 5006,5012 ----
}

ArchiveEntry(fout, objoid, tag, nspname, usename ?
usename : "",
! acl_lang ? "ACL LANGUAGE" : "ACL", NULL,
sql->data, "", NULL, NULL, NULL);

free(aclbuf);
destroyPQExpBuffer(sql);

=====
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 fran?ais !
Yahoo! Mail : http://fr.mail.yahoo.com

---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#8Laurent FAILLIE
l_faillie@yahoo.com
In reply to: Bruce Momjian (#7)
Re: Solution for bug #899

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 français !
Yahoo! Mail : http://fr.mail.yahoo.com

#9Bruce Momjian
bruce@momjian.us
In reply to: Laurent FAILLIE (#8)
Re: Solution for bug #899

Your patch has been added to the PostgreSQL unapplied patches list at:

http://momjian.postgresql.org/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.

---------------------------------------------------------------------------

Laurent FAILLIE wrote:

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 fran?ais !
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

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#10Bruce Momjian
bruce@momjian.us
In reply to: Laurent FAILLIE (#8)
Re: Solution for bug #899

Patch applied. Thanks.

---------------------------------------------------------------------------

Laurent FAILLIE wrote:

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 fran?ais !
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

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#10)
Re: Solution for bug #899

Bruce Momjian <pgman@candle.pha.pa.us> writes:

Patch applied. Thanks.

Did you do anything to address my complaints about this patch?

regards, tom lane

#12Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#11)
Re: Solution for bug #899

Tom Lane wrote:
Bruce Momjian <pgman@candle.pha.pa.us> writes:

Patch applied. Thanks.

Did you do anything to address my complaints about this patch?

Yes. It is a new version of the patch, with comments in each section.

I am attaching the patch --- any other changes?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Attachments:

/bjm/difftext/plainDownload+35-15