| From: | Andy Balholm <andy(at)balholm(dot)com> | 
|---|---|
| To: | Kevin Grittner <Kevin(dot)Grittner(at)wicourts(dot)gov> | 
| Cc: | pgsql-bugs(at)postgresql(dot)org | 
| Subject: | Re: dividing money by money | 
| Date: | 2010-03-31 17:52:54 | 
| Message-ID: | C3F71DDF-4D71-4CA5-9EF6-718DF6D9745D@balholm.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-bugs | 
On Mar 31, 2010, at 7:07 AM, Kevin Grittner wrote:
> (I was going to mark the TODO as an easy one.)
I thought it would be pretty simple, too, so I decided to go ahead and write and test it as an external module.
I think the function definition could be pasted directly into an appropriate place in src/backend/utils/adt/cash.c, if someone wants to add it to the main code base. The SQL to load it would need to be modified somewhat to fit into postgres.bki.
Here is the C source:
#include <postgres.h>
#include <fmgr.h>
#include <utils/cash.h>
PG_MODULE_MAGIC;
PG_FUNCTION_INFO_V1(cash_div_cash);
/* cash_div_cash()
 * Divide cash by cash, returning float8.
 */
Datum
cash_div_cash(PG_FUNCTION_ARGS)
{
    Cash    dividend = PG_GETARG_CASH(0);
    Cash    divisor  = PG_GETARG_CASH(1);
    float8  quotient;
    
    if (divisor == 0)
        ereport(ERROR,
                (errcode(ERRCODE_DIVISION_BY_ZERO),
                 errmsg("division by zero")));
    
    quotient = (float8)dividend / (float8)divisor;
    PG_RETURN_FLOAT8(quotient);
}
-------------------------------------------------------------------------------------
And here is the SQL to load it (assuming it has been compiled as a dynamically loadable module named divide_money and placed in the library directory on the server):
CREATE FUNCTION cash_div_cash(money, money) RETURNS double precision
    LANGUAGE c IMMUTABLE
    AS '$libdir/divide_money', 'cash_div_cash';
    
CREATE OPERATOR / (
    PROCEDURE = cash_div_cash,
    LEFTARG = money,
    RIGHTARG = money
);
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Kevin Grittner | 2010-03-31 18:01:59 | Re: dividing money by money | 
| Previous Message | Tom Lane | 2010-03-31 14:35:17 | Re: BUG #5400: Columns count mismatch in RULE with subquery |