summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Conway2006-07-17 00:21:23 +0000
committerNeil Conway2006-07-17 00:21:23 +0000
commitd77f73eb2ad72274f901ba934f0a44d98c73b966 (patch)
treeeb2711dd13d4ead4639f113a0b79765eb09e6735
parentc1e59cc5d972fdbe73340898c1867d209bc65218 (diff)
Improve psql's \df slash command to include the argument names and modes
(OUT or INOUT) of the function. Patch from David Fetter, editorialization by Neil Conway.
-rw-r--r--src/bin/psql/describe.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 7053f5beffe..ca7d01a6f88 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2006, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.140 2006/06/14 16:49:02 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.141 2006/07/17 00:21:23 neilc Exp $
*/
#include "postgres_fe.h"
#include "describe.h"
@@ -170,8 +170,35 @@ describeFunctions(const char *pattern, bool verbose)
"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\"",
+ " pg_catalog.format_type(p.prorettype, NULL) as \"%s\",\n"
+ " CASE WHEN proallargtypes IS NOT NULL THEN\n"
+ " pg_catalog.array_to_string(ARRAY(\n"
+ " SELECT\n"
+ " CASE\n"
+ " WHEN p.proargmodes[s.i] = 'i' THEN ''\n"
+ " WHEN p.proargmodes[s.i] = 'o' THEN 'OUT '\n"
+ " WHEN p.proargmodes[s.i] = 'b' THEN 'INOUT '\n"
+ " END ||\n"
+ " CASE\n"
+ " WHEN COALESCE(p.proargnames[s.i], '') = '' THEN ''\n"
+ " ELSE p.proargnames[s.i] || ' ' \n"
+ " END ||\n"
+ " pg_catalog.format_type(p.proallargtypes[s.i], NULL)\n"
+ " FROM\n"
+ " pg_catalog.generate_series(1, pg_catalog.array_upper(p.proallargtypes, 1)) AS s(i)\n"
+ " ), ', ')\n"
+ " ELSE\n"
+ " pg_catalog.array_to_string(ARRAY(\n"
+ " SELECT\n"
+ " CASE\n"
+ " WHEN COALESCE(p.proargnames[s.i+1], '') = '' THEN ''\n"
+ " ELSE p.proargnames[s.i+1] || ' '\n"
+ " END ||\n"
+ " pg_catalog.format_type(p.proargtypes[s.i], NULL)\n"
+ " FROM\n"
+ " pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS s(i)\n"
+ " ), ', ')\n"
+ " END AS \"%s\"",
_("Schema"), _("Name"), _("Result data type"),
_("Argument data types"));