[ 
https://issues.apache.org/jira/browse/PHOENIX-5411?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16891932#comment-16891932
 ] 

Toshihiro Suzuki commented on PHOENIX-5411:
-------------------------------------------

It looks like the cause of the issue is that equals() and hashCode() of 
IsNullExpression are not implemented so IsNullExpression#isNegate is not taken 
into account. So "col1 is not null then col2 else 0" statement and "col1 is 
null then col2 else 0" statement are treated as identical. As a result, the 
query returns the same values (2, 2) for both the statements.

In the patch I attached, I added equals() and hashCode() to IsNullExpression. 
And then the query returns the correct result.

Could you please review the patch? [~elserj] [[email protected]]



> Incorrect result is returned when using sum function with case when statement
> -----------------------------------------------------------------------------
>
>                 Key: PHOENIX-5411
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-5411
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Toshihiro Suzuki
>            Assignee: Toshihiro Suzuki
>            Priority: Major
>         Attachments: PHOENIX-5411.master.v1.patch
>
>
> In the following case, incorrect result is returned:
> {code}
> 0: jdbc:phoenix:> create table tbl (id varchar primary key, col1 varchar, 
> col2 integer);
> No rows affected (0.86 seconds)
> 0: jdbc:phoenix:> upsert into tbl values('id1', 'aaa', 2);
> 1 row affected (0.078 seconds)
> 0: jdbc:phoenix:> upsert into tbl values('id2', null, 1);
> 1 row affected (0.008 seconds)
> 0: jdbc:phoenix:> select sum(case when col1 is not null then col2 else 0 
> end), sum(case when col1 is null then col2 else 0 end) from tbl;
> +-------------------------------------------------------+-------------------------------------------------------+
> | SUM(CASE WHEN COL1 IS NOT NULL THEN COL2 ELSE 0 END)  | SUM(CASE WHEN COL1 
> IS NOT NULL THEN COL2 ELSE 0 END)  |
> +-------------------------------------------------------+-------------------------------------------------------+
> | 2                                                     | 2                   
>                                   |
> +-------------------------------------------------------+-------------------------------------------------------+
> 1 row selected (0.03 seconds)
> {code}
> The correct result is (2, 1), but (2, 2) is returned.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to