You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Mark Struberg (Jira)" <ji...@apache.org> on 2021/04/06 14:52:00 UTC

[jira] [Created] (OPENJPA-2861) select sum(CASE x WHEN x THEN 1 ELSE 0 ) returns String instead of Long.

Mark Struberg created OPENJPA-2861:
--------------------------------------

             Summary: select sum(CASE x WHEN x THEN 1 ELSE 0 ) returns String instead of Long.
                 Key: OPENJPA-2861
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2861
             Project: OpenJPA
          Issue Type: Bug
          Components: kernel
    Affects Versions: 3.1.2
            Reporter: Mark Struberg
            Assignee: Mark Struberg
             Fix For: 3.1.3


It seems that a few operations in {{JDBCExpressionFactory}} often calls {{getLiteralRawString}} which destroys the information about any real types in a query and replaces it with a {{Raw}} which is always of type {{java.lang.String}}.

This breaks the following query, which wrongly returns a string instead of a Long:
{noformat}
final TypedQuery<Long> q 
   = em.createQuery("select SUM(CASE ae.stringVal WHEN 'bare' THEN 1 ELSE 0 END) from AggEntity AS ae", Long.class);
final Long sumC = q.getSingleResult();{noformat}

This only affects us since I fixed {{UnaryOp}} to not return the native JDBC vendor type of a given column but uses the {{val.getType()}}




--
This message was sent by Atlassian Jira
(v8.3.4#803005)