| From: | Fabien COELHO <coelho(at)cri(dot)ensmp(dot)fr> |
|---|---|
| To: | Daniel Verite <daniel(at)manitou-mail(dot)org> |
| Cc: | Corey Huinker <corey(dot)huinker(at)gmail(dot)com>, PostgreSQL <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: \if, \elseif, \else, \endif (was Re: PSQL commands: \quit_if, \quit_unless) |
| Date: | 2017-01-30 17:35:37 |
| Message-ID: | alpine.DEB.2.20.1701301816290.30145@lancre |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hello Daniel,
> [...] So psql is not following that model with ON_ERROR_STOP if it exits
> with an error when unable to evaluate an "if" expression. I'm not
> implying that we should necessarily adopt the shell behavior, but as
> these choices have certainly been made in POSIX for good reasons, we
> should make sure to think twice about why they don't apply to psql.
Interesting point.
The shell is about processes, and if relies on the status code returned,
with 0 meaning true, and anything else, which is somehow a process error,
meaning false. So there is no way to distinguish false from process error
in this system, because the status is just one integer.
However, a syntax error, for instance with a shell internal test, leads to
nothing being executed:
bash> if [[ bad syntax ]] ; then echo then ; else echo else ; fi
-bash: conditional binary operator expected
-bash: syntax error near `syntax'
# nothing is echoed
Another example with python in interactive mode:
python> if 1+: print 1; else print 0
SyntaxError: invalid syntax
# nothing is printed
So rejecting execution altogether on syntax errors is somehow a common
practice.
--
Fabien.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Peter Geoghegan | 2017-01-30 17:45:23 | Re: Subtle bug in "Simplify tape block format" commit |
| Previous Message | Peter Eisentraut | 2017-01-30 17:34:41 | Re: sequence data type |