[ 
http://issues.apache.org/jira/browse/DERBY-1575?page=comments#action_12431350 ] 
            
Christian d'Heureuse commented on DERBY-1575:
---------------------------------------------

The patch contains the following lines that are not correct:

   <codeblock><b>CASE
     WHEN <i>booleanExpression</i>
     [ WHEN <i>booleanExpression</i> ]...
     THEN <i>thenExpression</i>
     ELSE <i>elseExpression</i>
   END</b></codeblock>

I suggest to change that to:

   <codeblock><b>CASE
     WHEN <i>booleanExpression</i> THEN <i>thenExpression</i>
     [ WHEN <i>booleanExpression</i>  THEN <i>thenExpression</i> ]...
     ELSE <i>elseExpression</i>
   END</b></codeblock>

In the SQL Standard ANSI/ISO/IEC 9075-2-1999, the ELSE clause is optional. So 
in order to be in conformance with the SQL standard, the syntax should be:

   <codeblock><b>CASE
     WHEN <i>booleanExpression</i> THEN <i>thenExpression</i>
     [ WHEN <i>booleanExpression</i>  THEN <i>thenExpression</i> ]...
     [ ELSE <i>elseExpression</i> ]
   END</b></codeblock>

But with Derby, omitting the ELSE clause seems to work only if the value type 
is Character.
Examples:

 VALUES
      CASE
         WHEN 1 = 1 THEN 'a'
      END
==> OK, returns 'a'

 VALUES
      CASE
         WHEN 1 = 1 THEN 2
      END
==> Error: Types 'INTEGER' and 'CHAR' are not type compatible.

I assume that this effect is because Derby uses cast(null as char) as the 
default value for elseExpression. Maybe this could be changed by using an 
untyped Null value as the default value for elseExpression?

> document full syntax of CASE expression
> ---------------------------------------
>
>                 Key: DERBY-1575
>                 URL: http://issues.apache.org/jira/browse/DERBY-1575
>             Project: Derby
>          Issue Type: Improvement
>          Components: Documentation
>            Reporter: Christian d'Heureuse
>         Assigned To: Kim Haase
>         Attachments: DERBY-1575.diff
>
>
> The documentation at 
> http://db.apache.org/derby/docs/dev/ref/rrefcasenullif.html describes the 
> CASE expression syntax as:
>    CASE WHEN BooleanExpression THEN thenExpression ELSE elseExpression END
> But the CASE expression supports more than one WHEN/THEN clauses.
> I suggest to change the syntax description to:
>    CASE
>       WHEN BooleanExpression THEN Expression
>     [ WHEN BooleanExpression THEN Expression ]
>       ...
>       ELSE elseExpression
>    END
> Example:
>    VALUES
>       CASE
>          WHEN 1 = 2 THEN 3
>          WHEN 4 = 5 THEN 6
>          ELSE 7
>       END

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to