Re: \if, \elseif, \else, \endif (was Re: PSQL commands: \quit_if, \quit_unless)
Corey Huinker <corey.huinker@gmail.com>
From: Corey Huinker <corey.huinker@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Fabien COELHO <coelho@cri.ensmp.fr>,
Daniel Verite <daniel@manitou-mail.org>, "David G. Johnston" <david.g.johnston@gmail.com>, Greg Stark <stark@mit.edu>,
Erik Rijkers <er@xs4all.nl>, Robert Haas <robertmhaas@gmail.com>, Jim Nasby <Jim.Nasby@bluetreble.com>, PostgreSQL <pgsql-hackers@postgresql.org>, pgsql-hackers-owner@postgresql.org
Date: 2017-03-17T16:03:01Z
Lists: pgsql-hackers
On Fri, Mar 17, 2017 at 11:42 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Fabien COELHO <coelho@cri.ensmp.fr> writes: > >> I also fear that there are corner cases where the behavior would still > >> be inconsistent. Consider > >> > >> \if ... > >> \set foo `echo \endif should not appear here` > > > In this instance, ISTM that there is no problem. On "\if true", set is > > executed, all is well. On "\if false", the whole line would be skipped > > because the if-related commands are only expected on their own line, all > > is well again. No problem. > > AFAICS, you misunderstood the example completely, or else you're proposing > syntax restrictions that are even more bizarre and unintelligible than > I thought before. We cannot have a situation where the syntax rules for > backslash commands inside an \if are fundamentally different from what > they are elsewhere; that's just going to lead to confusion and bug > reports. > > regards, tom lane > I think Fabien was arguing that inside a false block there would be no syntax rules beyond "is the first non-space character on this line a '\' and if so is it followed with a if/elif/else/endif?". If the answer is no, skip the line. To me that seems somewhat similar to Tom's suggestion that a false branch just keeps consuming text until it encounters a \conditional or EOF.
Commits
-
Support \if ... \elif ... \else ... \endif in psql scripting.
- e984ef5861df 10.0 landed
-
Add a "void *" passthrough pointer for psqlscan.l's callback functions.
- 895e36bb3f36 10.0 landed