[ 
https://issues.apache.org/jira/browse/HIVE-11176?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14628481#comment-14628481
 ] 

Soundararajan Velu commented on HIVE-11176:
-------------------------------------------

Unreachable code: 
hive/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java
// With Data
@Override
@SuppressWarnings("unchecked")
public Object getStructFieldData(Object data, StructField fieldRef) {
if (data == null)
{ return null; }
// We support both List<Object> and Object[]
// so we have to do differently.
boolean isArray = ! (data instanceof List);
if (!isArray && !(data instanceof List)) { return data; }

*************************
The if condition above translates to 
if(!true && true) the code section cannot be reached,


> aused by: java.lang.ClassCastException: 
> org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryStruct cannot be cast to 
> [Ljava.lang.Object;
> ---------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-11176
>                 URL: https://issues.apache.org/jira/browse/HIVE-11176
>             Project: Hive
>          Issue Type: Bug
>          Components: Hive, Tez
>    Affects Versions: 1.0.0, 1.2.0
>         Environment: Hive 1.2 and TEz 0.7
>            Reporter: Soundararajan Velu
>            Priority: Critical
>
> Unreachable code: 
> hive/serde/src/java/org/apache/hadoop/hive/serde2/objectinspector/StandardStructObjectInspector.java
> // With Data
>   @Override
>   @SuppressWarnings("unchecked")
>   public Object getStructFieldData(Object data, StructField fieldRef) {
>     if (data == null) {
>       return null;
>     }
>     // We support both List<Object> and Object[]
>     // so we have to do differently.
>     boolean isArray = ! (data instanceof List);
>     if (!isArray && !(data instanceof List)) {
>       return data;
>     }
> *************************
> The if condition above translates to 
> if(!true && true) the code section cannot be reached,
> this causes a lot of class cast exceptions while using Tez or ORC file 
> formats or custom jsonsede, Strangely this happens only while using Tez. 
> Changed the code to 
>  boolean isArray = data.getClass().isArray();
>     if (!isArray && !(data instanceof List)) {
>       return data;
>     }
> Even then, lazystructs get passed as fields causing downstream cast 
> exceptions like lazystruct cannot be cast to Text etc...
> So I changed the method to something like this,
>  // With Data
>   @Override
>   @SuppressWarnings("unchecked")
>   public Object getStructFieldData(Object data, StructField fieldRef) {
>     if (data == null) {
>       return null;
>     }
>         if (data instanceof LazyBinaryStruct) {
>                 data = ((LazyBinaryStruct) data).getFieldsAsList();
>         }
>     // We support both List<Object> and Object[]
>     // so we have to do differently.
>     boolean isArray = data.getClass().isArray();
>     if (!isArray && !(data instanceof List)) {
>       return data;
>     }
> This is causing arrayindexout of bounds exception and other typecast 
> exceptions in object inspectors,
> Please help,



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to