Hello hello,
Since the default t/f output for booleans is not very user friendly,
attached is a patch which enables you to do for example the following:
=# \pset true TRUE
Boolean TRUE display is "TRUE".
=# \pset false FALSE
Boolean FALSE display is "FALSE".
=# select true, false;
bool | bool
------+-------
TRUE | FALSE
(1 row)
(For anyone reviewing: I didn't touch the parts of describe.c which do
this for nullPrint:
myopt.nullPrint = NULL;
since I thought it was dubious in the first place, and I don't think we
output booleans in the describe commands.)
.m
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 212dbfa..2048ba3 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -2229,6 +2229,26 @@ lo_import 152801
</varlistentry>
<varlistentry>
+ <term><literal>true</literal></term>
+ <listitem>
+ <para>
+ Sets the string to be printed in place of a boolean TRUE value.
+ The default is to print a 't' character.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>false</literal></term>
+ <listitem>
+ <para>
+ Sets the string to be printed in place of a boolean FALSE value.
+ The default is to print an 'f' character.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><literal>null</literal></term>
<listitem>
<para>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 5163c76..7fadb0a 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1151,7 +1151,7 @@ exec_command(const char *cmd,
int i;
static const char *const my_list[] = {
"border", "columns", "expanded", "fieldsep", "fieldsep_zero",
- "footer", "format", "linestyle", "null",
+ "footer", "format", "linestyle", "true", "false", "null",
"numericlocale", "pager", "pager_min_lines",
"recordsep", "recordsep_zero",
"tableattr", "title", "tuples_only",
@@ -2591,6 +2591,26 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
}
}
+ /* boolean TRUE display */
+ else if (strcmp(param, "true") == 0)
+ {
+ if (value)
+ {
+ free(popt->truePrint);
+ popt->truePrint = pg_strdup(value);
+ }
+ }
+
+ /* boolean FALSE display */
+ else if (strcmp(param, "false") == 0)
+ {
+ if (value)
+ {
+ free(popt->falsePrint);
+ popt->falsePrint = pg_strdup(value);
+ }
+ }
+
/* field separator for unaligned text */
else if (strcmp(param, "fieldsep") == 0)
{
@@ -2782,6 +2802,20 @@ printPsetInfo(const char *param, struct printQueryOpt *popt)
popt->nullPrint ? popt->nullPrint : "");
}
+ /* show true display */
+ else if (strcmp(param, "true") == 0)
+ {
+ printf(_("Boolean TRUE display is \"%s\".\n"),
+ popt->truePrint ? popt->truePrint : "t");
+ }
+
+ /* show false display */
+ else if (strcmp(param, "false") == 0)
+ {
+ printf(_("Boolean FALSE display is \"%s\".\n"),
+ popt->falsePrint ? popt->falsePrint : "f");
+ }
+
/* show locale-aware numeric output */
else if (strcmp(param, "numericlocale") == 0)
{
@@ -2953,6 +2987,14 @@ pset_value_string(const char *param, struct printQueryOpt *popt)
return psprintf("%s", _align2string(popt->topt.format));
else if (strcmp(param, "linestyle") == 0)
return psprintf("%s", get_line_style(&popt->topt)->name);
+ else if (strcmp(param, "true") == 0)
+ return pset_quoted_string(popt->truePrint
+ ? popt->truePrint
+ : "t");
+ else if (strcmp(param, "false") == 0)
+ return pset_quoted_string(popt->falsePrint
+ ? popt->falsePrint
+ : "f");
else if (strcmp(param, "null") == 0)
return pset_quoted_string(popt->nullPrint
? popt->nullPrint
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 5b63e76..d0bf418 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -258,7 +258,7 @@ slashUsage(unsigned short int pager)
fprintf(output, _(" \\H toggle HTML output mode (currently %s)\n"),
ON(pset.popt.topt.format == PRINT_HTML));
fprintf(output, _(" \\pset [NAME [VALUE]] set table output option\n"
- " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|\n"
+ " (NAME := {format|border|expanded|fieldsep|fieldsep_zero|footer|true|false|null|\n"
" numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager|\n"
" unicode_border_linestyle|unicode_column_linestyle|unicode_header_linestyle})\n"));
fprintf(output, _(" \\t [on|off] show only rows (currently %s)\n"),
@@ -371,6 +371,8 @@ helpVariables(unsigned short int pager)
fprintf(output, _(" format set output format [unaligned, aligned, wrapped, html, asciidoc, ...]\n"));
fprintf(output, _(" footer enable or disable display of the table footer [on, off]\n"));
fprintf(output, _(" linestyle set the border line drawing style [ascii, old-ascii, unicode]\n"));
+ fprintf(output, _(" true set the string to be prined in place of a TRUE value\n"));
+ fprintf(output, _(" false set the string to be prined in place of a FALSE value\n"));
fprintf(output, _(" null set the string to be printed in place of a null value\n"));
fprintf(output, _(" numericlocale enable or disable display of a locale-specific character to separate\n"
" groups of digits [on, off]\n"));
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index ad4350e..ba5c651 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -3215,6 +3215,13 @@ printQuery(const PGresult *result, const printQueryOpt *opt, FILE *fout, FILE *f
cell = format_numeric_locale(cell);
mustfree = true;
}
+ else if (PQftype(result, c) == BOOLOID)
+ {
+ if (cell[0] == 't' && opt->truePrint)
+ cell = opt->truePrint;
+ else if (cell[0] == 'f' && opt->falsePrint)
+ cell = opt->falsePrint;
+ }
}
translate = (opt->translate_columns && opt->translate_columns[c]);
diff --git a/src/bin/psql/print.h b/src/bin/psql/print.h
index b0b6bf5..7949c18 100644
--- a/src/bin/psql/print.h
+++ b/src/bin/psql/print.h
@@ -152,6 +152,8 @@ typedef struct printQueryOpt
{
printTableOpt topt; /* the options above */
char *nullPrint; /* how to print null entities */
+ char *truePrint; /* how to print TRUE booleans */
+ char *falsePrint; /* how to print FALSE booleans */
bool quote; /* quote all values as much as possible */
char *title; /* override title */
char **footers; /* override footer (default is "(xx rows)") */
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers