[ https://issues.apache.org/jira/browse/CALCITE-5094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
itxiangkui updated CALCITE-5094: -------------------------------- Description: When I have a mysql table, the example is as follows: ||*aid:long*||*gettime:datetime*||*xip*|| |1|2021-08-11 14:38:01.0|3729727635| it will be OK: {{select gettime from table}} it will occor some error: {code:java} select substring_index(cast(gettime as varchar),'.',1) from table {code} {code:java} Caused by: com.mysql.cj.exceptions.NumberOutOfRange: Value '3729727635' is outside of valid range for type java.lang.Integer at com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:62) at com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:44) at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeUInt4(MysqlTextValueDecoder.java:99) at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:105) at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) at com.mysql.cj.protocol.a.result.TextBufferRow.getValue(TextBufferRow.java:132) at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1285) ... 34 more {code} It seems that *org.apache.calcite.linq4j.tree.Primitive.jdbcGet* {code:java} // code placeholder public @Nullable Object jdbcGet(ResultSet resultSet, int i) throws SQLException { switch (this) { case BOOLEAN: return resultSet.getBoolean(i); case BYTE: return resultSet.getByte(i); case CHAR: return (char) resultSet.getShort(i); case DOUBLE: return resultSet.getDouble(i); case FLOAT: return resultSet.getFloat(i); case INT: return resultSet.getInt(i); case LONG: return resultSet.getLong(i); case SHORT: return resultSet.getShort(i); default: return resultSet.getObject(i); } } {code} resultSet.getObject(i) Triggered errors like Integer.parse(Long) was: When I have a mysql table, the example is as follows: ||*aid:long*||*gettime:datetime*||*pv*|| |1|2021-08-11 14:38:01.0|1| it will be OK: {{select gettime from table}} it will occor some error: {code:java} select substring_index(cast(gettime as varchar),'.',1) from table {code} {code:java} Caused by: com.mysql.cj.exceptions.NumberOutOfRange: Value '3729727635' is outside of valid range for type java.lang.Integer at com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:62) at com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:44) at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeUInt4(MysqlTextValueDecoder.java:99) at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:105) at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) at com.mysql.cj.protocol.a.result.TextBufferRow.getValue(TextBufferRow.java:132) at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1285) ... 34 more {code} It seems that *org.apache.calcite.linq4j.tree.Primitive.jdbcGet* {code:java} // code placeholder public @Nullable Object jdbcGet(ResultSet resultSet, int i) throws SQLException { switch (this) { case BOOLEAN: return resultSet.getBoolean(i); case BYTE: return resultSet.getByte(i); case CHAR: return (char) resultSet.getShort(i); case DOUBLE: return resultSet.getDouble(i); case FLOAT: return resultSet.getFloat(i); case INT: return resultSet.getInt(i); case LONG: return resultSet.getLong(i); case SHORT: return resultSet.getShort(i); default: return resultSet.getObject(i); } } {code} resultSet.getObject(i) Triggered errors like Integer.parse(Long) > JdbcAdapter will "NumberOutOfRange" when iterating over the datetime column > of mysql with function application > -------------------------------------------------------------------------------------------------------------- > > Key: CALCITE-5094 > URL: https://issues.apache.org/jira/browse/CALCITE-5094 > Project: Calcite > Issue Type: Bug > Components: core, jdbc-adapter > Affects Versions: 1.30.0 > Reporter: itxiangkui > Priority: Major > Labels: JDBC, adapters > > > When I have a mysql table, the example is as follows: > ||*aid:long*||*gettime:datetime*||*xip*|| > |1|2021-08-11 14:38:01.0|3729727635| > > it will be OK: > {{select gettime from table}} > > it will occor some error: > {code:java} > select substring_index(cast(gettime as varchar),'.',1) from table {code} > {code:java} > Caused by: com.mysql.cj.exceptions.NumberOutOfRange: Value '3729727635' is > outside of valid range for type java.lang.Integer at > com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:62) > at > com.mysql.cj.result.IntegerValueFactory.createFromLong(IntegerValueFactory.java:44) > at > com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeUInt4(MysqlTextValueDecoder.java:99) > at > com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:105) > at > com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241) > at > com.mysql.cj.protocol.a.result.TextBufferRow.getValue(TextBufferRow.java:132) > at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1285) > ... 34 more {code} > > It seems that *org.apache.calcite.linq4j.tree.Primitive.jdbcGet* > {code:java} > // code placeholder > public @Nullable Object jdbcGet(ResultSet resultSet, int i) throws > SQLException { > switch (this) { > case BOOLEAN: > return resultSet.getBoolean(i); > case BYTE: > return resultSet.getByte(i); > case CHAR: > return (char) resultSet.getShort(i); > case DOUBLE: > return resultSet.getDouble(i); > case FLOAT: > return resultSet.getFloat(i); > case INT: > return resultSet.getInt(i); > case LONG: > return resultSet.getLong(i); > case SHORT: > return resultSet.getShort(i); > default: > return resultSet.getObject(i); > } > } {code} > > resultSet.getObject(i) Triggered errors like Integer.parse(Long) -- This message was sent by Atlassian Jira (v8.20.1#820001)