diff options
Diffstat (limited to 'src/bin/psql/command.c')
-rw-r--r-- | src/bin/psql/command.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index cac98804ab5..a81bd3307b4 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -2244,6 +2244,7 @@ exec_command_pset(PsqlScanState scan_state, bool active_branch) "unicode_border_linestyle", "unicode_column_linestyle", "unicode_header_linestyle", + "xheader_width", NULL }; @@ -4369,6 +4370,29 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet) popt->topt.expanded = !popt->topt.expanded; } + /* header line width in expanded mode */ + else if (strcmp(param, "xheader_width") == 0) + { + if (! value) + ; + else if (pg_strcasecmp(value, "full") == 0) + popt->topt.expanded_header_width_type = PRINT_XHEADER_FULL; + else if (pg_strcasecmp(value, "column") == 0) + popt->topt.expanded_header_width_type = PRINT_XHEADER_COLUMN; + else if (pg_strcasecmp(value, "page") == 0) + popt->topt.expanded_header_width_type = PRINT_XHEADER_PAGE; + else + { + popt->topt.expanded_header_width_type = PRINT_XHEADER_EXACT_WIDTH; + popt->topt.expanded_header_exact_width = atoi(value); + if (popt->topt.expanded_header_exact_width == 0) + { + pg_log_error("\\pset: allowed xheader_width values are full (default), column, page, or a number specifying the exact width."); + return false; + } + } + } + /* field separator for CSV format */ else if (strcmp(param, "csv_fieldsep") == 0) { @@ -4561,6 +4585,19 @@ printPsetInfo(const char *param, printQueryOpt *popt) printf(_("Expanded display is off.\n")); } + /* show xheader width value */ + else if (strcmp(param, "xheader_width") == 0) + { + if (popt->topt.expanded_header_width_type == PRINT_XHEADER_FULL) + printf(_("Expanded header width is 'full'.\n")); + else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_COLUMN) + printf(_("Expanded header width is 'column'.\n")); + else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_PAGE) + printf(_("Expanded header width is 'page'.\n")); + else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_EXACT_WIDTH) + printf(_("Expanded header width is %d.\n"), popt->topt.expanded_header_exact_width); + } + /* show field separator for CSV format */ else if (strcmp(param, "csv_fieldsep") == 0) { @@ -4881,6 +4918,23 @@ pset_value_string(const char *param, printQueryOpt *popt) return pstrdup(_unicode_linestyle2string(popt->topt.unicode_column_linestyle)); else if (strcmp(param, "unicode_header_linestyle") == 0) return pstrdup(_unicode_linestyle2string(popt->topt.unicode_header_linestyle)); + else if (strcmp(param, "xheader_width") == 0) + { + if (popt->topt.expanded_header_width_type == PRINT_XHEADER_FULL) + return(pstrdup("full")); + else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_COLUMN) + return(pstrdup("column")); + else if (popt->topt.expanded_header_width_type == PRINT_XHEADER_PAGE) + return(pstrdup("page")); + else + { + /* must be PRINT_XHEADER_EXACT_WIDTH */ + char wbuff[32]; + snprintf(wbuff, sizeof(wbuff), "%d", + popt->topt.expanded_header_exact_width); + return pstrdup(wbuff); + } + } else return pstrdup("ERROR"); } |