db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel John Debrunner (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-479) Passing the return of a RETURN NULL ON NULL INPUT function to another function call throws linkage error.
Date Wed, 08 Feb 2006 18:25:58 GMT
    [ http://issues.apache.org/jira/browse/DERBY-479?page=comments#action_12365609 ] 

Daniel John Debrunner commented on DERBY-479:

It helps in these situations to be clear about SQL function vs. Java method. For example the
the first sentence in the last comment should be:

> The function is defined such that if the argument to it is null, it should simply return
null w/o invoking the method.

Then this leads to the next sentence saying:

> But, in order to return null, the method's return type can't be primitive

This is wrong, if it relates to the first sentence, if the method is never being called when
the input is SQL NULL, then it doesn't matter
what the return type of the method is (since the method is never called).  

It is correct however if the method needs to return a NULL value when the input parameters
are not NULL, or the SQL function
is declared as CALLED ON  NULL INPUT. then the Java method does need to have a return type
of  java.lang.Integer.

One thought is related to the handling of converting types between the SQL domain and the
Java domain. The nodes pushed for such
an expression are something like:

 JavaToSQL( StaticMethodCall(  SQLtoJava ( JavaToSQL ( StaticMethodCall (constant 90) ) )
) ) 

That is any compiled node that results in a Java value is automatically wrapped in a JavaToSQL
node that  converts the value
from the Java space (a Java object ot primitive) to the SQL space (a DataValueDescriptor).
The assumption is the Java value
is most likely returned to the SQL space. If a SQL value needs to be pushed into the Java
space the converse node is used.

When a SQLtoJava  wraps a JavaToSQL node   (or vice versa) the compiler (I think) will just
remove these two nodes so that 
there is no performance overhead due to the no-op conversion . I think the logic for this
removal was not updated for the RETURNS
NULL ON NULL INPUT case, because this clause means the double conversion is not  no-op.

> Passing the return of  a RETURN NULL ON NULL INPUT function to another function call
throws linkage error.
> ----------------------------------------------------------------------------------------------------------
>          Key: DERBY-479
>          URL: http://issues.apache.org/jira/browse/DERBY-479
>      Project: Derby
>         Type: Bug
>   Components: SQL
>     Versions:
>     Reporter: Daniel John Debrunner

> Error in ij (RN_RADIANS is a function declared as returns null on null input)
> ERROR XBCM1: Java linkage error thrown during load of generated class org.apache.derby.exe.ace5214067x0105x5e41x7a46xffff855452e375.
> ERROR XJ001: Java exception: '(class: org/apache/derby/exe/ace5214067x0105x5e41x
> 7a46xffff855452e375, method: e0 signature: ()Ljava/lang/Object;) Expecting to find double
on stack: java.lang.VerifyError'.
> extract from derby.log
> 2005-07-28 16:23:43.836 GMT Thread[main,5,main] Wrote class org.apache.derby.exe
> .ace5214067x0105x5e41x7a46xffff855452e375 to file C:\_work\svn_pb\trunk\systest\
> out\functions\ace5214067x0105x5e41x7a46xffff855452e375.class. Please provide sup
> port with the file and the following exception information: java.lang.VerifyErro
> r: (class: org/apache/derby/exe/ace5214067x0105x5e41x7a46xffff855452e375, method
> : e0 signature: ()Ljava/lang/Object;) Expecting to find double on stack
> I will add a test case to lang/functions.sql commented with this bug number. Test cases
> that fail will be commented out.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message