You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-user@db.apache.org by Robert Enyedi <ro...@intland.com> on 2006/08/30 16:57:57 UTC

Integer return type for Java functions

Hi,

According to this post 
http://mail-archives.apache.org/mod_mbox/db-derby-user/200602.mbox/%3c4404E53D.1050605@apache.org%3e 
I can explicitly state the parameter bindings of a Java function. Can 
something similar be done for the return type too?

For example this statement

CREATE FUNCTION F1(FIRSTINT INTEGER, SECONDINT INTEGER) RETURNS INTEGER
 PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
 EXTERNAL NAME 
'utils.CompatibilityFunctions.f1(java.lang.Integer,java.lang.Integer)';

expects that the return type of the utils.CompatibilityFunctions.f1 
method is "int" and _not_ "java.lang.Integer". But this way I cannot 
return a NULL value. Is there a workaround for this?

Regards,
Robert

Re: Integer return type for Java functions

Posted by Daniel John Debrunner <dj...@apache.org>.
Robert Enyedi wrote:
> Hi,
> 
> According to this post
> http://mail-archives.apache.org/mod_mbox/db-derby-user/200602.mbox/%3c4404E53D.1050605@apache.org%3e
> I can explicitly state the parameter bindings of a Java function. Can
> something similar be done for the return type too?
> 
> For example this statement
> 
> CREATE FUNCTION F1(FIRSTINT INTEGER, SECONDINT INTEGER) RETURNS INTEGER
> PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
> EXTERNAL NAME
> 'utils.CompatibilityFunctions.f1(java.lang.Integer,java.lang.Integer)';
> 
> expects that the return type of the utils.CompatibilityFunctions.f1
> method is "int" and _not_ "java.lang.Integer". But this way I cannot
> return a NULL value. Is there a workaround for this?

The Java return type of a method cannot be specified in the EXTERNAL
NAME clause, this is from section 9.8 of the SQL standard part 13.

One possible work around is to use the RETURNS NULL ON NULL INPUT clause
which will make the SQL function return NULL if any of the arguments are
NULL.

Otherwise you should just enter a Jira improvement for the Java method
resolution for functions to allow resolving to the object type
(java.lang.Integer) as well as the primitive type (int). I believe this
is in line with the standard. Even better enter the issue and then work
on it, join derby-dev and you will get help there on development issues.

Thanks,
Dan.