On 07/12/2011 07:31, Alex Peshkoff wrote: > On 12/05/11 04:23, Geoff Worboys wrote: >> So the power example would become: >> >> declare external function dPower >> double precision by descriptor, double precision by descriptor, >> double precision by descriptor, integer by descriptor >> returns parameter 3 >> returns exception 4 >> entry_point 'power' module_name 'fbudf'; >> >> and the relevant part of the udf code could become: >> FBUDF_API void power(const paramdsc* v, const paramdsc* v2, >> paramdsc* rc, paramdsc* rce) >> [...] >> if (rct< 0 || rct2< 0 || !d&& d2< 0) >> { >> internal::setnull(rc); >> internal::set_int_type(rce, 1); >> return; >> } >> >> Something like this could make UDFs more powerful and error >> situations easier to deal with. > On my mind much simpler way will be to have special interface (we talk > about FB3 and higher, though in 2X speical entrypoint may be easily > used) to notify engine about error condition in UDF. Something like: > > if (rct< 0 || rct2< 0 || !d&& d2< 0) > { > fb_get_master_interface()->getUdfHelper()->signalError(FB_MATH_ERROR); > return 0.0; > } > > Certainly, UdfHelper interface name is just a sample like FB_MATH_ERROR > constant too. > This helps avoid artificial parameters passed to UDF. > > UDFs has there for what, 20 years?
Why do we should add hacks to the new API to support them, now that we have a replacement for it? Adriano ------------------------------------------------------------------------------ Cloud Services Checklist: Pricing and Packaging Optimization This white paper is intended to serve as a reference, checklist and point of discussion for anyone considering optimizing the pricing and packaging model of a cloud services business. Read Now! http://www.accelacomm.com/jaw/sfnl/114/51491232/ Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel