[
https://issues.apache.org/jira/browse/CALCITE-1198?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Francis Chuang updated CALCITE-1198:
------------------------------------
Description:
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.
was:
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.
> 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)