Re: [GENERAL] A real currency type - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [GENERAL] A real currency type
Date
Msg-id 200603211349.k2LDnIR15871@candle.pha.pa.us
Whole thread Raw
Responses Re: [GENERAL] A real currency type
Re: [GENERAL] A real currency type
List pgsql-hackers
This looks very interesting.  Should we add it to the core distribution?

---------------------------------------------------------------------------

Martijn van Oosterhout wrote:
-- Start of PGP signed section.
> For a while I've been wondering about making a type that was really a
> shell around a base type that tagged the type in some way. For example,
> associating a currency with a numeric and complaining about additions
> between mismatches.
> 
> Well, I did it and it's available here:
> http://svana.org/kleptog/pgsql/taggedtypes.html
> 
> Below some examples of it in action. Yes, that's a timestamp that
> remembers the timezone. Neat huh?
> 
> Tested on 7.4 and a recent 8.1devel so it should work for most people.
> Installation reports welcome. Note, this is beta software, don't run it
> on your production server. Thanks.
> 
> Have a nice day,
> 
> 
> test=# select '5.6 USD'::currency + '4.5 USD'::currency;;
>  ?column?  
> -----------
>  10.10 USD
> (1 row)
> 
> test=# select '5.6 USD'::currency + '4.5 AUD'::currency;;
> ERROR:  Using operator +(currency,currency) with incompatable tags (USD,AUD)
> test=# select c1, print_currency(c1) from c;
>      c1     | print_currency 
> ------------+----------------
>  232.44 USD | US$    232.44
>  21.20 EUR  | ?       21.20
>  -13.44 AUD | AU$    -13.44
>  0.01 USD   | US$      0.01
>  14.00 AUD  | AU$     14.00
> (5 rows)
> 
> test=# select 5.4*c1 from c where tag(c1) = 'AUD';
>   ?column?  
> ------------
>  -72.58 AUD
>  75.60 AUD
> (2 rows)
> 
> test=# select t, "timestamp"(t), date_part('hour',t) from c;
>                     t                    |      timestamp      | date_part 
> -----------------------------------------+---------------------+-----------
>  2005-08-14 02:00:00+02 Europe/Amsterdam | 2005-08-14 02:00:00 |         2
>  2005-08-14 02:00:00+02 Australia/Sydney | 2005-08-14 10:00:00 |        10
>  2005-08-14 02:00:00+02 Asia/Hong_Kong   | 2005-08-14 08:00:00 |         8
>  2005-08-14 02:00:00+02 America/New_York | 2005-08-13 20:00:00 |        20
>  2005-08-14 02:00:00+02 Asia/Kuwait      | 2005-08-14 03:00:00 |         3
> (5 rows)
> 
> -- 
> Martijn van Oosterhout   <kleptog@svana.org>   http://svana.org/kleptog/
> > Patent. n. Genius is 5% inspiration and 95% perspiration. A patent is a
> > tool for doing 5% of the work and then sitting around waiting for someone
> > else to do the other 95% so you can sue them.
-- End of PGP section, PGP failed!

--  Bruce Momjian   http://candle.pha.pa.us SRA OSS, Inc.   http://www.sraoss.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: "Andrew Dunstan"
Date:
Subject: Re: 8.2 planning features
Next
From: "Jim C. Nasby"
Date:
Subject: Re: [Pgbuildfarm-members] guppie: 64MB RAM too small?