Thread: [PATCH] Contrib C source for casting MONEY to INT[248] and FLOAT[48]

[PATCH] Contrib C source for casting MONEY to INT[248] and FLOAT[48]

From
"David D. Kilzer"
Date:
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

Re: [PATCH] Contrib C source for casting MONEY to INT[248] and FLOAT[48]

From
Bruce Momjian
Date:
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