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

ASF GitHub Bot commented on DRILL-4783:
---------------------------------------

Github user chunhui-shi commented on a diff in the pull request:

    https://github.com/apache/drill/pull/546#discussion_r71471032
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/flatten/FlattenRecordBatch.java
 ---
    @@ -129,8 +129,14 @@ private void setFlattenVector() {
         try {
           final TypedFieldId typedFieldId = 
incoming.getValueVectorId(popConfig.getColumn());
           final MaterializedField field = 
incoming.getSchema().getColumn(typedFieldId.getFieldIds()[0]);
    -      final RepeatedValueVector vector = 
RepeatedValueVector.class.cast(incoming.getValueAccessorById(
    -          field.getValueClass(), 
typedFieldId.getFieldIds()).getValueVector());
    +      RepeatedValueVector vector = null;
    +      try {
    +        vector = 
RepeatedValueVector.class.cast(incoming.getValueAccessorById(
    +            field.getValueClass(), 
typedFieldId.getFieldIds()).getValueVector());
    +      } catch(ClassCastException ex) {
    +        //if cast fail
    --- End diff --
    
    Thanks Jinfeng for the review. The fix will return empty result if it is 
flatten(100).
    
    Since this fix is to address the issue when there is no incoming record, 
flatten above convert_from should not throw exception. Meanwhile it is better 
to keep other behavior unchanged unless we have strong reason to change it. 
Based on this understanding, I am updating the change to still throw the same 
cast exception if flatten is not getting a RepeatedValueVector to work on.


> Flatten on CONVERT_FROM fails with ClassCastException if resultset is empty
> ---------------------------------------------------------------------------
>
>                 Key: DRILL-4783
>                 URL: https://issues.apache.org/jira/browse/DRILL-4783
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Chunhui Shi
>            Assignee: Chunhui Shi
>            Priority: Critical
>
> Flatten failed to work on top of convert_from when the resultset is empty. 
> For a HBase table like this:
> 0: jdbc:drill:zk=localhost:5181> select convert_from(t.address.cities,'json') 
> from hbase.`/tmp/flattentest` t;
> +----------------------------------------------------------------------------------+
> |                                      EXPR$0                                 
>      |
> +----------------------------------------------------------------------------------+
> | {"list":[{"city":"SunnyVale"},{"city":"Palo Alto"},{"city":"Mountain 
> View"}]}    |
> | {"list":[{"city":"Seattle"},{"city":"Bellevue"},{"city":"Renton"}]}         
>      |
> | {"list":[{"city":"Minneapolis"},{"city":"Falcon Heights"},{"city":"San 
> Paul"}]}  |
> +----------------------------------------------------------------------------------+
> Flatten works when row_key is in (1,2,3)
> 0: jdbc:drill:zk=localhost:5181> select flatten(t1.json.list) from (select 
> convert_from(t.address.cities,'json') json from hbase.`/tmp/flattentest` t 
> where row_key=1) t1;
> +---------------------------+
> |          EXPR$0           |
> +---------------------------+
> | {"city":"SunnyVale"}      |
> | {"city":"Palo Alto"}      |
> | {"city":"Mountain View"}  |
> +---------------------------+
> But Flatten throws exception if the resultset is empty
> 0: jdbc:drill:zk=localhost:5181> select flatten(t1.json.list) from (select 
> convert_from(t.address.cities,'json') json from hbase.`/tmp/flattentest` t 
> where row_key=4) t1;
> Error: SYSTEM ERROR: ClassCastException: Cannot cast 
> org.apache.drill.exec.vector.NullableIntVector to 
> org.apache.drill.exec.vector.complex.RepeatedValueVector
> Fragment 0:0
> [Error Id: 07fd0cab-d1e6-4259-bfec-ad80f02d93a2 on atsqa4-127.qa.lab:31010] 
> (state=,code=0)



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

Reply via email to