[ 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)