[ 
https://issues.apache.org/jira/browse/PHOENIX-86?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Taylor updated PHOENIX-86:
--------------------------------

    Attachment: coalesce.diff

Here's a hastily prepared patch (for master). I'll run the full unit tests and 
check it in soon.

In the meantime, you should have better luck with the CASE statement using CASE 
WHEN foo IS NULL THEN <second arg of coalesce> ELSE <first arg of coalesce> END

> Coalesce does not work in a where clause with null values.
> ----------------------------------------------------------
>
>                 Key: PHOENIX-86
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-86
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 2.2.3
>            Reporter: James Violette
>         Attachments: coalesce.diff
>
>
> Coalesce works as a select expression with null values, but does not work in 
> a where clause with null values. (v2.2.3)
> Workaround is to add a value to all null columns, at increased cost in space.
> create TABLE IF NOT EXISTS MY_SCHEMA.MY_TABLE
>  (NAME varchar not null,
>   D.CAT VARCHAR,
>   S.ACTIVE INTEGER,
>   S.LSTATUS VARCHAR,
>   S.LTIME TIME,
>   S.EXPTIME TIME 
>  CONSTRAINT pk PRIMARY KEY (NAME));   
> items.csv
> NAME,CAT,ACTIVE,LSTATUS
> ITEM1,NOTSET,1,NEVER
> ITEM2,NOTSET,1,NEVER
> ITEM3,NOTSET,1,NEVER
> ITEM4,NOTSET,1,NEVER
> ITEM5,NOTSET,1,NEVER
> ./psql.sh -t MY_SCHEMA.MY_TABLE -h in-line zookeeper items.csv 
> -- at this point, all items have null exptime.
> UPSERT INTO MY_SCHEMA.MY_TABLE(NAME,LSTATUS,LTIME,EXPTIME) 
> VALUES('ITEM1','NEVER',CURRENT_DATE(),CURRENT_DATE()+5);
> UPSERT INTO MY_SCHEMA.MY_TABLE(NAME,LSTATUS,LTIME,EXPTIME) 
> VALUES('ITEM2','NEVER',CURRENT_DATE(),CURRENT_DATE()+10);
> UPSERT INTO MY_SCHEMA.MY_TABLE(NAME,LSTATUS,LTIME,EXPTIME) 
> VALUES('ITEM3','NEVER',CURRENT_DATE(),CURRENT_DATE()-10);
> -- at this point, item1,item2,item3 have non-null exptime, and item4,item5 
> have null exptime
> SELECT NAME,CAT,LSTATUS,ACTIVE, EXPTIME, COALESCE(EXPTIME, 
> TO_DATE('2000-01-01 00:00:00')) as cexptime, current_date() as cdate
> ,COALESCE(EXPTIME, TO_DATE('2000-01-01 00:00:00'))-current_date() as DIFF  
> FROM COLLECT_PLACE.FS_CHAIN_NAMES ;
> Should show item1...item5
> Actually shows item1...item5
> NAME  CAT     LSTATUS ACTIVE  EXPTIME CEXPTIME        CDATE   DIFF
> item1 NOTSET  RESERVED        1       17:38:35        17:38:35        
> 2014-02-27      9
> item2 NOTSET  RESERVED        1       16:38:03        16:38:03        
> 2014-02-27      4
> item3 NOTSET  NEVER   1       16:48:14        16:48:14        2014-02-27      
> -10
> item4 NOTSET  NEVER   1       (null)  16:00:00        2014-02-27      -5172
> item5 NOTSET  NEVER   1       (null)  16:00:00        2014-02-27      -5172
>  
> SELECT NAME,CAT,LSTATUS,ACTIVE, EXPTIME, COALESCE(EXPTIME, 
> TO_DATE('2000-01-01 00:00:00')) as cexptime, current_date() as cdate
> ,COALESCE(EXPTIME, TO_DATE('2000-01-01 00:00:00'))-current_date() as DIFF  
> FROM COLLECT_PLACE.FS_CHAIN_NAMES 
> WHERE (current_date()>COALESCE(EXPTIME, TO_DATE('2000-01-01 00:00:00')));
> Should show item3,item4,item5
> Actually shows item3, missing item4,item5
> NAME  CAT     LSTATUS ACTIVE  EXPTIME CEXPTIME        CDATE   DIFF
> item3 NOTSET  NEVER   1       16:48:14        16:48:14        2014-02-27      
> -10
> SELECT NAME,CAT,LSTATUS,ACTIVE, EXPTIME, COALESCE(EXPTIME, 
> TO_DATE('2000-01-01 00:00:00')) as cexptime, current_date() as cdate
> ,COALESCE(EXPTIME, TO_DATE('2000-01-01 00:00:00'))-current_date() as DIFF  
> FROM COLLECT_PLACE.FS_CHAIN_NAMES 
> WHERE (current_date()<COALESCE(EXPTIME, TO_DATE('2000-01-01 00:00:00')));
> Should show item1,item2
> Actually shows item1,item2
> NAME  CAT     LSTATUS ACTIVE  EXPTIME CEXPTIME        CDATE   DIFF
> item1 NOTSET  RESERVED        1       17:38:35        17:38:35        
> 2014-02-27      9
> item2 NOTSET  RESERVED        1       16:38:03        16:38:03        
> 2014-02-27      4



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to