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