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

Ng Jiunn Jye commented on CALCITE-680:
--------------------------------------

Hi Julian, 
I have spent a significant amount of time trying to resolve this by making 
calcite work on byte[] argument / return type. 

The 2 main scenario 
- byte[] as argument 
- byte[] as return type 
spin off to 8 scenario 
 - udf on literal on projection
 - udf on column on projection
 - udf on literal on where clause
 - udf on column on where clause

almost each need to be fix at different area of the code. Even so, I just 
discovered the some fix work on single column projection but not on multiple 
column projection. 

I now wonder if it is a bad idea trying to make UDF use byte[] instead of 
ByteString. Mainly because everywhere in calcite is expecting binary array as 
ByteString.

I took a look at the BuildInMethod and the ByteString is used as argument and 
return type. 

I am thinking to fix this issue by using ByteString as argument / return type 
as in the other BuildInMethods. 


> Compilation Error when processing UDF with binary parameter
> -----------------------------------------------------------
>
>                 Key: CALCITE-680
>                 URL: https://issues.apache.org/jira/browse/CALCITE-680
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Ng Jiunn Jye
>            Assignee: Julian Hyde
>
> I am creating Calcite UDF which convert array of byte into string and vice 
> versa.
> For BinaryToString udf, the SqlValidator is expecting the function with 
> parameter byte[], but during execution, the EnumerableCalc is expecting the 
> function to take parameter of type ByteString. 
> Test Sql  :
> select BinaryToString (x'01020304') from T1
> Error Message: 
> Caused by: org.codehaus.commons.compiler.CompileException: Line 24, Column 
> 84: No applicable constructor/method found for actual parameters 
> "org.apache.calcite.avatica.util.ByteString"; candidates are: "public 
> java.lang.String BinaryToString.eval(byte[])"
> Generated Code extract : 
>             public Object current() {
>               return newBinaryToString().eval(new 
> org.apache.calcite.avatica.util.ByteString(
>                   new byte[] {
>                     (byte)1,
>                     (byte)2,
>                     (byte)3,
>                     (byte)4}));
>             }



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

Reply via email to