Thread: 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