Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-6423

The expression syntax in CASE's THEN clause doesn't accept boolean value expression

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 10.10.2.1, 10.11.1.1
    • Component/s: SQL
    • Labels:
      None
    • Issue & fix info:
      Repro attached

      Description

      This syntax gives an error:

      > VALUES CASE WHEN 1=1 THEN (1=2) OR (3!=4) ELSE true END;
      ERROR 42X01: Syntax error: Encountered "OR" at line 1, column 33.
      

      However, this works:

      > VALUES CASE WHEN 1=1 THEN ((1=2) OR (3!=4)) ELSE true END;
      1    
      -----
      true 
      1 row selected
      

      According to the standard, the syntax after THEN should be <result>:

      <result> ::=
         <result expression>
         | NULL
      
      <result expression> ::=
         <value expression>
      

      which should give us the full value syntax. sqlgrammar.jj uses the corresponding production "thenElseExpression" which allows NULL or aditiveExpression. I believe it should be orExpression.

        Attachments

        1. d6423-1a.diff
          6 kB
          Knut Anders Hatlen

          Issue Links

            Activity

              People

              • Assignee:
                knutanders Knut Anders Hatlen
                Reporter:
                dagw Dag H. Wanvik
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: