psql: Tweak xheader_width and pager_min_lines input parsing

Don't throw away the previous value when an invalid value is proposed.

Discussion: https://postgr.es/m/20230519110205.updpbjiuqgbox6gp@alvherre.pgsql
This commit is contained in:
Alvaro Herrera 2023-05-19 20:19:28 +02:00
parent 8e7912e73d
commit ed7e686a03
No known key found for this signature in database
GPG Key ID: 1C20ACB9D5C564AE
1 changed files with 9 additions and 5 deletions

View File

@ -4521,13 +4521,16 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
popt->topt.expanded_header_width_type = PRINT_XHEADER_PAGE; popt->topt.expanded_header_width_type = PRINT_XHEADER_PAGE;
else else
{ {
popt->topt.expanded_header_width_type = PRINT_XHEADER_EXACT_WIDTH; int intval = atoi(value);
popt->topt.expanded_header_exact_width = atoi(value);
if (popt->topt.expanded_header_exact_width == 0) if (intval == 0)
{ {
pg_log_error("\\pset: allowed xheader_width values are \"%s\" (default), \"%s\", \"%s\", or a number specifying the exact width", "full", "column", "page"); pg_log_error("\\pset: allowed xheader_width values are \"%s\" (default), \"%s\", \"%s\", or a number specifying the exact width", "full", "column", "page");
return false; return false;
} }
popt->topt.expanded_header_width_type = PRINT_XHEADER_EXACT_WIDTH;
popt->topt.expanded_header_exact_width = intval;
} }
} }
@ -4660,8 +4663,9 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
/* set minimum lines for pager use */ /* set minimum lines for pager use */
else if (strcmp(param, "pager_min_lines") == 0) else if (strcmp(param, "pager_min_lines") == 0)
{ {
if (value) if (value &&
popt->topt.pager_min_lines = atoi(value); !ParseVariableNum(value, "pager_min_lines", &popt->topt.pager_min_lines))
return false;
} }
/* disable "(x rows)" footer */ /* disable "(x rows)" footer */