psql's \d command wasn't doing the right things with 'char' (type 18)

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).
This commit is contained in:
Tom Lane 2000-02-26 18:31:25 +00:00
parent 6f11af0c62
commit cbf4c9671e
1 changed files with 19 additions and 8 deletions

View 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);