pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Marko Tiikkaja <marko@joh.to>
To: PostgreSQL hackers <pgsql-hackers@postgresql.org>
Subject: psql: add \pset true/false
Date: Wed, 28 Oct 2015 10:03:18 +0100
Message-ID: <56308F56.8060908@joh.to> (raw)
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-hackers>

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

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Attachments:

psqltruefalse_v1.patch (text/x-patch, 6.2K) download 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)") */

view thread (44+ messages)  latest in thread

Message-ID: <56308F56.8060908@joh.to>
Permalink:  ../56308F56.8060908@joh.to/
Also on:    postgresql.org/message-id/56308F56.8060908@joh.to

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: marko@joh.to
  Subject: Re: psql: add \pset true/false
  In-Reply-To: <56308F56.8060908@joh.to>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox