[ 
https://issues.apache.org/jira/browse/DERBY-1483?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Knut Anders Hatlen resolved DERBY-1483.
---------------------------------------

    Resolution: Duplicate

After DERBY-3652, Derby is able to resolve the bigintToHexString(Long) method 
in the bug description. The new resolution rules were documented in DERBY-4078, 
here: http://db.apache.org/derby/docs/10.10/ref/rrefsqljargmatching.html

Resolving the issue.
                
> Java Function defined with a BIGINT parameter invokes the method with a 
> signature of method(long) rather than method(Long)
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: DERBY-1483
>                 URL: https://issues.apache.org/jira/browse/DERBY-1483
>             Project: Derby
>          Issue Type: Bug
>          Components: Documentation
>    Affects Versions: 10.1.2.1
>            Reporter: Stan Bradbury
>            Priority: Minor
>              Labels: derby_triage10_11
>
> Calling a function passing BIGINT to a method accepting Long fails with the 
> message:
> ERROR 42X50: No method was found that matched the method call 
> derbyJavaUtils.bigintToHexString(long), tried all combinations of object and 
> primitive types and any possible type conversion for any  parameters the 
> method call may have. The method might exist but it is not public and/or 
> static, or the parameter types are not method invocation convertible.
> The method needs to accept the primative type: long to work.  BIGINT as 
> docuemented as having a compile time type of java.lang.Long - this is why I 
> expected the example method to work: see the Reference manual: 
> http://db.apache.org/derby/docs/10.1/ref/rrefsqlj30435.html.
>   
> Example: define the function bigintToHexString to accept a BIGINT parameter 
> (see below) and reference the corresponding  java method bigintToHexString 
> (shown below) that accepts a Long.  Add the jarfile with the class to the DB, 
> setup the database classpath and invoke with the query shown.
>   >>> Java Class:
> import java.sql.*;
> public class derbyJavaUtils
> {
> // bigintToHexString
>     public static String bigintToHexString(Long myBigint)
>     {
>       return myBigint.toHexString(myBigint.longValue());
>     }
> // bigintToHexString2 - this will work if used for the function
> public static String bigintToHexString2(long myBigint)
>     {
>       Long myLong = null;
>       return myLong.toHexString(myBigint);
>     }
> }
>  >> COMPILE IT AND JAR IT :  jar -cvf derbyJavaUtils.jar DerbyJavaUtils.class
> >> Setup the function as follows in a database:
>   .. CALL sqlj.install_jar( 'derbyJavaUtils.jar','APP.derbyJavaUtils',0);
>   .. CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 
> 'APP.derbyJavaUtils');
>   .. CREATE FUNCTION app.bigintToHexString(hexString bigint)
> RETURNS VARCHAR(16)
> PARAMETER STYLE JAVA NO SQL
> LANGUAGE JAVA 
> EXTERNAL NAME 'derbyJavaUtils.bigintToHexString'
>   === One possible test query:
> select  'C' ||  bigintToHexString2(CONGLOMERATENUMBER) ||  '.dat', TABLENAME, 
> ISINDEX
>     from SYS.SYSCONGLOMERATES a, SYS.SYSTABLES b
>   where a.TABLEID = b.TABLEID
>   As mention in the code comments the method: bigintToHexString2 - will work 
> if used for the function

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to