Commit cdc197cf authored by Tom Lane's avatar Tom Lane

Improve psql's \dC command to take a pattern parameter. Casts are shown

if their source or target types match the pattern (using the same definition
of "match" as \dT does).  Per recent discussion.
parent 5ae29525
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.211 2008/09/06 20:18:08 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.212 2008/11/06 15:18:35 tgl Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -894,10 +894,13 @@ testdb=&gt; ...@@ -894,10 +894,13 @@ testdb=&gt;
<varlistentry> <varlistentry>
<term><literal>\dC</literal></term> <term><literal>\dC [ <replaceable class="parameter">pattern</replaceable> ]</literal></term>
<listitem> <listitem>
<para> <para>
Lists all available type casts. Lists all available type casts.
If <replaceable class="parameter">pattern</replaceable>
is specified, only casts whose source or target types match the
pattern are listed.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* Copyright (c) 2000-2008, PostgreSQL Global Development Group * Copyright (c) 2000-2008, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.186 2008/11/03 19:08:56 tgl Exp $ * $PostgreSQL: pgsql/src/bin/psql/describe.c,v 1.187 2008/11/06 15:18:35 tgl Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
...@@ -2082,10 +2082,10 @@ listCasts(const char *pattern) ...@@ -2082,10 +2082,10 @@ listCasts(const char *pattern)
initPQExpBuffer(&buf); initPQExpBuffer(&buf);
/* /*
* We need left join here for binary casts. Also note that we don't * We need a left join to pg_proc for binary casts; the others are just
* attempt to localize '(binary coercible)', because there's too much * paranoia. Also note that we don't attempt to localize '(binary
* risk of gettext translating a function name that happens to match * coercible)', because there's too much risk of gettext translating a
* some string in the PO database. * function name that happens to match some string in the PO database.
*/ */
printfPQExpBuffer(&buf, printfPQExpBuffer(&buf,
"SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n" "SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n"
...@@ -2099,13 +2099,39 @@ listCasts(const char *pattern) ...@@ -2099,13 +2099,39 @@ listCasts(const char *pattern)
" END as \"%s\"\n" " END as \"%s\"\n"
"FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p\n" "FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p\n"
" ON c.castfunc = p.oid\n" " ON c.castfunc = p.oid\n"
"ORDER BY 1, 2", " LEFT JOIN pg_catalog.pg_type ts\n"
" ON c.castsource = ts.oid\n"
" LEFT JOIN pg_catalog.pg_namespace ns\n"
" ON ns.oid = ts.typnamespace\n"
" LEFT JOIN pg_catalog.pg_type tt\n"
" ON c.casttarget = tt.oid\n"
" LEFT JOIN pg_catalog.pg_namespace nt\n"
" ON nt.oid = tt.typnamespace\n"
"WHERE (true",
gettext_noop("Source type"), gettext_noop("Source type"),
gettext_noop("Target type"), gettext_noop("Target type"),
gettext_noop("Function"), gettext_noop("Function"),
gettext_noop("no"), gettext_noop("in assignment"), gettext_noop("yes"), gettext_noop("no"), gettext_noop("in assignment"), gettext_noop("yes"),
gettext_noop("Implicit?")); gettext_noop("Implicit?"));
/*
* Match name pattern against either internal or external name of either
* castsource or casttarget
*/
processSQLNamePattern(pset.db, &buf, pattern, true, false,
"ns.nspname", "ts.typname",
"pg_catalog.format_type(ts.oid, NULL)",
"pg_catalog.pg_type_is_visible(ts.oid)");
appendPQExpBuffer(&buf, ") OR (true");
processSQLNamePattern(pset.db, &buf, pattern, true, false,
"nt.nspname", "tt.typname",
"pg_catalog.format_type(tt.oid, NULL)",
"pg_catalog.pg_type_is_visible(tt.oid)");
appendPQExpBuffer(&buf, ")\nORDER BY 1, 2;");
res = PSQLexec(buf.data, false); res = PSQLexec(buf.data, false);
termPQExpBuffer(&buf); termPQExpBuffer(&buf);
if (!res) if (!res)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2008, PostgreSQL Global Development Group * Copyright (c) 2000-2008, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.130 2008/08/29 15:52:07 alvherre Exp $ * $PostgreSQL: pgsql/src/bin/psql/help.c,v 1.131 2008/11/06 15:18:36 tgl Exp $
*/ */
#include "postgres_fe.h" #include "postgres_fe.h"
...@@ -200,7 +200,7 @@ slashUsage(unsigned short int pager) ...@@ -200,7 +200,7 @@ slashUsage(unsigned short int pager)
fprintf(output, _(" \\da [PATTERN] list aggregate functions\n")); fprintf(output, _(" \\da [PATTERN] list aggregate functions\n"));
fprintf(output, _(" \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n")); fprintf(output, _(" \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n"));
fprintf(output, _(" \\dc [PATTERN] list conversions\n")); fprintf(output, _(" \\dc [PATTERN] list conversions\n"));
fprintf(output, _(" \\dC list casts\n")); fprintf(output, _(" \\dC [PATTERN] list casts\n"));
fprintf(output, _(" \\dd [PATTERN] show comment for object\n")); fprintf(output, _(" \\dd [PATTERN] show comment for object\n"));
fprintf(output, _(" \\dD [PATTERN] list domains\n")); fprintf(output, _(" \\dD [PATTERN] list domains\n"));
fprintf(output, _(" \\df [PATTERN] list functions (add \"+\" for more detail)\n")); fprintf(output, _(" \\df [PATTERN] list functions (add \"+\" for more detail)\n"));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment