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

Francis Chuang commented on CALCITE-1198:
-----------------------------------------

Ah, I see! That makes sense.

How do I unserialize the date and time?

If I have time and date inserted as '2016-04-13 02:13:15', '2016-04-13 
02:13:15'.

They are coming back (via avatica) as 2 ints: 7995000, 16904

> Wrong rep type returned for date, time and timestamps in column metadata
> ------------------------------------------------------------------------
>
>                 Key: CALCITE-1198
>                 URL: https://issues.apache.org/jira/browse/CALCITE-1198
>             Project: Calcite
>          Issue Type: Bug
>          Components: avatica
>    Affects Versions: avatica-1.7.1
>         Environment: Phoenix 4.7.0
>            Reporter: Francis Chuang
>
> To reproduce the problem:
> 1. Create a table containing date, time and timestamp columns using 
> SquirrelSQL or similiar:
> {code}
> CREATE TABLE test (id INTEGER PRIMARY KEY, tm TIME,dt DATE,tmstmp TIMESTAMP) 
> TRANSACTIONAL=false
> {code}
> 2. Use curl to query the phoenix query server/avatica:
> {code}
> curl localhost:8765 -XPOST --data '{"request": 
> "openConnection","connectionId": "my-conn"}'
> curl localhost:8765 -XPOST --data '{"request": "prepare","connectionId": 
> "my-conn","sql": "SELECT * FROM test","maxRowCount": 1}'
> {code}
> This is the result of the prepare request:
> {code}
> {
>    "response": "prepare",
>    "statement": {
>       "connectionId": "my-conn",
>       "id": 27,
>       "signature": {
>          "columns": [
>             {
>                "ordinal": 0,
>                "autoIncrement": false,
>                "caseSensitive": false,
>                "searchable": true,
>                "currency": false,
>                "nullable": 0,
>                "signed": true,
>                "displaySize": 40,
>                "label": "ID",
>                "columnName": "ID",
>                "schemaName": "",
>                "precision": 0,
>                "scale": 0,
>                "tableName": "TEST",
>                "catalogName": "",
>                "type": {
>                   "type": "scalar",
>                   "id": 4,
>                   "name": "INTEGER",
>                   "rep": "PRIMITIVE_INT"
>                },
>                "readOnly": true,
>                "writable": false,
>                "definitelyWritable": false,
>                "columnClassName": "java.lang.Integer"
>             },
>             {
>                "ordinal": 1,
>                "autoIncrement": false,
>                "caseSensitive": false,
>                "searchable": true,
>                "currency": false,
>                "nullable": 1,
>                "signed": false,
>                "displaySize": 23,
>                "label": "TM",
>                "columnName": "TM",
>                "schemaName": "",
>                "precision": 0,
>                "scale": 0,
>                "tableName": "TEST",
>                "catalogName": "",
>                "type": {
>                   "type": "scalar",
>                   "id": 92,
>                   "name": "TIME",
>                   "rep": "PRIMITIVE_INT"
>                },
>                "readOnly": true,
>                "writable": false,
>                "definitelyWritable": false,
>                "columnClassName": "java.sql.Time"
>             },
>             {
>                "ordinal": 2,
>                "autoIncrement": false,
>                "caseSensitive": false,
>                "searchable": true,
>                "currency": false,
>                "nullable": 1,
>                "signed": false,
>                "displaySize": 23,
>                "label": "DT",
>                "columnName": "DT",
>                "schemaName": "",
>                "precision": 0,
>                "scale": 0,
>                "tableName": "TEST",
>                "catalogName": "",
>                "type": {
>                   "type": "scalar",
>                   "id": 91,
>                   "name": "DATE",
>                   "rep": "PRIMITIVE_INT"
>                },
>                "readOnly": true,
>                "writable": false,
>                "definitelyWritable": false,
>                "columnClassName": "java.sql.Date"
>             },
>             {
>                "ordinal": 3,
>                "autoIncrement": false,
>                "caseSensitive": false,
>                "searchable": true,
>                "currency": false,
>                "nullable": 1,
>                "signed": false,
>                "displaySize": 40,
>                "label": "TMSTMP",
>                "columnName": "TMSTMP",
>                "schemaName": "",
>                "precision": 0,
>                "scale": 0,
>                "tableName": "TEST",
>                "catalogName": "",
>                "type": {
>                   "type": "scalar",
>                   "id": 93,
>                   "name": "TIMESTAMP",
>                   "rep": "PRIMITIVE_LONG"
>                },
>                "readOnly": true,
>                "writable": false,
>                "definitelyWritable": false,
>                "columnClassName": "java.sql.Timestamp"
>             }
>          ],
>          "sql": "SELECT * FROM test",
>          "parameters": [],
>          "cursorFactory": {
>             "style": "LIST",
>             "clazz": null,
>             "fieldNames": null
>          },
>          "statementType": null
>       }
>    },
>    "rpcMetadata": {
>       "response": "rpcMetadata",
>       "serverAddress": "f826338-phoenix-server.f826338:8765"
>    }
> }
> {code}
> In the results, {{time}} and {{date}} has a rep of {{PRIMITIVE_INT}} and 
> {{timestamp}} has a rep type of {{PRIMITIVE_LONG}}. I believe they should 
> have rep types of  {{JAVA_SQL_TIME}}, {{JAVA_SQL_DATE}} and 
> {{JAVA_SQL_TIMESTAMP}} respectively. 
> A work around is to use the {{name}} property which contains the correct JDBC 
> name and check to see if it is one of {{TIME}}, {{DATE}} or {{TIMESTAMP}} and 
> manually set the correct rep type to decode.



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

Reply via email to