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: Erik Rijkers <er@xs4all.nl>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Fabien COELHO <coelho@cri.ensmp.fr>, Daniel Verite <daniel@manitou-mail.org>,
PostgreSQL <pgsql-hackers@postgresql.org>, pgsql-hackers-owner@postgresql.org
Date: 2017-02-01T13:03:18Z
Lists: pgsql-hackers
On Wed, Feb 1, 2017 at 6:31 AM, Erik Rijkers <er@xs4all.nl> wrote: > On 2017-02-01 09:27, Corey Huinker wrote: > >> 0001.if_endif.v4.diff >> > > A few thoughts after a quick try: > > I dislike the ease with which one gets stuck inside an \if block, in > interactive mode. > > (for instance, in my very first session, I tried '\? \if' to see if > there is more info in that help-screen, but it only displays the normal > help screen. But after that one cannot exit with \q anymore, and there > is no feedback of any kind (prompt?) in which black hole one has ended up. > Only a \endif provides rescue.) > Good find. I'll have to bulk up the help text. This raises a question: in interactive mode, should we give some feedback as to the result of an \if or \elif test? (see below) > > Therefore making it possible to break out of \if-mode with Ctrl-C would be > an improvement, I think. > I would even prefer it when \q would exit psql always, even from within > \if-mode. > This whole thing got started with a \quit_if <expr> command, and it was pointed out that \if :condition \q \endif SELECT ... FROM ... would be preferable. So I don't think we can do that. At least not in non-interactive mode. As for CTRL-C, I've never looked into what psql does with CTRL-C, so I don't know if it's possible, let alone desirable. > > Also, shouldn't the prompt change inside an \if block? > That's a good question. I could see us finding ways to print the t/f of whether a branch is active or not, but I'd like to hear from more people before diving into something like that.
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