Обсуждение: Solution for bug #899
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
fautessur
/________/ / 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
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
--- 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
fautessur
/________/ / 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
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 "
"WHEREoid = '%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 "
"WHEREoid = '%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
fautessur
/________/ / 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
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
--- 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 fautessur /________/ / 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
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
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 "
"WHEREoid = '%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 "
"WHEREoid = '%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
fautessur
/________/ / 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
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
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
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
>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 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