|
[
Permalink
| « Hide
]
Dmitry Yemanov added a comment - 05/Aug/09 05:35 AM
As far as I can see, the CRT function POW() used in that UDF simply doesn't throw any exception, so there's nothing to catch.
In this case, Infinity will have to be detected in fun.epp directly.
Given these declarations:
DECLARE EXTERNAL FUNCTION DPOWER DOUBLE PRECISION BY DESCRIPTOR, DOUBLE PRECISION BY DESCRIPTOR, DOUBLE PRECISION BY DESCRIPTOR RETURNS PARAMETER 3 ENTRY_POINT 'power' MODULE_NAME 'fbudf'; DECLARE EXTERNAL FUNCTION XASIN DOUBLE PRECISION RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_asin' MODULE_NAME 'ib_udf'; DECLARE EXTERNAL FUNCTION XDIV INTEGER, INTEGER RETURNS DOUBLE PRECISION BY VALUE ENTRY_POINT 'IB_UDF_div' MODULE_NAME 'ib_udf'; the expected answer from the engine is: SQL> select dpower(1e120, 3) from rdb$database; DPOWER ======================= Statement failed, SQLSTATE = 39000 expression evaluation not supported -Floating point overflow in result from UDF DPOWER SQL> select xasin(2) from rdb$database; XASIN ======================= Statement failed, SQLSTATE = 39000 expression evaluation not supported -Invalid floating point value returned by UDF XASIN SQL> show functions; DPOWER XASIN XDIV SQL> select xdiv(10, 0) from rdb$database; XDIV ======================= Statement failed, SQLSTATE = 39000 expression evaluation not supported -Floating point overflow in result from UDF XDIV |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||