Thread: [PATCH] Contrib C source for casting MONEY to INT[248] and FLOAT[48]
Attached please find a patch to cast (convert) the MONEY type to any one of the following types: INT2, INT4, INT8, FLOAT4, FLOAT8 The patch is against PostgreSQL v7.0.3 and creates files in a new directory named contrib/money/. I'm pretty sure it won't compile against v7.1, but it won't be too hard to fix. (I'll do this when I upgrade to v7.1 at work, which will hopefully happen sooner rather than later.) I wrote this because I needed to convert MONEY to a standard decimal value and didn't want to do it on the client in Perl, and I didn't want to use a plpgsql function that used string parsing. Both solutions were too inefficient for my needs. http://postgresql.bteg.net/mhonarc/pgsql-general/2000-01/msg00446.html I wouldn't have used the MONEY type in the first place if I had known it was deprecated, but I didn't see this notice in the v7.0.3 documentation two to three months ago when designing the database. Oh well, my loss is your gain. :^) I've attempted to set the Reply-To field to pgsql-hackers, but please copy me on any posts as well. Comments welcome! Dave
Attachment
"David D. Kilzer" <ddkilzer@lubricants-oil.com> writes: > Attached please find a patch to cast (convert) the MONEY type to any one > of the following types: > INT2, INT4, INT8, FLOAT4, FLOAT8 Hmm. It strikes me as a rather bad idea to introduce implicit casting of MONEY to all these other types --- I suspect that's going to create a bunch of parsing ambiguities. > I wrote this because I needed to convert MONEY to a standard decimal > value and didn't want to do it on the client in Perl, and I didn't want > to use a plpgsql function that used string parsing. Seems like a better answer is to use NUMERIC instead of MONEY in the first place... regards, tom lane
Tom outlined the problems with this patch. We want to remove Money and have it be part of Numeric. > Attached please find a patch to cast (convert) the MONEY type to any one > of the following types: > > INT2, INT4, INT8, FLOAT4, FLOAT8 > > The patch is against PostgreSQL v7.0.3 and creates files in a new > directory named contrib/money/. I'm pretty sure it won't compile > against v7.1, but it won't be too hard to fix. (I'll do this when I > upgrade to v7.1 at work, which will hopefully happen sooner rather than > later.) > > I wrote this because I needed to convert MONEY to a standard decimal > value and didn't want to do it on the client in Perl, and I didn't want > to use a plpgsql function that used string parsing. Both solutions were > too inefficient for my needs. > > http://postgresql.bteg.net/mhonarc/pgsql-general/2000-01/msg00446.html > > I wouldn't have used the MONEY type in the first place if I had known it > was deprecated, but I didn't see this notice in the v7.0.3 documentation > two to three months ago when designing the database. Oh well, my loss > is your gain. :^) > > I've attempted to set the Reply-To field to pgsql-hackers, but please > copy me on any posts as well. > > Comments welcome! > > Dave [ Attachment, skipping... ] > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Re: [PATCH] Contrib C source for casting MONEY to INT[248] and FLOAT[48]
From
"David D. Kilzer"
Date:
On Tue, Jun 19, 2001 at 10:20:18AM -0400, Tom Lane wrote: > "David D. Kilzer" <ddkilzer@lubricants-oil.com> writes: > > Attached please find a patch to cast (convert) the MONEY type to any one > > of the following types: > > INT2, INT4, INT8, FLOAT4, FLOAT8 > > Hmm. It strikes me as a rather bad idea to introduce implicit casting > of MONEY to all these other types --- I suspect that's going to create > a bunch of parsing ambiguities. Well, that's why the patch puts the code under contrib/. I meant this to be optional code that could be added to PostgreSQL if people needed the functionality, i.e., for transition work. I'm sorry if that wasn't clear in my original post. Should I have not submitted this code to the pgsql-patches list? > > I wrote this because I needed to convert MONEY to a standard decimal > > value and didn't want to do it on the client in Perl, and I didn't want > > to use a plpgsql function that used string parsing. > > Seems like a better answer is to use NUMERIC instead of MONEY in the > first place... The reason for this (in my case) was covered in the next paragraph: > > I wouldn't have used the MONEY type in the first place if I had known it > > was deprecated, but I didn't see this notice in the v7.0.3 documentation > > two to three months ago when designing the database. So for those of us who accidentally used the MONEY type (or had legacy tables that used the MONEY type), these functions (especially the FLOAT8 type conversion) are extremely useful for transition work. I don't really care if the code is included with future PostgreSQL releases or not. I just wanted to save other people some time if or when they decide to transition off the MONEY type. Dave