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

ASF GitHub Bot commented on PHOENIX-1744:
-----------------------------------------

Github user JamesRTaylor commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/52#discussion_r26907122
  
    --- Diff: 
phoenix-core/src/it/java/org/apache/phoenix/end2end/ToDateFunctionIT.java ---
    @@ -176,4 +177,60 @@ public void 
testToDate_CustomTimeZoneViaQueryServicesAndCustomFormat() throws SQ
                     callToDateFunction(
                             customTimeZoneConn, "TO_DATE('1970-01-01', 
'yyyy-MM-dd')").getTime());
         }
    +    
    +    @Test
    +    public void testTimestampCast() throws SQLException {
    +        Properties props = new Properties();
    +        props.setProperty(QueryServices.DATE_FORMAT_TIMEZONE_ATTRIB, 
"GMT+1");
    +        Connection customTimeZoneConn = 
DriverManager.getConnection(getUrl(), props);
    +
    +        assertEquals(
    +            1426188807198L,
    +                callToDateFunction(
    +                        customTimeZoneConn, "CAST(1426188807198 AS 
TIMESTAMP)").getTime());
    +        
    +
    +        try {
    +            callToDateFunction(
    +                    customTimeZoneConn, "CAST(22005 AS TIMESTAMP)");
    +            fail();
    +        } catch (TypeMismatchException e) {
    +
    +        }
    +    }
    +    
    +    @Test
    +    public void testUnsignedLongToTimestampCast() throws SQLException {
    +        Properties props = new Properties();
    +        props.setProperty(QueryServices.DATE_FORMAT_TIMEZONE_ATTRIB, 
"GMT+1");
    +        Connection conn = DriverManager.getConnection(getUrl(), props);
    +        conn.setAutoCommit(false);
    +        try {
    +            conn.prepareStatement(
    +                "create table TT("
    +                        + "a unsigned_int not null, "
    +                        + "b unsigned_int not null, "
    +                        + "ts unsigned_long not null "
    +                        + "constraint PK primary key (a, b, 
ts))").execute();
    +            conn.commit();
    --- End diff --
    
    FYI, no need for commit after DDL statements.


> CAST from UNSIGNED_LONG (_INT) to * TIMESTAMP is not supported.
> ---------------------------------------------------------------
>
>                 Key: PHOENIX-1744
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-1744
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Serhiy Bilousov
>            Assignee: Dave Hacker
>            Priority: Minor
>              Labels: 4.3.1
>
> Epoch time can be represented as INTEGER (up to the seconds) or LONG (up to 
> the millisecond). Currently CAST from UNSIGNED_LONG to TIMESTAMP not 
> supported by Phoenix. 
> It make sense to have support for conversion from epoch (4 bytes or 8 bytes) 
> to any datetime like format curently supported by Phoenix (TIME, DATE, 
> TIMESTAMP, UNSIGNED_TIME, UNSIGNED_DATE, UNSIGNED_TIMESTAMP).
> HBase shell:
> {noformat}
> create 't','f1'
> put 
> 't',"\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x01L\x0Fz,\x1E",'f1:c1','test'
> {noformat}
> sqlline:
> {noformat}
> CREATE VIEW vT
> (   a UNSIGNED_INT NOT NULL
>    ,b UNSIGNED_INT NOT NULL
>    ,ts UNSIGNED_LONG NOT NULL
> CONSTRAINT pk PRIMARY KEY (a, b, ts))
> AS SELECT * FROM "t"
> DEFAULT_COLUMN_FAMILY ='f1';
>  select a, b, ts, CAST(1426188807198 AS TIMESTAMP) from vt;
> +----+----+----------------+------------------------------+
> | A  | B  |       TS       | TO_TIMESTAMP(1426188807198)  |
> +----+----+----------------+------------------------------+
> | 1  | 1  | 1426188807198  | 2015-03-12 19:33:27.198      |
> +----+----+----------------+------------------------------+
> {noformat}
> but
> {noformat}
> select a, b, ts, CAST(ts AS TIMESTAMP) from vt;
> Error: ERROR 203 (22005): Type mismatch. UNSIGNED_LONG and TIMESTAMP for TS 
> (state=22005,code=203)
> {noformat}
> As per Gabriel Reid
> {quote}
> As a workaround, you can cast the UNSIGNED_LONG to a BIGINT first, and then 
> cast it to a TIMESTAMP, i.e.
>     select a, b, ts, CAST(CAST(ts AS BIGINT) AS TIMESTAMP) from vt;
> {quote}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to