On Wed, Jan 18, 2017 at 12:08 AM, Michael Paquier <michael.paqu...@gmail.com > wrote:
> On Wed, Jan 18, 2017 at 3:24 AM, Robert Haas <robertmh...@gmail.com> > wrote: > > On Sat, Jan 14, 2017 at 12:22 AM, Tom Lane <t...@sss.pgh.pa.us> wrote: > >> > >> $ cat loop.sql > >> \if :x < 1000 > >> \echo :x > >> \set x :x + 1 > >> \include loop.sql > >> \fi > >> $ psql --set x=0 -f loop.sql > >> > >> Somebody is going to think of that workaround for not having loops, and > >> then whine about how psql runs out of file descriptors and/or stack. > > > > Hmm, I think somebody just DID think of it. > > > > But personally this doesn't upset me a bit. If somebody complains > > about that particular thing, I think that would be an excellent time > > to suggest that they write a patch to add a looping construct. > > Agreed. > > As far as I can see on this thread, something could be done, it is > just that we don't know yet at which extent things could be done with > the first shot. There are many things that could be done, but at least > I'd suggest to get \if, \fi and \quit to satisfy the first > requirements of this thread, and let loops out of it. I have switched > the patch as "returned with feedback" as getting a new patch is going > to require some thoughts to get the context handling done correctly on > psql side. > -- > Michael > Fabien is pressed for time, so I've been speaking with him out-of-thread about how I should go about implementing it. The v1 patch will be \if <expr>, \elseif <expr>, \else, \endif, where <expr> will be naively evaluated via ParseVariableBool(). \ifs and \endifs must be in the same "file" (each MainLoop will start a new if-stack). This is partly for sanity (you can see the pairings unless the programmer is off in \gset meta-land), partly for ease of design (data structures live in MainLoop), but mostly because it would an absolute requirement if we ever got around to doing \while. I hope to have something ready for the next commitfest. As for the fate of \quit_if, I can see it both ways. On the one hand, it's super-simple, already written, and handy. On the other hand, it's easily replaced by \if <expr> \q \endif So I'll leave that as a separate reviewable patch. As for loops, I don't think anyone was pushing for implementing \while now, only to have a decision about what it would look like and how it would work. There's a whole lot of recording infrastructure (the input could be a stream) needed to make it happen. Moreover, I think \gexec scratched a lot of the itches that would have been solved via a psql looping structure.