From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr>, Corey Huinker <corey(dot)huinker(at)gmail(dot)com>, Greg Stark <stark(at)mit(dot)edu>, Erik Rijkers <er(at)xs4all(dot)nl>, Daniel Verite <daniel(at)manitou-mail(dot)org>, Jim Nasby <Jim(dot)Nasby(at)bluetreble(dot)com>, PostgreSQL <pgsql-hackers(at)postgresql(dot)org>, pgsql-hackers-owner(at)postgresql(dot)org |
Subject: | Re: \if, \elseif, \else, \endif (was Re: PSQL commands: \quit_if, \quit_unless) |
Date: | 2017-03-12 02:40:32 |
Message-ID: | 17530.1489286432@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Robert Haas <robertmhaas(at)gmail(dot)com> writes:
> I think that I have not taken a firm position on what the behavior
> should be with respect to errors. I took the position that the
> messages being printed saying what happened were too detailed, because
> they not only described what had happened but also tried to
> prognosticate what would happen next, which was dissimilar to what we
> do elsewhere and likely to be hard to maintain - or even get right for
> v1.
I thought the same of the version you were complaining about, but
the current patch seems to have dialed it back a good deal. Do you
still find the current error messages unmaintainable?
> But I have not taken a position on what should happen if the
> condition for \if or \elsif evaluates to a baffling value. Corey's
> prior proposal was to treat it, essentially, as neither true nor
> false, skipping both arms of the if. Tom seems to want an invalid
> value treated as false. You could also imagine pretending that the
> command never happened at all, likely leading to complete chaos.
Hmm, if that "prior proposal" was indeed on the table, I missed it.
The current patch, AFAICS, implements your third choice, which I quite
agree would lead to complete chaos; there would be no way to write a
script that did anything useful with that.
It is interesting to think about what would happen if "expr is neither
true nor false" were defined as "skip immediately to \endif" (which
I think is the natural generalization of what you said to apply to an
intermediate \elif). I believe that it'd be possible to work with it,
but it's not very clear if it'd be easier or harder to work with than
the rule of treating bogus results as false. What is clear is that
it'd be unlike any other conditional construct I ever worked with.
As was pointed out upthread, "treat error results as false" is what
you get from "if" in a POSIX shell. I think it's fair also to draw
an analogy to what SQL does with null boolean values, which is to
treat them as false when a decision is required (in, eg, WHERE or
CASE). So I think "treat bogus results as false" is the most
conservative, least likely to cause unhappy surprises, solution here.
> Other positions are also possible.
If you've got concrete ideas about that, let's hear them. I'm not
trying to foreclose discussion.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2017-03-12 02:41:57 | Re: Speed up Clog Access by increasing CLOG buffers |
Previous Message | Mengxing Liu | 2017-03-12 02:39:57 | Re: [GSOC 17] Eliminate O(N^2) scaling from rw-conflict tracking in serializable transactions |