sunbufu commented on issue #2604: The query entity throws an exception when a 
boolean property exists in the entity
URL: 
https://github.com/apache/incubator-shardingsphere/issues/2604#issuecomment-508970554
 
 
   In my opinion, the purpose of `JDBC` is resolve different databases's 
compatibility. so `ResultSet` defined some method like `getBytes()`, 
`getBoolean()` and etc to help us get object with **expected java type**. 
   `ShardingSphere` work on dataSource, and defined `ResultSet` too, like 
`ShardingResultSet` and `EncryptResultSet`. but `ShardingSphere` use **database 
column type** in place of **expected java type**. 
   There are some codes in `StreamQueryResult`, we can see `getValue()` **do 
nothing** with `final Class<?> type`.
   ```java
   @Override
   public Object getValue(final int columnIndex, final Class<?> type) throws 
SQLException {
       return decrypt(columnIndex, QueryResultUtil.getValue(resultSet, 
columnIndex));
   }
   ```
   And in `QueryResultUtil`, `getValueByColumnType()` get **database column 
type** from `resultSet. metaData` and use it for `getXXX()` selection.
   ```java
   public static Object getValueByColumnType(final ResultSet resultSet, final 
int columnIndex) throws SQLException {
           ResultSetMetaData metaData = resultSet.getMetaData();
           switch (metaData.getColumnType(columnIndex)) {
               case Types.BIT:
                   return resultSet.getBytes(columnIndex);
               case Types.BOOLEAN:
                   return resultSet.getBoolean(columnIndex);
               case Types.TINYINT:
                   return resultSet.getByte(columnIndex);
               ...
           }
       }
   ```
   Usually it's okay, but when we use mysql and call some special methods such 
as `getBoolean()`, our **expected java type** is boolean,  **database column 
type** is not boolean. 
   so I think we should pass on the **expected java type**, and use it for 
`getXXX()` selection.
   Can I send a PR ?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to