Add a better documented version of the div example
This commit is contained in:
parent
3e6facd820
commit
6259849525
@ -65,6 +65,60 @@
|
||||
|
||||
using namespace Firebird;
|
||||
|
||||
|
||||
// First, let's start with a function from the UdfBackwardCompatibility
|
||||
// library and add some additional comments.
|
||||
// We will also use self-docmenting variable names
|
||||
// //////////////////////////////////////////////////
|
||||
|
||||
/***
|
||||
* create function div (
|
||||
* anumerator integer,
|
||||
* adenominator integer
|
||||
* ) returns double precision
|
||||
* external name 'udf_compat!UC_div!Divide param1 by param2'
|
||||
* engine udr;
|
||||
***/
|
||||
FB_UDR_BEGIN_FUNCTION(UC_div)
|
||||
|
||||
// Divide integer param 1 by integer param2 using the stdlib
|
||||
|
||||
FB_UDR_MESSAGE(InMessage,
|
||||
(FB_INTEGER, anumerator)
|
||||
(FB_INTEGER, adenominator)
|
||||
);
|
||||
|
||||
FB_UDR_MESSAGE(OutMessage,
|
||||
(FB_DOUBLE, result)
|
||||
);
|
||||
|
||||
FB_UDR_EXECUTE_FUNCTION
|
||||
{
|
||||
if (in->anumeratorNull || in->adenominatorNull)
|
||||
{
|
||||
out->resultNull = FB_TRUE;
|
||||
out->result = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
out->resultNull = FB_FALSE;
|
||||
if (in->adenominator) {
|
||||
out->result = div(in->anumerator, in->adenominator).quot;
|
||||
}
|
||||
else
|
||||
{
|
||||
out->result = std::numeric_limits<double>::infinity();
|
||||
ISC_STATUS_ARRAY StatusVector = {isc_arg_gds, isc_arith_except,
|
||||
isc_arg_gds, isc_exception_integer_divide_by_zero, isc_arg_end};
|
||||
FbException::check(isc_exception_integer_divide_by_zero, status, StatusVector);
|
||||
}
|
||||
}
|
||||
}
|
||||
FB_UDR_END_FUNCTION
|
||||
|
||||
|
||||
|
||||
|
||||
/*** DDL
|
||||
create function flagged (
|
||||
n1 integer,
|
||||
|
Loading…
Reference in New Issue
Block a user