drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-4868) Hive functions should update writerIndex accordingly when return binary type
Date Mon, 19 Dec 2016 22:26:58 GMT

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

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

Github user bitblender commented on a diff in the pull request:

    https://github.com/apache/drill/pull/695#discussion_r93133495
  
    --- Diff: contrib/storage-hive/core/src/main/codegen/templates/ObjectInspectorHelper.java
---
    @@ -172,48 +172,35 @@ public static JBlock getDrillObject(JCodeModel m, ObjectInspector
oi,
                 booleanJC._then().assign(returnValueHolder.ref("value"), JExpr.lit(1));
                 booleanJC._else().assign(returnValueHolder.ref("value"), JExpr.lit(0));
     
    -          <#elseif entry.hiveType == "VARCHAR">
    -            JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    -              castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
    +          <#elseif entry.hiveType == "VARCHAR" || entry.hiveType == "CHAR" || entry.hiveType
== "STRING" || entry.hiveType == "BINARY">
    +            <#if entry.hiveType == "VARCHAR">
    +              JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    +                  castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
                           .invoke("getValue")
                           .invoke("getBytes"));
    -
    -            jc._else().add(returnValueHolder.ref("buffer")
    -              .invoke("setBytes").arg(JExpr.lit(0)).arg(data));
    -
    -
    -            jc._else().assign(returnValueHolder.ref("start"), JExpr.lit(0));
    -            jc._else().assign(returnValueHolder.ref("end"), data.ref("length"));
    -
                 <#elseif entry.hiveType == "CHAR">
                     JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    -                castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
    -                    .invoke("getStrippedValue")
    -                    .invoke("getBytes"));
    -
    -            jc._else().add(returnValueHolder.ref("buffer")
    -                .invoke("setBytes").arg(JExpr.lit(0)).arg(data));
    -
    -
    -            jc._else().assign(returnValueHolder.ref("start"), JExpr.lit(0));
    -            jc._else().assign(returnValueHolder.ref("end"), data.ref("length"));
    -
    -          <#elseif entry.hiveType == "STRING">
    -            JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    -              castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
    +                    castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
    +                        .invoke("getStrippedValue")
    +                        .invoke("getBytes"));
    +            <#elseif entry.hiveType == "STRING">
    +              JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    +                  castedOI.invoke("getPrimitiveJavaObject").arg(returnValue)
                           .invoke("getBytes"));
    -            jc._else().add(returnValueHolder.ref("buffer")
    -              .invoke("setBytes").arg(JExpr.lit(0)).arg(data));
    -            jc._else().assign(returnValueHolder.ref("start"), JExpr.lit(0));
    -            jc._else().assign(returnValueHolder.ref("end"), data.ref("length"));
    -          <#elseif entry.hiveType == "BINARY">
    +            <#elseif entry.hiveType == "BINARY">
    +                JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    +                    castedOI.invoke("getPrimitiveJavaObject").arg(returnValue));
    +            </#if>
     
    -            JVar data = jc._else().decl(m.directClass(byte[].class.getCanonicalName()),
"data",
    -              castedOI.invoke("getPrimitiveJavaObject").arg(returnValue));
    -            jc._else().add(returnValueHolder.ref("buffer")
    +            JConditional jnullif = jc._else()._if(data.eq(JExpr._null()));
    +            jnullif._then().assign(returnValueHolder.ref("isSet"), JExpr.lit(0));
    --- End diff --
    
    Why is isSet set to 0 here ?


> Hive functions should update writerIndex accordingly when return binary type
> ----------------------------------------------------------------------------
>
>                 Key: DRILL-4868
>                 URL: https://issues.apache.org/jira/browse/DRILL-4868
>             Project: Apache Drill
>          Issue Type: Bug
>            Reporter: Chunhui Shi
>            Assignee: Chunhui Shi
>
> unhex is a Hive function. the returned binary buffer could not be consumed by convert_from
as shown below.
> 0: jdbc:drill:zk=10.10.88.128:5181> select convert_from(unhex('0a5f710b'),'int_be')
from (values(1));
> Error: SYSTEM ERROR: IndexOutOfBoundsException: readerIndex(0) + length(4) exceeds writerIndex(0):
DrillBuf[31], udle: [25 0..1024]
> Fragment 0:0
> [Error Id: 5e72ce4a-6164-4260-8317-ca2bb6325013 on atsqa4-128.qa.lab:31010] (state=,code=0)



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

Mime
View raw message