Обсуждение: wording for 38.6.2.4. Simple CASE and 38.6.2.5. Searched CASE
Hi,
I find it a little confusing how 38.6.2.4. Simple CASE and 38.6.2.5.
Searched CASE is described. In Simple CASE is written
CASE search-expression
WHEN expression [,
and in 38.6.2.5. Searched CASE is written
CASE
WHEN boolean-expression
IMO speaking of a search-expression for the simple CASE and speaking of
a boolean-expression in between Searched Case is confusing because of
the use of the word "search". I would change it to that:
[snip]
38.6.2.4. Simple CASE
CASE
WHEN boolean-expression THEN
statements
[ WHEN boolean-expression THEN
statements
... ]
[ ELSE
statements ]
END CASE;
The simple form of CASE provides conditional execution based on truth of
boolean expressions. Each WHEN clause's boolean-expression is evaluated
in turn, until one is found that yields true. Then the corresponding
statements are executed, and then control passes to the next statement
after END CASE. (Subsequent WHEN expressions are not evaluated.) If no
true result is found, the ELSE statements are executed; but if ELSE is
not present, then a CASE_NOT_FOUND exception is raised.
[EXAMPLE ...]
38.6.2.5. Searched CASE
CASE search-expression
WHEN expression [, expression [ ... ]] THEN
statements
[ WHEN expression [, expression [ ... ]] THEN
statements
... ]
[ ELSE
statements ]
END CASE;
The searched form of CASE provides conditional execution based on
equality of operands. The search-expression is evaluated (once) and
successively compared to each expression in the WHEN clauses. If a match
is found, then the corresponding statements are executed, and then
control passes to the next statement after END CASE. (Subsequent WHEN
expressions are not evaluated.) If no match is found, the ELSE
statements are executed; but if ELSE is not present, then a
CASE_NOT_FOUND exception is raised.
[EXAMPLE ...]
[snip]
I moved 38.6.2.5 to 38.6.2.4 and changed the naming ...
Thoughts?
Cheers
Andy
Andreas Wenk <a.wenk@netzmeister-st-pauli.de> writes:
> I find it a little confusing how 38.6.2.4. Simple CASE and 38.6.2.5.
> Searched CASE is described. In Simple CASE is written
Hmm, it would be important to keep this in sync with the core-SQL
description of CASE, no? (Section 9.16.1)
I can't say that I think "simple CASE" and "searched CASE" are good
descriptions of the two forms, but just switching them doesn't make it
much better. And doing so would likely create as much confusion as
it eliminates. Can we come up with some other phrases?
regards, tom lane
Tom Lane wrote:
> Hmm, it would be important to keep this in sync with the core-SQL
> description of CASE, no? (Section 9.16.1)
yes. And there is written "general" form and "simple" form. I like that.
> I can't say that I think "simple CASE" and "searched CASE" are good
> descriptions of the two forms, but just switching them doesn't make it
> much better. And doing so would likely create as much confusion as
> it eliminates. Can we come up with some other phrases?
IMO it should be the same like in 9.16.1 - a "general" form and a
"simple" form. Then changing both sections would be ok, because in
9.16.1 the simple form is mentioned after the general form.
Would it be correct to change it in this direction - or is this
logically wrong (change expression to value):
38.6.2.4. Simple CASE
CASE expression
WHEN value [, value [ ... ]] THEN
statements
[ WHEN value [, value [ ... ]] THEN
statements
... ]
[ ELSE
statements ]
END CASE;
Maybe it could also be value-expression ... but that I don't like that much.
Then we could go further with this:
38.6.2.5. General CASE
CASE
WHEN boolean-expression THEN
statements
[ WHEN boolean-expression THEN
statements
... ]
[ ELSE
statements ]
END CASE;
The general form of CASE provides conditional execution based on truth
of boolean expressions. ...
I think with these changes, 9.16.1 and this two sections are working
together
Cheers
Andy
P.S.: I can provide a patch with the changes if we discussed it and are
willing to make a change
Andreas Wenk schrieb: > Tom Lane wrote: >> Hmm, it would be important to keep this in sync with the core-SQL >> description of CASE, no? (Section 9.16.1) > > yes. And there is written "general" form and "simple" form. I like that. > >> I can't say that I think "simple CASE" and "searched CASE" are good >> descriptions of the two forms, but just switching them doesn't make it >> much better. And doing so would likely create as much confusion as >> it eliminates. Can we come up with some other phrases? > > IMO it should be the same like in 9.16.1 - a "general" form and a > "simple" form. Then changing both sections would be ok, because in > 9.16.1 the simple form is mentioned after the general form. > > Would it be correct to change it in this direction - or is this > logically wrong (change expression to value): > > 38.6.2.4. Simple CASE > > CASE expression > WHEN value [, value [ ... ]] THEN > statements > [ WHEN value [, value [ ... ]] THEN > statements > ... ] > [ ELSE > statements ] > END CASE; > > Maybe it could also be value-expression ... but that I don't like that > much. > > Then we could go further with this: > > 38.6.2.5. General CASE > > CASE > WHEN boolean-expression THEN > statements > [ WHEN boolean-expression THEN > statements > ... ] > [ ELSE > statements ] > END CASE; > > The general form of CASE provides conditional execution based on truth > of boolean expressions. ... > > I think with these changes, 9.16.1 and this two sections are working > together > > Cheers > > Andy > > P.S.: I can provide a patch with the changes if we discussed it and are > willing to make a change Hi, before building a patch it would be nice to hear, if my approach to change the docu here is a good one ... Thanks Andy
Andreas Wenk wrote:
> Tom Lane wrote:
> >Hmm, it would be important to keep this in sync with the core-SQL
> >description of CASE, no? (Section 9.16.1)
>
> yes. And there is written "general" form and "simple" form. I like that.
>
> >I can't say that I think "simple CASE" and "searched CASE" are good
> >descriptions of the two forms, but just switching them doesn't make it
> >much better. And doing so would likely create as much confusion as
> >it eliminates. Can we come up with some other phrases?
>
> IMO it should be the same like in 9.16.1 - a "general" form and a
> "simple" form. Then changing both sections would be ok, because in
> 9.16.1 the simple form is mentioned after the general form.
"simple case" and "searched case" is SQL/PSM's terminology. I'm not
sure it's necessarily a good idea to deviate from that. See SQL part 4,
13.6 <case statement>:
Function
Provide conditional execution based on truth of <search condition>s or on equality of operands.
Format
<case statement> ::=
<simple case statement>
| <searched case statement>
<simple case statement> ::=
CASE <case operand>
<simple case statement when clause>...
[ <case statement else clause> ]
END CASE
<searched case statement> ::=
CASE <searched case statement when clause>...
[ <case statement else clause> ]
END CASE
<simple case statement when clause> ::=
WHEN <when operand list>
THEN <SQL statement list>
<searched case statement when clause> ::=
WHEN <search condition>
THEN <SQL statement list>
<case statement else clause> ::= ELSE <SQL statement list>
--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.
Alvaro Herrera schrieb: > "simple case" and "searched case" is SQL/PSM's terminology. I'm not > sure it's necessarily a good idea to deviate from that. See SQL part 4, > 13.6 <case statement>: > > Function > Provide conditional execution based on truth of <search condition>s or on equality of operands. > > Format > <case statement> ::= > <simple case statement> > | <searched case statement> > <simple case statement> ::= > CASE <case operand> > <simple case statement when clause>... > [ <case statement else clause> ] > END CASE > <searched case statement> ::= > CASE <searched case statement when clause>... > [ <case statement else clause> ] > END CASE > <simple case statement when clause> ::= > WHEN <when operand list> > THEN <SQL statement list> > <searched case statement when clause> ::= > WHEN <search condition> > THEN <SQL statement list> > <case statement else clause> ::= ELSE <SQL statement list> Agreed ... using the standard terminology is better (as Tom also mentioned already). Cheers Andy