You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "shining (JIRA)" <ji...@apache.org> on 2018/12/17 03:38:00 UTC

[jira] [Created] (CALCITE-2743) TimeStamp confused in avatica jdbc

shining created CALCITE-2743:
--------------------------------

             Summary: TimeStamp confused in avatica jdbc
                 Key: CALCITE-2743
                 URL: https://issues.apache.org/jira/browse/CALCITE-2743
             Project: Calcite
          Issue Type: Bug
          Components: avatica
    Affects Versions: 1.10.0
            Reporter: shining


I use Phoenix Query Server through avatica, Operation is as follows:

1. create table with sqlline-thin
   
    CREATE TABLE test_timezone(log_time TIMESTAMP NOT NULL PRIMARY KEY, id VARCHAR(40));

2. Upset data
    
     upsert into test_timezone values('2018-11-27 11:01:59.000','1’);

3. Query
     0: jdbc:phoenix:thin:url=http://localhost:876> select * from test_timezone;
    +------------------------------+-----+
     |       LOG_TIME           | ID   |
    +-----------------------------+------+
     | 2018-11-27 03:01:59  | 1     |
    +------------------------------+——+

My local timeZone is GMT+8, and configured Phoenix “phoenix.query.dateFormatTimeZone=GMT+8”

I also view code of avatica, when the timezone is GMT+8, getTimeStamp method will lose 8 hours:
 public Timestamp getTimestamp(Calendar calendar) throws SQLException {
  java.util.Date date  = (java.util.Date) getObject();
  if (date == null) {
    return null;
  }
  long v = date.getTime();
  if (calendar != null) {
    v -= calendar.getTimeZone().getOffset(v);
  }
  return new Timestamp(v);
}
sqlline-thin use getString() method get the timestamp,it pass a null timezone to timestampAsString() 

So I have two doubtful places here:

1)I get correct time from phoenixResultSet, why reduce 8 hours ?
2)Can getString method  be returned by getTimeStamp().toString():
      public String getString() throws SQLException {
  final long v = getLong();
  if (v == 0 && wasNull()) {
    return null;
  }
  return getTimeStamp(v, null).toString();
}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)