diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2012-02-09 20:15:48 +0200 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2012-02-09 20:20:15 +0200 |
commit | 169c8a911260bd5a8b6910c458afa57a1ae29627 (patch) | |
tree | bfd5b4ee2f9ab327fa19337492b36794b3f31d25 /src/bin/psql/command.c | |
parent | dd7c84185c160bb0d95bd265182f24f1f6c21924 (diff) | |
download | postgresql-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.c | 41 |
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) { |