]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
psql's \d command wasn't doing the right things with 'char' (type 18)
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 26 Feb 2000 18:31:25 +0000 (18:31 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 26 Feb 2000 18:31:25 +0000 (18:31 +0000)
fields, nor with bpchar and varchar fields that have typmod -1.  The
latter effectively have an unspecified length, so I made them display
as char() and varchar() rather than falsely equating them to char(1)
and varchar(1).

src/bin/psql/describe.c

index 0282906064c2e05f56beb9de70038d713e05eb68..631a04b336df7abf47e7a22766bfa0b89f8b34ad 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2000 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.17 2000/02/16 13:15:26 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.18 2000/02/26 18:31:25 tgl Exp $
  */
 #include "postgres.h"
 #include "describe.h"
@@ -631,9 +631,7 @@ describeTableDetails(const char *name, bool desc)
             attype++;
         }
         /* (convert some internal type names to SQL'ish) */
-        if (strcmp(attype, "bpchar")==0)
-            typename = "char";
-        else if (strcmp(attype, "int2")==0)
+               if (strcmp(attype, "int2")==0)
             typename = "smallint";
         else if (strcmp(attype, "int4")==0)
             typename = "integer";
@@ -646,13 +644,26 @@ describeTableDetails(const char *name, bool desc)
         /* more might need to be added when date/time types are sorted out */
 
                cells[i * cols + 1] = xmalloc(NAMEDATALEN + 16);
-               if (strcmp(typename, "char") == 0)
-                       sprintf(cells[i * cols + 1], "char(%d)", attypmod != -1 ? attypmod - VARHDRSZ : 1);
+               if (strcmp(typename, "bpchar") == 0)
+               {
+                       if (attypmod != -1)
+                               sprintf(cells[i * cols + 1], "char(%d)", attypmod - VARHDRSZ);
+                       else
+                               sprintf(cells[i * cols + 1], "char()");
+               }
                else if (strcmp(typename, "varchar") == 0)
-                       sprintf(cells[i * cols + 1], "varchar(%d)", attypmod != -1 ? attypmod - VARHDRSZ : 1);
+               {
+                       if (attypmod != -1)
+                               sprintf(cells[i * cols + 1], "varchar(%d)", attypmod - VARHDRSZ);
+                       else
+                               sprintf(cells[i * cols + 1], "varchar()");
+               }
                else if (strcmp(typename, "numeric") == 0)
-                       sprintf(cells[i * cols + 1], "numeric(%d,%d)", ((attypmod - VARHDRSZ) >> 16) & 0xffff,
+               {
+                       sprintf(cells[i * cols + 1], "numeric(%d,%d)",
+                                       ((attypmod - VARHDRSZ) >> 16) & 0xffff,
                                        (attypmod - VARHDRSZ) & 0xffff);
+               }
                else
                        strcpy(cells[i * cols + 1], typename);