Rick Hillegas created DERBY-5901:
------------------------------------

             Summary: You can declare user-defined functions which shadow 
builtin functions by the same name.
                 Key: DERBY-5901
                 URL: https://issues.apache.org/jira/browse/DERBY-5901
             Project: Derby
          Issue Type: Bug
          Components: SQL
    Affects Versions: 10.10.0.0
            Reporter: Rick Hillegas


You can override a Derby builtin function by creating a function with the same 
name. This can give rise to wrong results.

Consider the following user code:

public class FakeSin
{
    public  static  Double  sin( Double input ) { return new Double( 3.0 ); }
}

Now run the following script:

connect 'jdbc:derby:memory:db;create=true';

values sin( 0.5 );

create function sin( a double ) returns double language java parameter style 
java no sql external name 'FakeSin.sin';

values sin( 0.5 );
values sin(  0.5 );

Note the following:

1) The first invocation of sin() returns the expected result.

2) You are allowed to create a user-defined function named "sin" which can 
shadow the builtin function.

3) The second invocation of sin() returns the result of running the builtin 
function. This is because the second invocation is character-for-character 
identical to the first, so Derby just uses the previously prepared statement. 

4) But the third invocation of sin() returns the result of running the 
user-defined function. Note that the third invocation has an extra space in it, 
which causes Derby to compile it from scratch, picking up the user-defined 
function instead of the builtin one.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to