>Tom Lane wrote:
> Bruce Momjian <[EMAIL PROTECTED]> 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
  [EMAIL PROTECTED]               |  (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 [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to