OSDN Git Service

psql's \do was going out of its way to lie about the result type of
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Nov 2001 15:57:08 +0000 (15:57 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Nov 2001 15:57:08 +0000 (15:57 +0000)
operators.  Should report the declared oprresult type, not the return type
of the underlying proc, which might be only binary-compatible (cf.
textcat entries).

src/bin/psql/describe.c

index 6fefdf4..e285535 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.41 2001/10/25 05:49:53 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.42 2001/11/12 15:57:08 tgl Exp $
  */
 #include "postgres_fe.h"
 #include "describe.h"
@@ -213,15 +213,14 @@ describeOperators(const char *name)
                         "SELECT o.oprname AS \"%s\",\n"
                         "  CASE WHEN o.oprkind='l' THEN NULL ELSE format_type(o.oprleft, NULL) END AS \"%s\",\n"
                         "  CASE WHEN o.oprkind='r' THEN NULL ELSE format_type(o.oprright, NULL) END AS \"%s\",\n"
-                        "  format_type(p.prorettype, NULL) AS \"%s\",\n"
-                        "  obj_description(p.oid, 'pg_proc') as \"%s\"\n"
-                        "FROM pg_proc p, pg_operator o\n"
-                        "WHERE RegprocToOid(o.oprcode) = p.oid\n",
+                        "  format_type(o.oprresult, NULL) AS \"%s\",\n"
+                        "  obj_description(o.oprcode, 'pg_proc') AS \"%s\"\n"
+                        "FROM pg_operator o\n",
                         _("Name"), _("Left arg type"), _("Right arg type"),
                         _("Result type"), _("Description"));
        if (name)
        {
-               strcat(buf, "  AND o.oprname = '");
+               strcat(buf, "WHERE o.oprname = '");
                strncat(buf, name, REGEXP_CUTOFF);
                strcat(buf, "'\n");
        }