[ 
https://issues.apache.org/jira/browse/CALCITE-5094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mihai Budiu resolved CALCITE-5094.
----------------------------------
    Fix Version/s: 1.41.0
       Resolution: Fixed

Fixed in 
[https://github.com/apache/calcite-avatica/commit/9e6f95442d72c73e1118a1cbdc4d3325eff0f487]

Thank you for the fix [~duanzhengqiang] 

Thank you for the review [~zhehu] 

> Calcite JDBC Adapter and Avatica should support MySQL UNSIGNED types of 
> TINYINT, SMALLINT, INT, BIGINT
> ------------------------------------------------------------------------------------------------------
>
>                 Key: CALCITE-5094
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5094
>             Project: Calcite
>          Issue Type: Improvement
>          Components: avatica, core, jdbc-adapter
>    Affects Versions: 1.30.0
>            Reporter: itxiangkui
>            Assignee: Zhengqiang Duan
>            Priority: Major
>              Labels: JDBC, adapters, pull-request-available
>             Fix For: 1.41.0
>
>
>  
> When I have a mysql table, the example is as follows:
> ||*aid:long*||*gettime:datetime*||*xip: int(10) unsigned*||
> |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.10#820010)

Reply via email to