aboutsummaryrefslogtreecommitdiff
path: root/src/bin/psql/command.c
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2012-02-09 20:15:48 +0200
committerPeter Eisentraut <peter_e@gmx.net>2012-02-09 20:20:15 +0200
commit169c8a911260bd5a8b6910c458afa57a1ae29627 (patch)
treebfd5b4ee2f9ab327fa19337492b36794b3f31d25 /src/bin/psql/command.c
parentdd7c84185c160bb0d95bd265182f24f1f6c21924 (diff)
downloadpostgresql-169c8a911260bd5a8b6910c458afa57a1ae29627.tar.gz
postgresql-169c8a911260bd5a8b6910c458afa57a1ae29627.zip
psql: Support zero byte field and record separators
Add new psql settings and command-line options to support setting the field and record separators for unaligned output to a zero byte, for easier interfacing with other shell tools. reviewed by Abhijit Menon-Sen
Diffstat (limited to 'src/bin/psql/command.c')
-rw-r--r--src/bin/psql/command.c41
1 files changed, 34 insertions, 7 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index ab809ec3a02..8421ad00860 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -2272,11 +2272,26 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
{
if (value)
{
- free(popt->topt.fieldSep);
- popt->topt.fieldSep = pg_strdup(value);
+ free(popt->topt.fieldSep.separator);
+ popt->topt.fieldSep.separator = pg_strdup(value);
+ popt->topt.fieldSep.separator_zero = false;
}
if (!quiet)
- printf(_("Field separator is \"%s\".\n"), popt->topt.fieldSep);
+ {
+ if (popt->topt.fieldSep.separator_zero)
+ printf(_("Field separator is zero byte.\n"));
+ else
+ printf(_("Field separator is \"%s\".\n"), popt->topt.fieldSep.separator);
+ }
+ }
+
+ else if (strcmp(param, "fieldsep_zero") == 0)
+ {
+ free(popt->topt.fieldSep.separator);
+ popt->topt.fieldSep.separator = NULL;
+ popt->topt.fieldSep.separator_zero = true;
+ if (!quiet)
+ printf(_("Field separator is zero byte.\n"));
}
/* record separator for unaligned text */
@@ -2284,18 +2299,30 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
{
if (value)
{
- free(popt->topt.recordSep);
- popt->topt.recordSep = pg_strdup(value);
+ free(popt->topt.recordSep.separator);
+ popt->topt.recordSep.separator = pg_strdup(value);
+ popt->topt.recordSep.separator_zero = false;
}
if (!quiet)
{
- if (strcmp(popt->topt.recordSep, "\n") == 0)
+ if (popt->topt.recordSep.separator_zero)
+ printf(_("Record separator is zero byte.\n"));
+ else if (strcmp(popt->topt.recordSep.separator, "\n") == 0)
printf(_("Record separator is <newline>."));
else
- printf(_("Record separator is \"%s\".\n"), popt->topt.recordSep);
+ printf(_("Record separator is \"%s\".\n"), popt->topt.recordSep.separator);
}
}
+ else if (strcmp(param, "recordsep_zero") == 0)
+ {
+ free(popt->topt.recordSep.separator);
+ popt->topt.recordSep.separator = NULL;
+ popt->topt.recordSep.separator_zero = true;
+ if (!quiet)
+ printf(_("Record separator is zero byte.\n"));
+ }
+
/* toggle between full and tuples-only format */
else if (strcmp(param, "t") == 0 || strcmp(param, "tuples_only") == 0)
{