Fix breakage of "\pset format latex".

Commit eaf746a5b unintentionally made psql's "latex" output format
inaccessible, since not only "latex" but all abbreviations of it
were considered ambiguous against "latex-longtable".  Let's go
back to the longstanding behavior that all shortened versions
mean "latex", and you have to write at least "latex-" to get
"latex-longtable".  This leaves the only difference from pre-v12
behavior being that "\pset format a" is considered ambiguous.

The fact that the regression tests didn't expose this is pretty bad,
but fixing it is material for a separate commit.

Discussion: https://postgr.es/m/cb7e1caf-3ea6-450d-af28-f524903a030c@manitou-mail.org
This commit is contained in:
Tom Lane 2018-11-26 12:31:20 -05:00
parent 36d442a25a
commit a7eece4fc9

View File

@ -3698,7 +3698,6 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
{"asciidoc", PRINT_ASCIIDOC}, {"asciidoc", PRINT_ASCIIDOC},
{"html", PRINT_HTML}, {"html", PRINT_HTML},
{"latex", PRINT_LATEX}, {"latex", PRINT_LATEX},
{"latex-longtable", PRINT_LATEX_LONGTABLE},
{"troff-ms", PRINT_TROFF_MS}, {"troff-ms", PRINT_TROFF_MS},
{"unaligned", PRINT_UNALIGNED}, {"unaligned", PRINT_UNALIGNED},
{"wrapped", PRINT_WRAPPED} {"wrapped", PRINT_WRAPPED}
@ -3725,13 +3724,22 @@ do_pset(const char *param, const char *value, printQueryOpt *popt, bool quiet)
} }
} }
} }
if (match_pos < 0) if (match_pos >= 0)
popt->topt.format = formats[match_pos].number;
else if (pg_strncasecmp("latex-longtable", value, vallen) == 0)
{
/*
* We must treat latex-longtable specially because latex is a
* prefix of it; if both were in the table above, we'd think
* "latex" is ambiguous.
*/
popt->topt.format = PRINT_LATEX_LONGTABLE;
}
else
{ {
psql_error("\\pset: allowed formats are aligned, asciidoc, html, latex, latex-longtable, troff-ms, unaligned, wrapped\n"); psql_error("\\pset: allowed formats are aligned, asciidoc, html, latex, latex-longtable, troff-ms, unaligned, wrapped\n");
return false; return false;
} }
else
popt->topt.format = formats[match_pos].number;
} }
} }