Per discussion on -hackers, this patch changes psql's "expanded" output

mode to only affect the presentation of normal query results, not the
output of psql slash commands. Documentation updated. I also made
some unrelated minor psql cleanup. Per suggestion from Stuart Cooper.
This commit is contained in:
Neil Conway 2005-06-13 06:36:22 +00:00
parent 8c05ca7754
commit 077811605e
7 changed files with 77 additions and 44 deletions

View File

@ -1,5 +1,5 @@
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.143 2005/06/13 02:40:08 neilc Exp $
$PostgreSQL: pgsql/doc/src/sgml/ref/psql-ref.sgml,v 1.144 2005/06/13 06:36:22 neilc Exp $
PostgreSQL documentation
-->
@ -433,8 +433,8 @@ PostgreSQL documentation
<term><option>--expanded</></term>
<listitem>
<para>
Turn on the extended table formatting mode. This is equivalent to the
command <command>\x</command>.
Turn on the expanded table formatting mode. This is equivalent to the
<command>\x</command> command.
</para>
</listitem>
</varlistentry>
@ -1389,7 +1389,7 @@ lo_import 152801
<literal>aligned</literal>, <literal>html</literal>,
<literal>latex</literal>, or <literal>troff-ms</literal>.
Unique abbreviations are allowed. (That would mean one letter
is enough.)
is enough.)
</para>
<para>
@ -1429,10 +1429,13 @@ lo_import 152801
<listitem>
<para>
Toggles between regular and expanded format. When expanded
format is enabled, all output has two columns with the column
name on the left and the data on the right. This mode is
useful if the data wouldn't fit on the screen in the normal
<quote>horizontal</quote> mode.
format is enabled, query results are displayed in two
columns, with the column name on the left and the data on
the right. This option only affects how normal query results
are displayed; the output of <application>psql</application>
meta-commands is always presented using the regular
format. This mode is useful if the data wouldn't fit on the
screen in the normal <quote>horizontal</quote> mode.
</para>
<para>
@ -1722,7 +1725,7 @@ lo_import 152801
<term><literal>\x</literal></term>
<listitem>
<para>
Toggles extended table formatting mode. As such it is equivalent to
Toggles expanded table formatting mode. As such it is equivalent to
<literal>\pset expanded</literal>.
</para>
</listitem>

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.145 2005/06/09 23:28:09 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.146 2005/06/13 06:36:22 neilc Exp $
*/
#include "postgres_fe.h"
#include "command.h"
@ -114,11 +114,6 @@ HandleSlashCmds(PsqlScanState scan_state,
{
/* adjust cmd for possible messages below */
cmd[1] = '\0';
#if 0 /* turned out to be too annoying */
if (isalpha((unsigned char) cmd[0]))
psql_error("Warning: This syntax is deprecated.\n");
#endif
}
}

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.100 2005/06/10 14:49:31 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.101 2005/06/13 06:36:22 neilc Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@ -64,7 +64,6 @@ extern bool prompt_state;
static bool command_no_begin(const char *query);
/*
* "Safe" wrapper around strdup()
*/
@ -189,7 +188,7 @@ setQFout(const char *fname)
*
*/
void
psql_error(const char *fmt,...)
psql_error(const char *fmt, ...)
{
va_list ap;
@ -784,6 +783,10 @@ PrintNotifications(void)
static bool
PrintQueryTuples(const PGresult *results)
{
printQueryOpt my_popt = pset.popt;
my_popt.topt.normal_query = true;
/* write output to \g argument, if any */
if (pset.gfname)
{
@ -800,7 +803,7 @@ PrintQueryTuples(const PGresult *results)
return false;
}
printQuery(results, &pset.popt, pset.queryFout);
printQuery(results, &my_popt, pset.queryFout);
/* close file/pipe, restore old setting */
setQFout(NULL);
@ -812,7 +815,7 @@ PrintQueryTuples(const PGresult *results)
pset.gfname = NULL;
}
else
printQuery(results, &pset.popt, pset.queryFout);
printQuery(results, &my_popt, pset.queryFout);
return true;
}
@ -1001,7 +1004,7 @@ SendQuery(const char *query)
if (on_error_rollback_warning == false && pset.sversion < 80000)
{
fprintf(stderr, _("The server version (%d) does not support savepoints for ON_ERROR_ROLLBACK.\n"),
pset.sversion);
pset.sversion);
on_error_rollback_warning = true;
}
else

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/common.h,v 1.43 2005/05/30 18:28:11 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/common.h,v 1.44 2005/06/13 06:36:22 neilc Exp $
*/
#ifndef COMMON_H
#define COMMON_H
@ -22,7 +22,6 @@
#define atooid(x) ((Oid) strtoul((x), NULL, 10))
/*
* Safer versions of some standard C library functions. If an
* out-of-memory condition occurs, these functions will bail out
@ -36,7 +35,7 @@ extern void *pg_calloc(size_t nmemb, size_t size);
extern bool setQFout(const char *fname);
extern void
psql_error(const char *fmt,...)
psql_error(const char *fmt, ...)
/* This lets gcc check the format string for consistency. */
__attribute__((format(printf, 1, 2)));

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.57 2005/06/09 18:40:06 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/print.c,v 1.58 2005/06/13 06:36:22 neilc Exp $
*/
#include "postgres_fe.h"
#include "common.h"
@ -29,7 +29,6 @@
#include "mbprint.h"
/*************************/
/* Unaligned text */
/*************************/
@ -1261,6 +1260,7 @@ printTable(const char *title,
const char *default_footer[] = {NULL};
unsigned short int border = opt->border;
FILE *output;
bool use_expanded;
if (opt->format == PRINT_NOTHING)
return;
@ -1271,6 +1271,16 @@ printTable(const char *title,
if (opt->format != PRINT_HTML && border > 2)
border = 2;
/*
* We only want to display the results in "expanded" format if
* this is a normal (user-submitted) query, not a table we're
* printing for a slash command.
*/
if (opt->expanded && opt->normal_query)
use_expanded = true;
else
use_expanded = false;
if (fout == stdout)
{
int col_count = 0,
@ -1305,37 +1315,56 @@ printTable(const char *title,
switch (opt->format)
{
case PRINT_UNALIGNED:
if (opt->expanded)
print_unaligned_vertical(title, headers, cells, footers, opt->fieldSep, opt->recordSep, opt->tuples_only, output);
if (use_expanded)
print_unaligned_vertical(title, headers, cells, footers,
opt->fieldSep, opt->recordSep,
opt->tuples_only, output);
else
print_unaligned_text(title, headers, cells, footers, opt->fieldSep, opt->recordSep, opt->tuples_only, output);
print_unaligned_text(title, headers, cells, footers,
opt->fieldSep, opt->recordSep,
opt->tuples_only, output);
break;
case PRINT_ALIGNED:
if (opt->expanded)
print_aligned_vertical(title, headers, cells, footers, opt->tuples_only, border, opt->encoding, output);
if (use_expanded)
print_aligned_vertical(title, headers, cells, footers,
opt->tuples_only, border,
opt->encoding, output);
else
print_aligned_text(title, headers, cells, footers, align, opt->tuples_only, border, opt->encoding, output);
print_aligned_text(title, headers, cells, footers,
align, opt->tuples_only,
border, opt->encoding, output);
break;
case PRINT_HTML:
if (opt->expanded)
print_html_vertical(title, headers, cells, footers, align, opt->tuples_only, border, opt->tableAttr, output);
if (use_expanded)
print_html_vertical(title, headers, cells, footers,
align, opt->tuples_only,
border, opt->tableAttr, output);
else
print_html_text(title, headers, cells, footers, align, opt->tuples_only, border, opt->tableAttr, output);
print_html_text(title, headers, cells, footers,
align, opt->tuples_only, border,
opt->tableAttr, output);
break;
case PRINT_LATEX:
if (opt->expanded)
print_latex_vertical(title, headers, cells, footers, align, opt->tuples_only, border, output);
if (use_expanded)
print_latex_vertical(title, headers, cells, footers, align,
opt->tuples_only, border, output);
else
print_latex_text(title, headers, cells, footers, align, opt->tuples_only, border, output);
print_latex_text(title, headers, cells, footers, align,
opt->tuples_only, border, output);
break;
case PRINT_TROFF_MS:
if (opt->expanded)
print_troff_ms_vertical(title, headers, cells, footers, align, opt->tuples_only, border, output);
if (use_expanded)
print_troff_ms_vertical(title, headers, cells, footers,
align, opt->tuples_only,
border, output);
else
print_troff_ms_text(title, headers, cells, footers, align, opt->tuples_only, border, output);
print_troff_ms_text(title, headers, cells, footers,
align, opt->tuples_only,
border, output);
break;
default:
fprintf(stderr, "+ Oops, you shouldn't see this!\n");
fprintf(stderr, _("illegal output format: %d"), opt->format);
exit(EXIT_FAILURE);
}
/* Only close if we used the pager */

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/print.h,v 1.23 2005/06/09 15:27:27 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/print.h,v 1.24 2005/06/13 06:36:22 neilc Exp $
*/
#ifndef PRINT_H
#define PRINT_H
@ -42,6 +42,9 @@ typedef struct _printTableOpt
* mode */
char *tableAttr; /* attributes for HTML <table ...> */
int encoding; /* character encoding */
bool normal_query; /* are we presenting the results of a
* "normal" query, or a slash
* command? */
} printTableOpt;

View File

@ -3,7 +3,7 @@
*
* Copyright (c) 2000-2005, PostgreSQL Global Development Group
*
* $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.115 2005/04/29 14:30:11 momjian Exp $
* $PostgreSQL: pgsql/src/bin/psql/startup.c,v 1.116 2005/06/13 06:36:22 neilc Exp $
*/
#include "postgres_fe.h"
@ -143,6 +143,7 @@ main(int argc, char *argv[])
pset.queryFout = stdout;
pset.popt.topt.border = 1;
pset.popt.topt.pager = 1;
pset.popt.topt.normal_query = false;
pset.popt.default_footer = true;
SetVariable(pset.vars, "VERSION", PG_VERSION_STR);