aboutsummaryrefslogtreecommitdiff
path: root/src/bin/psql/describe.c
diff options
context:
space:
mode:
authorNeil Conway <neilc@samurai.com>2006-07-17 00:21:23 +0000
committerNeil Conway <neilc@samurai.com>2006-07-17 00:21:23 +0000
commitd77f73eb2ad72274f901ba934f0a44d98c73b966 (patch)
treeeb2711dd13d4ead4639f113a0b79765eb09e6735 /src/bin/psql/describe.c
parentc1e59cc5d972fdbe73340898c1867d209bc65218 (diff)
downloadpostgresql-d77f73eb2ad72274f901ba934f0a44d98c73b966.tar.gz
postgresql-d77f73eb2ad72274f901ba934f0a44d98c73b966.zip
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.
Diffstat (limited to 'src/bin/psql/describe.c')
-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"));