Folks,

I've noticed that \df doesn't do quite what it might when a function
is created with named input parameters.  Please find enclosed a patch
against CVS TIP that does this better.

On a slightly related note, I've noticed that psql isn't backward
compatible.  I know that it's *very* late to be introducing things,
but I consider this a bug, and would like to send in more fixes.

What do you all think?

Cheers,
D
-- 
David Fetter [EMAIL PROTECTED] http://fetter.org/
phone: +1 510 893 6100   mobile: +1 415 235 3778

Remember to vote!
Index: src/bin/psql/describe.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/psql/describe.c,v
retrieving revision 1.124
diff -c -r1.124 describe.c
*** src/bin/psql/describe.c     14 Aug 2005 19:20:45 -0000      1.124
--- src/bin/psql/describe.c     29 Aug 2005 02:57:14 -0000
***************
*** 170,186 ****
                                          "SELECT n.nspname as \"%s\",\n"
                                          "  p.proname as \"%s\",\n"
                                          "  CASE WHEN p.proretset THEN 'setof 
' ELSE '' END ||\n"
!                                         "  
pg_catalog.format_type(p.prorettype, NULL) as \"%s\",\n"
!                                         "  
pg_catalog.oidvectortypes(p.proargtypes) as \"%s\"",
!                                         _("Schema"), _("Name"), _("Result 
data type"), 
!                                         _("Argument data types"));
  
        if (verbose)
                appendPQExpBuffer(&buf,
                                                  ",\n  r.rolname as \"%s\",\n"
                                                  "  l.lanname as \"%s\",\n"
                                                  "  p.prosrc as \"%s\",\n"
!                         "  pg_catalog.obj_description(p.oid, 'pg_proc') as 
\"%s\"",
                                                  _("Owner"), _("Language"),
                                                  _("Source code"), 
_("Description"));
  
--- 170,203 ----
                                          "SELECT n.nspname as \"%s\",\n"
                                          "  p.proname as \"%s\",\n"
                                          "  CASE WHEN p.proretset THEN 'setof 
' ELSE '' END ||\n"
!                                         "  
pg_catalog.format_type(p.prorettype, NULL) as \"%s\",\n",
!                                         _("Schema"), _("Name"), _("Result 
data type")); 
  
+       if (pset.sversion < 80000)
+       {
+               appendPQExpBuffer(&buf,
+                                         "      
pg_catalog.oidvectortypes(p.proargtypes) as \"%s\"",
+                                         _("Argument data types"));
+       }
+       else
+       {
+               appendPQExpBuffer(&buf,
+                                         "  CASE WHEN 
array_upper(p.proargnames, 1)>0 THEN\n"
+                                         "  array_to_string(ARRAY(\n"
+                                         "        SELECT (p.proargnames)[s.a] 
|| ' ' || (string_to_array(pg_catalog.oidvectortypes(p.proargtypes), ', ' 
))[s.a]\n"
+                                         "        FROM 
generate_series(1,p.pronargs) AS s(a)\n"
+                                         "      ), ', ')\n"
+                                         "    ELSE\n"
+                                         "      
pg_catalog.oidvectortypes(p.proargtypes)\n"
+                                         "    END as \"%s\"",
+                                         _("Argument data types"));
+       }
        if (verbose)
                appendPQExpBuffer(&buf,
                                                  ",\n  r.rolname as \"%s\",\n"
                                                  "  l.lanname as \"%s\",\n"
                                                  "  p.prosrc as \"%s\",\n"
!                                                 "  
pg_catalog.obj_description(p.oid, 'pg_proc') as \"%s\"",
                                                  _("Owner"), _("Language"),
                                                  _("Source code"), 
_("Description"));
  
***************
*** 192,198 ****
                appendPQExpBuffer(&buf,
                                                  "\nFROM pg_catalog.pg_proc p"
                                                  "\n     LEFT JOIN 
pg_catalog.pg_namespace n ON n.oid = p.pronamespace"
!                "\n     LEFT JOIN pg_catalog.pg_language l ON l.oid = 
p.prolang"
                                                  "\n     LEFT JOIN 
pg_catalog.pg_roles r ON r.oid = p.proowner\n");
  
        /*
--- 209,215 ----
                appendPQExpBuffer(&buf,
                                                  "\nFROM pg_catalog.pg_proc p"
                                                  "\n     LEFT JOIN 
pg_catalog.pg_namespace n ON n.oid = p.pronamespace"
!                                                 "\n     LEFT JOIN 
pg_catalog.pg_language l ON l.oid = p.prolang"
                                                  "\n     LEFT JOIN 
pg_catalog.pg_roles r ON r.oid = p.proowner\n");
  
        /*
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

Reply via email to