Peter Eisentraut <peter_e@xxxxxxx> writes: > Tom Lane wrote: >> Maybe we should just agree that its argument is a pattern for the >> castsource type's name? > I'd say it could be a pattern for both source and target. Often times I > am interested in casts in either direction. Well, it makes the query markedly uglier, but I suppose we aren't too concerned about the performance of \dC. New proposed patch attached. regards, tom lane
Index: doc/src/sgml/ref/psql-ref.sgml =================================================================== RCS file: /cvsroot/pgsql/doc/src/sgml/ref/psql-ref.sgml,v retrieving revision 1.211 diff -c -r1.211 psql-ref.sgml *** doc/src/sgml/ref/psql-ref.sgml 6 Sep 2008 20:18:08 -0000 1.211 --- doc/src/sgml/ref/psql-ref.sgml 5 Nov 2008 17:41:12 -0000 *************** *** 894,903 **** <varlistentry> ! <term><literal>\dC</literal></term> <listitem> <para> Lists all available type casts. </para> </listitem> </varlistentry> --- 894,906 ---- <varlistentry> ! <term><literal>\dC [ <replaceable class="parameter">pattern</replaceable> ]</literal></term> <listitem> <para> 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> </listitem> </varlistentry> Index: src/bin/psql/describe.c =================================================================== RCS file: /cvsroot/pgsql/src/bin/psql/describe.c,v retrieving revision 1.186 diff -c -r1.186 describe.c *** src/bin/psql/describe.c 3 Nov 2008 19:08:56 -0000 1.186 --- src/bin/psql/describe.c 5 Nov 2008 17:41:12 -0000 *************** *** 2082,2091 **** initPQExpBuffer(&buf); /* ! * We need left join here for binary casts. Also note that we don't ! * attempt to localize '(binary coercible)', because there's too much ! * risk of gettext translating a function name that happens to match ! * some string in the PO database. */ printfPQExpBuffer(&buf, "SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n" --- 2082,2091 ---- initPQExpBuffer(&buf); /* ! * We need a left join to pg_proc for binary casts; the others are just ! * paranoia. Also note that we don't attempt to localize '(binary ! * coercible)', because there's too much risk of gettext translating a ! * function name that happens to match some string in the PO database. */ printfPQExpBuffer(&buf, "SELECT pg_catalog.format_type(castsource, NULL) AS \"%s\",\n" *************** *** 2099,2111 **** " END as \"%s\"\n" "FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p\n" " ON c.castfunc = p.oid\n" ! "ORDER BY 1, 2", gettext_noop("Source type"), gettext_noop("Target type"), gettext_noop("Function"), gettext_noop("no"), gettext_noop("in assignment"), gettext_noop("yes"), gettext_noop("Implicit?")); res = PSQLexec(buf.data, false); termPQExpBuffer(&buf); if (!res) --- 2099,2137 ---- " END as \"%s\"\n" "FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p\n" " ON c.castfunc = p.oid\n" ! " 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("Target type"), gettext_noop("Function"), gettext_noop("no"), gettext_noop("in assignment"), gettext_noop("yes"), 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); termPQExpBuffer(&buf); if (!res) Index: src/bin/psql/help.c =================================================================== RCS file: /cvsroot/pgsql/src/bin/psql/help.c,v retrieving revision 1.130 diff -c -r1.130 help.c *** src/bin/psql/help.c 29 Aug 2008 15:52:07 -0000 1.130 --- src/bin/psql/help.c 5 Nov 2008 17:41:12 -0000 *************** *** 200,206 **** fprintf(output, _(" \\da [PATTERN] list aggregate functions\n")); fprintf(output, _(" \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n")); fprintf(output, _(" \\dc [PATTERN] list conversions\n")); ! fprintf(output, _(" \\dC list casts\n")); fprintf(output, _(" \\dd [PATTERN] show comment for object\n")); fprintf(output, _(" \\dD [PATTERN] list domains\n")); fprintf(output, _(" \\df [PATTERN] list functions (add \"+\" for more detail)\n")); --- 200,206 ---- fprintf(output, _(" \\da [PATTERN] list aggregate functions\n")); fprintf(output, _(" \\db [PATTERN] list tablespaces (add \"+\" for more detail)\n")); fprintf(output, _(" \\dc [PATTERN] list conversions\n")); ! fprintf(output, _(" \\dC [PATTERN] list casts\n")); fprintf(output, _(" \\dd [PATTERN] show comment for object\n")); fprintf(output, _(" \\dD [PATTERN] list domains\n")); fprintf(output, _(" \\df [PATTERN] list functions (add \"+\" for more detail)\n"));
-- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general