From f1f6f12d16f6fc98a0dc3d59f8c463ac5d70c557 Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Tue, 13 May 2008 00:14:11 +0000 Subject: [PATCH] Fix a bug in the previous patch, which caused the title pointer to be used before it was actually set. --- src/bin/psql/describe.c | 78 ++++++++++++++++++++--------------------- src/bin/psql/print.c | 4 ++- 2 files changed, 42 insertions(+), 40 deletions(-) diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c index a9181d1ebc..1b702f1f0f 100644 --- a/src/bin/psql/describe.c +++ b/src/bin/psql/describe.c @@ -865,6 +865,45 @@ describeOneTableDetails(const char *schemaname, goto error_return; numrows = PQntuples(res); + /* Make title */ + switch (tableinfo.relkind) + { + case 'r': + printfPQExpBuffer(&title, _("Table \"%s.%s\""), + schemaname, relationname); + break; + case 'v': + printfPQExpBuffer(&title, _("View \"%s.%s\""), + schemaname, relationname); + break; + case 'S': + printfPQExpBuffer(&title, _("Sequence \"%s.%s\""), + schemaname, relationname); + break; + case 'i': + printfPQExpBuffer(&title, _("Index \"%s.%s\""), + schemaname, relationname); + break; + case 's': + /* not used as of 8.2, but keep it for backwards compatibility */ + printfPQExpBuffer(&title, _("Special relation \"%s.%s\""), + schemaname, relationname); + break; + case 't': + printfPQExpBuffer(&title, _("TOAST table \"%s.%s\""), + schemaname, relationname); + break; + case 'c': + printfPQExpBuffer(&title, _("Composite type \"%s.%s\""), + schemaname, relationname); + break; + default: + /* untranslated unknown relkind */ + printfPQExpBuffer(&title, "?%c? \"%s.%s\"", + tableinfo.relkind, schemaname, relationname); + break; + } + /* Set the number of columns, and their names */ cols = 2; headers[0] = "Column"; @@ -937,45 +976,6 @@ describeOneTableDetails(const char *schemaname, printTableAddCell(&cont, PQgetvalue(res, i, 5), false); } - /* Make title */ - switch (tableinfo.relkind) - { - case 'r': - printfPQExpBuffer(&title, _("Table \"%s.%s\""), - schemaname, relationname); - break; - case 'v': - printfPQExpBuffer(&title, _("View \"%s.%s\""), - schemaname, relationname); - break; - case 'S': - printfPQExpBuffer(&title, _("Sequence \"%s.%s\""), - schemaname, relationname); - break; - case 'i': - printfPQExpBuffer(&title, _("Index \"%s.%s\""), - schemaname, relationname); - break; - case 's': - /* not used as of 8.2, but keep it for backwards compatibility */ - printfPQExpBuffer(&title, _("Special relation \"%s.%s\""), - schemaname, relationname); - break; - case 't': - printfPQExpBuffer(&title, _("TOAST table \"%s.%s\""), - schemaname, relationname); - break; - case 'c': - printfPQExpBuffer(&title, _("Composite type \"%s.%s\""), - schemaname, relationname); - break; - default: - /* untranslated unknown relkind */ - printfPQExpBuffer(&title, "?%c? \"%s.%s\"", - tableinfo.relkind, schemaname, relationname); - break; - } - /* Make footers */ if (tableinfo.relkind == 'i') { diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c index d21ee6ba50..99e47c3596 100644 --- a/src/bin/psql/print.c +++ b/src/bin/psql/print.c @@ -1918,8 +1918,10 @@ ClosePager(FILE *pagerpipe) /* * Initialise a table contents struct. + * Must be called before any other printTable method is used. * - * Must be called before any other printTable method is used. + * The title is not duplicated; the caller must ensure that the buffer + * is available for the lifetime of the printTableContent struct. * * If you call this, you must call printTableCleanup once you're done with the * table. -- 2.39.5