[
https://issues.apache.org/jira/browse/CALCITE-5094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
itxiangkui updated CALCITE-5094:
--------------------------------
Affects Version/s: 1.30.0
> JdbcAdapter will report an error 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
> 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*||*pv*||
> |1|2021-08-11 14:38:01.0|1|
>
> it will be OK:
> {{select gettime from table}}
>
> it will occor some error:
> {{select substring_index(cast(gettime as varchar),'.',1) from table}}
>
> 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
>
> It seems that *org.apache.calcite.linq4j.tree.Primitive.jdbcGet*
> 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); }
> }
>
> resultSet.getObject(i) Triggered errors like Integer.parse(Long)
--
This message was sent by Atlassian Jira
(v8.20.1#820001)