Tanuj Khurana created PHOENIX-6807:
--------------------------------------

             Summary: Change return type of PHOENIX_ROW_TIMESTAMP() function 
from DATE -> TIMESTAMP
                 Key: PHOENIX-6807
                 URL: https://issues.apache.org/jira/browse/PHOENIX-6807
             Project: Phoenix
          Issue Type: Improvement
    Affects Versions: 5.1.2, 5.2.0
            Reporter: Tanuj Khurana
            Assignee: Tanuj Khurana


Today, PHOENIX_ROW_TIMESTAMP() function returns a DATE data type. This causes 
multiple issues:
{code:java}
// 0: jdbc:phoenix:localhost> create table T (id varchar primary key, ts 
timestamp);
No rows affected (0.703 seconds)
0: jdbc:phoenix:localhost> upsert into T values('a', TO_TIMESTAMP('2005-10-01 
14:03:22.559'));
1 row affected (0.05 seconds)
0: jdbc:phoenix:localhost> upsert into T values('b', TO_TIMESTAMP('2015-09-01 
23:03:22.559'));
1 row affected (0.005 seconds)
0: jdbc:phoenix:localhost> upsert into T values('c', TO_TIMESTAMP('2022-09-01 
03:03:24.897'));
1 row affected (0.008 seconds)
0: jdbc:phoenix:localhost> !outputformat csv
0: jdbc:phoenix:localhost> select ts, PHOENIX_ROW_TIMESTAMP() from T;
'TS','PHOENIX_ROW_TIMESTAMP(0.)'
'2005-10-01 07:03:22.559','2022-10-07'
'2015-09-01 16:03:22.559','2022-10-07'
'2022-08-31 20:03:24.897','2022-10-07'
3 rows selected (0.012 seconds) {code}
Notice, how the time component is dropped when we use sqlline to print 
PHOENIX_ROW_TIMESTAMP() values.  In comparison, the timestamp column is 
displayed correctly. This is a major drawback IMO since one of the primary 
motivation of implementing the PHOENIX_ROW_TIMESTAMP() function was to aid in 
debugging.

There is another issue with returning DATE type. Consider the query below:
{code:java}
SELECT * from T where PHOENIX_ROW_TIMESTAMP() = <Timestamp value>{code}
This query always returns 0 rows. This is because the timestamp value which is 
12 bytes can't be coerced to a DATE type so the where compiler compiles the 
equality expression to an always *FALSE* expression.

I propose changing the return type of PHOENIX_ROW_TIMESTAMP() to TIMESTAMP. It 
solves both the issues listed above and makes sense since PHOENIX_ROW_TIMESTAMP 
has timestamp in it :)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to