Search Postgresql Archives

Re: pg_casts view (was Re: date_trun() with timezones? (was Re: TIME column ...))

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux