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.
Barring any objections I'll apply this later today or tomorrow.
-Neil
Index: doc/src/sgml/ref/psql-ref.sgml
===================================================================
RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ref/psql-ref.sgml,v
retrieving revision 1.142
diff -c -r1.142 psql-ref.sgml
*** doc/src/sgml/ref/psql-ref.sgml 10 Jun 2005 16:31:48 -0000 1.142
--- doc/src/sgml/ref/psql-ref.sgml 13 Jun 2005 02:02:08 -0000
***************
*** 433,440 ****
<term><option>--expanded</></term>
<listitem>
<para>
! Turn on the extended table formatting mode. This is equivalent to the
! command <command>\x</command>.
</para>
</listitem>
</varlistentry>
--- 433,440 ----
<term><option>--expanded</></term>
<listitem>
<para>
! Turn on the expanded table formatting mode. This is equivalent to the
! <command>\x</command> command.
</para>
</listitem>
</varlistentry>
***************
*** 1389,1395 ****
<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.)
</para>
<para>
--- 1389,1395 ----
<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.)
</para>
<para>
***************
*** 1429,1438 ****
<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.
</para>
<para>
--- 1429,1441 ----
<listitem>
<para>
Toggles between regular and expanded format. When expanded
! 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,1728 ****
<term><literal>\x</literal></term>
<listitem>
<para>
! Toggles extended table formatting mode. As such it is equivalent to
<literal>\pset expanded</literal>.
</para>
</listitem>
--- 1725,1731 ----
<term><literal>\x</literal></term>
<listitem>
<para>
! Toggles expanded table formatting mode. As such it is equivalent to
<literal>\pset expanded</literal>.
</para>
</listitem>
Index: src/bin/psql/command.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/command.c,v
retrieving revision 1.145
diff -c -r1.145 command.c
*** src/bin/psql/command.c 9 Jun 2005 23:28:09 -0000 1.145
--- src/bin/psql/command.c 13 Jun 2005 00:19:00 -0000
***************
*** 114,124 ****
{
/* 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
}
}
--- 114,119 ----
Index: src/bin/psql/common.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/common.c,v
retrieving revision 1.100
diff -c -r1.100 common.c
*** src/bin/psql/common.c 10 Jun 2005 14:49:31 -0000 1.100
--- src/bin/psql/common.c 13 Jun 2005 01:46:31 -0000
***************
*** 64,70 ****
static bool command_no_begin(const char *query);
-
/*
* "Safe" wrapper around strdup()
*/
--- 64,69 ----
***************
*** 189,195 ****
*
*/
void
! psql_error(const char *fmt,...)
{
va_list ap;
--- 188,194 ----
*
*/
void
! psql_error(const char *fmt, ...)
{
va_list ap;
***************
*** 784,789 ****
--- 783,792 ----
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,806 ****
return false;
}
! printQuery(results, &pset.popt, pset.queryFout);
/* close file/pipe, restore old setting */
setQFout(NULL);
--- 803,809 ----
return false;
}
! printQuery(results, &my_popt, pset.queryFout);
/* close file/pipe, restore old setting */
setQFout(NULL);
***************
*** 812,818 ****
pset.gfname = NULL;
}
else
! printQuery(results, &pset.popt, pset.queryFout);
return true;
}
--- 815,821 ----
pset.gfname = NULL;
}
else
! printQuery(results, &my_popt, pset.queryFout);
return true;
}
***************
*** 1001,1007 ****
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);
on_error_rollback_warning = true;
}
else
--- 1004,1010 ----
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);
on_error_rollback_warning = true;
}
else
Index: src/bin/psql/common.h
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/common.h,v
retrieving revision 1.43
diff -c -r1.43 common.h
*** src/bin/psql/common.h 30 May 2005 18:28:11 -0000 1.43
--- src/bin/psql/common.h 13 Jun 2005 00:19:19 -0000
***************
*** 22,28 ****
#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
--- 22,27 ----
***************
*** 36,42 ****
extern bool setQFout(const char *fname);
extern void
! psql_error(const char *fmt,...)
/* This lets gcc check the format string for consistency. */
__attribute__((format(printf, 1, 2)));
--- 35,41 ----
extern bool setQFout(const char *fname);
extern void
! psql_error(const char *fmt, ...)
/* This lets gcc check the format string for consistency. */
__attribute__((format(printf, 1, 2)));
Index: src/bin/psql/print.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/print.c,v
retrieving revision 1.57
diff -c -r1.57 print.c
*** src/bin/psql/print.c 9 Jun 2005 18:40:06 -0000 1.57
--- src/bin/psql/print.c 13 Jun 2005 01:56:07 -0000
***************
*** 29,35 ****
#include "mbprint.h"
-
/*************************/
/* Unaligned text */
/*************************/
--- 29,34 ----
***************
*** 1261,1266 ****
--- 1260,1266 ----
const char *default_footer[] = {NULL};
unsigned short int border = opt->border;
FILE *output;
+ bool use_expanded;
if (opt->format == PRINT_NOTHING)
return;
***************
*** 1271,1276 ****
--- 1271,1286 ----
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,1341 ****
switch (opt->format)
{
case PRINT_UNALIGNED:
! if (opt->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);
break;
case PRINT_ALIGNED:
! if (opt->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);
break;
case PRINT_HTML:
! if (opt->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);
break;
case PRINT_LATEX:
! if (opt->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);
break;
case PRINT_TROFF_MS:
! if (opt->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);
break;
default:
! fprintf(stderr, "+ Oops, you shouldn't see this!\n");
}
/* Only close if we used the pager */
--- 1315,1370 ----
switch (opt->format)
{
case PRINT_UNALIGNED:
! 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);
break;
case PRINT_ALIGNED:
! 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);
break;
case PRINT_HTML:
! 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);
break;
case PRINT_LATEX:
! 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);
break;
case PRINT_TROFF_MS:
! 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);
break;
default:
! fprintf(stderr, _("illegal output format: %d"), opt->format);
! exit(EXIT_FAILURE);
}
/* Only close if we used the pager */
Index: src/bin/psql/print.h
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/print.h,v
retrieving revision 1.23
diff -c -r1.23 print.h
*** src/bin/psql/print.h 9 Jun 2005 15:27:27 -0000 1.23
--- src/bin/psql/print.h 13 Jun 2005 01:47:25 -0000
***************
*** 42,47 ****
--- 42,50 ----
* 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;
Index: src/bin/psql/startup.c
===================================================================
RCS file: /var/lib/cvs/pgsql/src/bin/psql/startup.c,v
retrieving revision 1.115
diff -c -r1.115 startup.c
*** src/bin/psql/startup.c 29 Apr 2005 14:30:11 -0000 1.115
--- src/bin/psql/startup.c 13 Jun 2005 01:47:50 -0000
***************
*** 143,148 ****
--- 143,149 ----
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);