Thread: Re: [GENERAL] A real currency type

Re: [GENERAL] A real currency type

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


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 08:49:18AM -0500, Bruce Momjian wrote:
>
> This looks very interesting.  Should we add it to the core distribution?

Excellent question. As yet I have received very little feedback on it,
though it does work as advertised. I have had some people complain that
while they'd like to use it (especially the timestamp-that-remembers-
the-timezone), they don't like the idea of an external module.

I suppose the are a few technical issues that could be raised, like the
fact that it searches user tables during the parse phase, but this is a
generic problem with non-immutable type input functions.

I'd like it to be considered for inclusion. If the interest is there I
can make any changes people suggest.

Have a nice day,

>
> ---------------------------------------------------------------------------
>
> 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. +
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings

--
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.

Re: [GENERAL] A real currency type

From
Pailloncy Jean-Gerard
Date:
>> This looks very interesting.  Should we add it to the core
>> distribution?
>
> Excellent question. As yet I have received very little feedback on it,
> though it does work as advertised. I have had some people complain
> that
> while they'd like to use it (especially the timestamp-that-remembers-
> the-timezone), they don't like the idea of an external module.
>
> I suppose the are a few technical issues that could be raised, like
> the
> fact that it searches user tables during the parse phase, but this
> is a
> generic problem with non-immutable type input functions.
>
> I'd like it to be considered for inclusion. If the interest is there I
> can make any changes people suggest.
There was an old thread on the list about "extended type".

The general idea was to add a attribute to each column to represent
the "unit" (as for physical measure).

I had worked on a development system that use this kind of "extended
type" and it was very good to catch errors by checking the
compatibility of extended type.

Cordialement,
Jean-Gérard Pailloncy



Re: [GENERAL] A real currency type

From
Josh Berkus
Date:
Bruce, Martijin,

> > This looks very interesting.  Should we add it to the core distribution?
>
> Excellent question. As yet I have received very little feedback on it,
> though it does work as advertised. I have had some people complain that
> while they'd like to use it (especially the timestamp-that-remembers-
> the-timezone), they don't like the idea of an external module.

So, how about adding it to contrib for one version?

-- 
Josh Berkus
Aglio Database Solutions
San Francisco


Re: [GENERAL] A real currency type

From
"Jim C. Nasby"
Date:
On Tue, Mar 21, 2006 at 06:15:29PM +0100, Pailloncy Jean-Gerard wrote:
> >>This looks very interesting.  Should we add it to the core  
> >>distribution?
> >
> >Excellent question. As yet I have received very little feedback on it,
> >though it does work as advertised. I have had some people complain  
> >that
> >while they'd like to use it (especially the timestamp-that-remembers-
> >the-timezone), they don't like the idea of an external module.
> >
> >I suppose the are a few technical issues that could be raised, like  
> >the
> >fact that it searches user tables during the parse phase, but this  
> >is a
> >generic problem with non-immutable type input functions.
> >
> >I'd like it to be considered for inclusion. If the interest is there I
> >can make any changes people suggest.
> There was an old thread on the list about "extended type".
> 
> The general idea was to add a attribute to each column to represent  
> the "unit" (as for physical measure).
> 
> I had worked on a development system that use this kind of "extended  
> type" and it was very good to catch errors by checking the  
> compatibility of extended type.

While I'm not sure it makes sense to include such an 'extended type' in
the base system, it would be a neat project to have on pgFoundry.
-- 
Jim C. Nasby, Sr. Engineering Consultant      jnasby@pervasive.com
Pervasive Software      http://pervasive.com    work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf       cell: 512-569-9461


Re: [GENERAL] A real currency type

From
"Jim C. Nasby"
Date:
On Tue, Mar 21, 2006 at 09:39:09AM -0800, Josh Berkus wrote:
> Bruce, Martijin,
> 
> > > This looks very interesting.  Should we add it to the core distribution?
> >
> > Excellent question. As yet I have received very little feedback on it,
> > though it does work as advertised. I have had some people complain that
> > while they'd like to use it (especially the timestamp-that-remembers-
> > the-timezone), they don't like the idea of an external module.
> 
> So, how about adding it to contrib for one version?

ISTM that having a currency type is pretty common for most databases; I
don't really see any reason not to just include it. Likewise for a type
that actually stores timezone info with a timestamp.
-- 
Jim C. Nasby, Sr. Engineering Consultant      jnasby@pervasive.com
Pervasive Software      http://pervasive.com    work: 512-231-6117
vcard: http://jim.nasby.net/pervasive.vcf       cell: 512-569-9461


[GENERAL] A real currency type

From
"Gregory Maxwell"
Date:
On 3/21/06, Jim C. Nasby <jnasby@pervasive.com> wrote:
> ISTM that having a currency type is pretty common for most databases; I
> don't really see any reason not to just include it. Likewise for a type
> that actually stores timezone info with a timestamp.

This really should be generalized to work with all the base types
because there are strong use cases for each. (timezones with
timestamps, currencies with numeric, physical units with floats and
ints)


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 02:00:14PM -0500, Gregory Maxwell wrote:
> On 3/21/06, Jim C. Nasby <jnasby@pervasive.com> wrote:
> > ISTM that having a currency type is pretty common for most databases; I
> > don't really see any reason not to just include it. Likewise for a type
> > that actually stores timezone info with a timestamp.
>
> This really should be generalized to work with all the base types
> because there are strong use cases for each. (timezones with
> timestamps, currencies with numeric, physical units with floats and
> ints)

Have you looked at the code? It *is* generalised. All you need to do is
provide a table of tags and indicate the base-type. Hence:

currency type = table of currencies + numeric base type
timestamp+zone type = table of timezones + timestamp base type
physical unit = table of units + numeric base type

These are examples already included in the code, but I'm sure people
can come up with more.

Have a nice day,
--
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.

Re: [GENERAL] A real currency type

From
Peter Eisentraut
Date:
Bruce Momjian wrote:
> This looks very interesting.  Should we add it to the core
> distribution?

I think such types would be better implemented as some sort of 
structured type, possibly with constructors and methods and all the 
other stuff that SQL talks about.  We don't have all of that yet -- 
maybe we don't need all of it immediately -- but before we start 
endorsing many of these types I'd like to see some consideration given 
to this issue.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/


Re: [GENERAL] A real currency type

From
Andrew Dunstan
Date:
Peter Eisentraut wrote:

>Bruce Momjian wrote:
>  
>
>>This looks very interesting.  Should we add it to the core
>>distribution?
>>    
>>
>
>I think such types would be better implemented as some sort of 
>structured type, possibly with constructors and methods and all the 
>other stuff that SQL talks about.  We don't have all of that yet -- 
>maybe we don't need all of it immediately -- but before we start 
>endorsing many of these types I'd like to see some consideration given 
>to this issue.
>
>  
>

Yeah, looks interesting but let's find the wrinkles. I was wondering if 
it might have relevance to what I wanted to do with enumeration types, 
i.e. we would tag each one with its particular enumeration id.

I also don't like the idea of it being done with user tables - if this 
is core material then the tags should go in the catalog, ISTM.

cheers

andrew




Re: [GENERAL] A real currency type

From
Tom Lane
Date:
Martijn van Oosterhout <kleptog@svana.org> writes:
> I'd like it to be considered for inclusion.

The description page lists sufficiently many unresolved issues that
I'd have to call it "not ready for prime time" ... even assuming there
are not any issues you failed to identify.  One showstopper I can cite
immediately is the lack of any pg_dump support.

I could see putting this in contrib, perhaps, but to become part of core
it'd need to be better designed and better integrated.  That probably
means fixing some limitations in the current core code (for instance the
need for the auxiliary-type kluge).

Peter's point that there may exist SQL2003 features that cover the same
ground is also well taken ... we should investigate that before
inventing nonstandard stuff that we'll be stuck with supporting
forevermore.
        regards, tom lane


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 04:10:21PM -0500, Tom Lane wrote:
> Martijn van Oosterhout <kleptog@svana.org> writes:
> > I'd like it to be considered for inclusion.
>
> The description page lists sufficiently many unresolved issues that
> I'd have to call it "not ready for prime time" ... even assuming there
> are not any issues you failed to identify.  One showstopper I can cite
> immediately is the lack of any pg_dump support.

Really? The code creates ordinary types, operators and functions, all
of which are dumped fine by pg_dump. Dependancies are created which
should ensure the parts get dumped in the right order. What special
support in pg_dump were you envisioning?

Have a nice day,
--
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.

Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 03:59:31PM -0500, Andrew Dunstan wrote:
> >I think such types would be better implemented as some sort of
> >structured type, possibly with constructors and methods and all the
> >other stuff that SQL talks about.  We don't have all of that yet --
> >maybe we don't need all of it immediately -- but before we start
> >endorsing many of these types I'd like to see some consideration given
> >to this issue.
>
> Yeah, looks interesting but let's find the wrinkles. I was wondering if
> it might have relevance to what I wanted to do with enumeration types,
> i.e. we would tag each one with its particular enumeration id.

I have considered making enumeration types with this. It would probably
work but kind of overkill. The main problem being that this code is
seriously aimed at creating new types that you intend to do operations
on, create operators for. An enumeration is just that, an enumeration.

> I also don't like the idea of it being done with user tables - if this
> is core material then the tags should go in the catalog, ISTM.

But the user is providing the list of tags when creating the type.
Unless you are proposing copying the tag table to the catalog when the
type is created? You can't store all the tags for all tagged types in
one tag table either. At least, that wasn't what I was envisiging. See
the currency type where the tag-table also stores the format string for
output. No other tagged type is going to need that information.

SQL types with constructors and methods might provide this also, I
don't know. My purpose with this was allowing people to simply create
new types with specific behaviour without writing functions in C. Right
now type input/output functions cannot be written in anything other
than C. Here are a few C functions that handle these new types in a
generic way and user can write little pl/pgsql wrappers to customise
the output.

Have a ncie day,

--
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.

Re: [GENERAL] A real currency type

From
Tom Lane
Date:
Martijn van Oosterhout <kleptog@svana.org> writes:
> Really? The code creates ordinary types, operators and functions, all
> of which are dumped fine by pg_dump. Dependancies are created which
> should ensure the parts get dumped in the right order. What special
> support in pg_dump were you envisioning?

The dump should look the same as the commands originally used to create
the type, which is surely not going to happen with that "SELECT
create_tagged_type()" stuff barring pg_dump modifications.  Otherwise
we are nailing down not one but two representations of this feature that
we'll have to support forevermore: what the users see and what's in
pg_dump scripts.  We've already learned that lesson the hard way several
times, and are still trying to cope with the fallout in some places
(serial columns for instance).

Now I happen to think that SELECT create_tagged_type() is a horrid kluge
anyway ;-) so I'm not proposing that pg_dump be changed to output that.
What we would need is to design a command syntax that we're actually
prepared to live with for the indefinite future, then implement it in
the backend and teach pg_dump about it.

What we *don't* want is a pg_dump representation that exposes
implementation details.  I would classify both the backing table for a
tagged type's enum values, and the representation of its operators and
functions, as implementation details.

BTW, I share Andrew Dunstan's feeling that there's huge overlap here
with support for mysql-like enum types.  We ought to try to kill that
bird with the same stone.
        regards, tom lane


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 05:25:15PM -0500, Tom Lane wrote:
> The dump should look the same as the commands originally used to create
> the type, which is surely not going to happen with that "SELECT
> create_tagged_type()" stuff barring pg_dump modifications.  Otherwise
> we are nailing down not one but two representations of this feature that
> we'll have to support forevermore: what the users see and what's in
> pg_dump scripts.

Well, I agree with you in principle there. However, when you install
tsearch2 and do a pg_dump you don't get just a "\i tsearch.sql" out
either (I did propose something like this once though). Now, tsearch2
isn't integrated either, so I guess that the difference.

Let me put it this way: if this is to progress beyond just a contrib
module, it needs to go all the way (special syntax, pg_dump, etc). I'm
not sure if I'm that enamoured with it to want all that.

> Now I happen to think that SELECT create_tagged_type() is a horrid kluge
> anyway ;-) so I'm not proposing that pg_dump be changed to output that.
> What we would need is to design a command syntax that we're actually
> prepared to live with for the indefinite future, then implement it in
> the backend and teach pg_dump about it.

Ack.

> What we *don't* want is a pg_dump representation that exposes
> implementation details.  I would classify both the backing table for a
> tagged type's enum values, and the representation of its operators and
> functions, as implementation details.

One slight problem: the "backing table" is provided by the creator of
the type. And in principle they could be altered once the type is
created. So if the user creates a new tagged type, the pg_dump output
is going to have to output the backing table in some form, if not COPY
then something else.

The only way to avoid that is if both the type and the backing table
are included in the standard distribution and we forbid user changes.

Have a nice day,
--
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.

Re: [GENERAL] A real currency type

From
Tom Lane
Date:
Martijn van Oosterhout <kleptog@svana.org> writes:
> Let me put it this way: if this is to progress beyond just a contrib
> module, it needs to go all the way (special syntax, pg_dump, etc). I'm
> not sure if I'm that enamoured with it to want all that.

My feelings in a nutshell ;-)

> The only way to avoid that is if both the type and the backing table
> are included in the standard distribution and we forbid user changes.

I was thinking something more like a CREATE ENUM TYPE command that
specifically lists the enum values, and some extension of that to cater
for tagged types, and the values are put into a system catalog that the
user doesn't manipulate directly.  I don't see why it's a good idea to
put control of the backing table in the user's hands.  Yes, you can
think of advanced applications where it's useful to have random
additional stuff in the table, but that's exactly the point at which you
normally have to get down-and-dirty with some C code --- after all, what
is standardized code going to *do* with the additional stuff?  Nothing,
that's what.  If the argument for this is to make it simple to make
simple enum and tagged types, then I don't think that the design should
be centered on allowing extra stuff.
        regards, tom lane


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 05:55:09PM -0500, Tom Lane wrote:

<snip>

> Yes, you can
> think of advanced applications where it's useful to have random
> additional stuff in the table, but that's exactly the point at which you
> normally have to get down-and-dirty with some C code --- after all, what
> is standardized code going to *do* with the additional stuff?  Nothing,
> that's what.  If the argument for this is to make it simple to make
> simple enum and tagged types, then I don't think that the design should
> be centered on allowing extra stuff.

Umm, actually that extra info is very useful. For example in the
currency type it can store the currency symbol and how many decimal
places, etc.

The code uses it by converting the datum into a composite form
(base,tag) (the "auxilliary type") or by using the taginfo function
return the info tuple directly. These are easily manipulated by
straight SQL or pl/pgsql functions.

While it may not be critical to the use of then, it's an extremely
handy feature. Half the point of a currency type would be the
formatting, no? The information needs to be stored somewhere...

Have a nice day,
--
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.

Re: [GENERAL] A real currency type

From
Tom Lane
Date:
Martijn van Oosterhout <kleptog@svana.org> writes:
> On Tue, Mar 21, 2006 at 05:55:09PM -0500, Tom Lane wrote:
>> Yes, you can
>> think of advanced applications where it's useful to have random
>> additional stuff in the table, but that's exactly the point at which you
>> normally have to get down-and-dirty with some C code --- after all, what
>> is standardized code going to *do* with the additional stuff?  Nothing,
>> that's what.

> Umm, actually that extra info is very useful. For example in the
> currency type it can store the currency symbol and how many decimal
> places, etc.

And you do what with that in non-currency-specific code?  This argument
isn't holding water for me.  The "decimal places" info is in the wrong
place anyway, it should be attached to the underlying numeric type...
        regards, tom lane


Re: [GENERAL] A real currency type

From
"Andrew Dunstan"
Date:
Tom Lane said:
> I was thinking something more like a CREATE ENUM TYPE command that
> specifically lists the enum values, and some extension of that to cater
> for tagged types, and the values are put into a system catalog that the
> user doesn't manipulate directly.  I don't see why it's a good idea to
> put control of the backing table in the user's hands.

Me either. I like the sound of this.

cheers

andrew




Modular Type Libraries: was A real currency type

From
Trent Shipley
Date:
Without directly addressing the merits of enumerations, enumeration 
interfaces, real currency and time zone types, or whether currency and time 
zone types should be built using enumerations, I would like to ask the 
powers-that-be to seriously consider radically modularizing Postgresql's type 
system.

The core Postgresql installation would come with just those built-in types 
needed to bootstrap itself, perhaps just varchar and an integer type.  
Everything else would be a contributed module.

An interface or contract would be described for creating additional types.  It 
would include things like parameter handlers, how to dump the type, and how 
to load the type.  (That is, standard housekeeping functions needed by the 
Postgresql engine.)

Other that the tiny number of bootstrap types, Postgresql types would 
basically all be contrib modules.

Types could be bundled into groups such as binary, character, numerical, 
2d-spatial, networking, and so on.

Then one would not debate whether a type (or meta-type, like an enumeration) 
should be put into the core product.  Instead, the debate would be whether or 
not to grade the type as "mature" and whether or not to put a given type into 
pre-packaged type libraries with names like "legacy", "sql-2003-standard", or 
"recommended-default".

Power user DBA's could customize the types offered on their systems.

In short:

1) Types would be modular.  This would be elegant, but have no practical 
effect on database performance.    

2) The framework needed to support modular types would encourage type 
development.  This would enhance Postgresql's adaptability which would be A 
Very Good Thing.


Re: Modular Type Libraries: was A real currency type

From
"Andrew Dunstan"
Date:
Trent Shipley said:
> Without directly addressing the merits of enumerations, enumeration
> interfaces, real currency and time zone types, or whether currency and
> time  zone types should be built using enumerations, I would like to
> ask the  powers-that-be to seriously consider radically modularizing
> Postgresql's type  system.
>
> The core Postgresql installation would come with just those built-in
> types  needed to bootstrap itself, perhaps just varchar and an integer
> type.   Everything else would be a contributed module.
>
> An interface or contract would be described for creating additional
> types.  It  would include things like parameter handlers, how to dump
> the type, and how  to load the type.  (That is, standard housekeeping
> functions needed by the  Postgresql engine.)
>
> Other that the tiny number of bootstrap types, Postgresql types would
> basically all be contrib modules.
>
> Types could be bundled into groups such as binary, character,
> numerical,  2d-spatial, networking, and so on.
>
> Then one would not debate whether a type (or meta-type, like an
> enumeration)  should be put into the core product.  Instead, the debate
> would be whether or  not to grade the type as "mature" and whether or
> not to put a given type into  pre-packaged type libraries with names
> like "legacy", "sql-2003-standard", or  "recommended-default".
>
> Power user DBA's could customize the types offered on their systems.
>
> In short:
>
> 1) Types would be modular.  This would be elegant, but have no
> practical  effect on database performance.
>
> 2) The framework needed to support modular types would encourage type
> development.  This would enhance Postgresql's adaptability which would
> be A  Very Good Thing.

We already have good support of type development. It's not clear to me that
this would buy us anything at all. It seems like modularisation for the sake
of it. The real issue is what types and type mechanisms should be in the
postgresql core distribution. We won't win any thanks from anyone if we
reduce them. Getting some types right is hard. There is no case that I can
see for pushing timestamps, numerics, bitstrings or geometric or network
types out of the core - they need all the support they can get. I'm also not
sure which of these are required by the SQL spec.

cheers

andrew




Re: Modular Type Libraries: was A real currency type

From
Tom Lane
Date:
Trent Shipley <tshipley@deru.com> writes:
> Without directly addressing the merits of enumerations, enumeration 
> interfaces, real currency and time zone types, or whether currency and time 
> zone types should be built using enumerations, I would like to ask the 
> powers-that-be to seriously consider radically modularizing Postgresql's type
> system.

Er ... what makes you think it's not modular now?
        regards, tom lane


Re: Modular Type Libraries: was A real currency type

From
"Aftab Alam"
Date:
remove my email from the list

Regards,





-----Original Message-----
From: pgsql-hackers-owner@postgresql.org
[mailto:pgsql-hackers-owner@postgresql.org]On Behalf Of Andrew Dunstan
Sent: Wednesday, March 22, 2006 9:05 AM
To: tshipley@deru.com
Cc: pgsql-hackers@postgresql.org
Subject: Re: [HACKERS] Modular Type Libraries: was A real currency type


Trent Shipley said:
> Without directly addressing the merits of enumerations, enumeration
> interfaces, real currency and time zone types, or whether currency and
> time  zone types should be built using enumerations, I would like to
> ask the  powers-that-be to seriously consider radically modularizing
> Postgresql's type  system.
>
> The core Postgresql installation would come with just those built-in
> types  needed to bootstrap itself, perhaps just varchar and an integer
> type.   Everything else would be a contributed module.
>
> An interface or contract would be described for creating additional
> types.  It  would include things like parameter handlers, how to dump
> the type, and how  to load the type.  (That is, standard housekeeping
> functions needed by the  Postgresql engine.)
>
> Other that the tiny number of bootstrap types, Postgresql types would
> basically all be contrib modules.
>
> Types could be bundled into groups such as binary, character,
> numerical,  2d-spatial, networking, and so on.
>
> Then one would not debate whether a type (or meta-type, like an
> enumeration)  should be put into the core product.  Instead, the debate
> would be whether or  not to grade the type as "mature" and whether or
> not to put a given type into  pre-packaged type libraries with names
> like "legacy", "sql-2003-standard", or  "recommended-default".
>
> Power user DBA's could customize the types offered on their systems.
>
> In short:
>
> 1) Types would be modular.  This would be elegant, but have no
> practical  effect on database performance.
>
> 2) The framework needed to support modular types would encourage type
> development.  This would enhance Postgresql's adaptability which would
> be A  Very Good Thing.

We already have good support of type development. It's not clear to me that
this would buy us anything at all. It seems like modularisation for the sake
of it. The real issue is what types and type mechanisms should be in the
postgresql core distribution. We won't win any thanks from anyone if we
reduce them. Getting some types right is hard. There is no case that I can
see for pushing timestamps, numerics, bitstrings or geometric or network
types out of the core - they need all the support they can get. I'm also not
sure which of these are required by the SQL spec.

cheers

andrew



---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
              http://archives.postgresql.org



Re: Modular Type Libraries: was A real currency type

From
Tom Lane
Date:
"Andrew Dunstan" <andrew@dunslane.net> writes:
> ... The real issue is what types and type mechanisms should be in the
> postgresql core distribution. We won't win any thanks from anyone if we
> reduce them. Getting some types right is hard. There is no case that I can
> see for pushing timestamps, numerics, bitstrings or geometric or network
> types out of the core - they need all the support they can get. I'm also not
> sure which of these are required by the SQL spec.

Timestamps and numerics are definitely in the spec, geometric and
network types are definitely not.  IIRC, bitstring types are in SQL99
but for some reason are deprecated in SQL2003 (if anyone knows the
reasoning behind the SQL committee's about-face on that, please clue
us in).

AFAICS, the main part of the type system that isn't modular is the
support for type parameters (a/k/a typmod), such as the maximum length
for varchar or the precision/scale for numeric.  We could certainly
invent an API for interpreting such parameters.  But in the current state
of the system the types that have such parameters have to be hard-wired
into the SQL grammar, and I don't see how to get rid of that hard-wiring
without breaking a whole lot of stuff.  Any bison gurus hanging about?
        regards, tom lane


unsubscribe

From
"Aftab Alam"
Date:
unsubscribe



Re: Modular Type Libraries: was A real currency type

From
Martijn van Oosterhout
Date:
On Tue, Mar 21, 2006 at 10:39:03PM -0500, Tom Lane wrote:
> AFAICS, the main part of the type system that isn't modular is the
> support for type parameters (a/k/a typmod), such as the maximum length
> for varchar or the precision/scale for numeric.  We could certainly
> invent an API for interpreting such parameters.  But in the current state
> of the system the types that have such parameters have to be hard-wired
> into the SQL grammar, and I don't see how to get rid of that hard-wiring
> without breaking a whole lot of stuff.  Any bison gurus hanging about?

We've been here before:

http://archives.postgresql.org/pgsql-hackers/2005-08/msg01142.php

Turns out it isn't too hard, except there are a number of limitations.
Unfortunatly I seem to have the deleted the patch I created then. :(

Summerising the thread then:

- It made some changes to what was and wasn't a reserved word.
- Character sets for CHAR types still fall outside the system.
- Some other changes in behaviour

I'm not sure if much has changed since that discussion.

Have a nice day,
--
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.

Re: Modular Type Libraries: was A real currency type

From
"William ZHANG"
Date:
"Tom Lane" <tgl@sss.pgh.pa.us>
> Timestamps and numerics are definitely in the spec, geometric and
> network types are definitely not.  IIRC, bitstring types are in SQL99
> but for some reason are deprecated in SQL2003 (if anyone knows the
> reasoning behind the SQL committee's about-face on that, please clue
> us in).

There is a standard data type called "BIT" in ODBC and JDBC,
but it is sth. like SQL standard's BOOLEAN, not BIT. It seems that
some DBMSs implement BIT as BOOLEAN in the backend. Maybe the standard
committee think that bit string is useless and easy to cause confusion?

Regards,
William ZHANG




Re: Modular Type Libraries: was A real currency type

From
Trent Shipley
Date:
On Wednesday 2006-03-22 08:53, William ZHANG wrote:
> "Tom Lane" <tgl@sss.pgh.pa.us>
>
> > Timestamps and numerics are definitely in the spec, geometric and
> > network types are definitely not.  IIRC, bitstring types are in SQL99
> > but for some reason are deprecated in SQL2003 (if anyone knows the
> > reasoning behind the SQL committee's about-face on that, please clue
> > us in).
>
> There is a standard data type called "BIT" in ODBC and JDBC,
> but it is sth. like SQL standard's BOOLEAN, not BIT. It seems that
> some DBMSs implement BIT as BOOLEAN in the backend. Maybe the standard
> committee think that bit string is useless and easy to cause confusion?

In or out of the standard, bitstring can be a nice type to have.


Re: [GENERAL] A real currency type

From
August Zajonc
Date:
Martijn van Oosterhout wrote:
> On Tue, Mar 21, 2006 at 03:59:31PM -0500, Andrew Dunstan wrote:
>>> I think such types would be better implemented as some sort of 
>>> structured type, possibly with constructors and methods and all the 
>>> other stuff that SQL talks about.  We don't have all of that yet -- 
>>> maybe we don't need all of it immediately -- but before we start 
>>> endorsing many of these types I'd like to see some consideration given 
>>> to this issue.
>> Yeah, looks interesting but let's find the wrinkles. I was wondering if 
>> it might have relevance to what I wanted to do with enumeration types, 
>> i.e. we would tag each one with its particular enumeration id.
> 
> I have considered making enumeration types with this. It would probably
> work but kind of overkill. The main problem being that this code is
> seriously aimed at creating new types that you intend to do operations
> on, create operators for. An enumeration is just that, an enumeration.
> 
>> I also don't like the idea of it being done with user tables - if this 
>> is core material then the tags should go in the catalog, ISTM.
> 
> But the user is providing the list of tags when creating the type.
> Unless you are proposing copying the tag table to the catalog when the
> type is created? You can't store all the tags for all tagged types in
> one tag table either. At least, that wasn't what I was envisiging. See
> the currency type where the tag-table also stores the format string for
> output. No other tagged type is going to need that information.
> 
> SQL types with constructors and methods might provide this also, I
> don't know. My purpose with this was allowing people to simply create
> new types with specific behaviour without writing functions in C. Right
> now type input/output functions cannot be written in anything other
> than C. Here are a few C functions that handle these new types in a
> generic way and user can write little pl/pgsql wrappers to customise
> the output.
> 
> Have a ncie day,
> 
Martin,

This would be extremely useful to have.

For example, if I store currencies tagged properly, I could do a select
and multiply the currency tag by the factor associated with that tag.
This would allow easily quoting financials in a standard currency, but
protect against type mismatches presumably at the database level (USD +
AUD fails).

Either way, it should be easy to add tags (ie, INSERT or similar) or get
a list of them (SELECT * from somewhere where type = "currency"). I'm
sure this later will be the case system catalog or not.

- August


Re: [GENERAL] A real currency type

From
Martijn van Oosterhout
Date:
On Fri, Mar 24, 2006 at 08:54:54AM -0800, August Zajonc wrote:
> Martin,
>
> This would be extremely useful to have.
>
> For example, if I store currencies tagged properly, I could do a select
> and multiply the currency tag by the factor associated with that tag.
> This would allow easily quoting financials in a standard currency, but
> protect against type mismatches presumably at the database level (USD +
> AUD fails).

Yep, it does do that. And it's very handy :)

> Either way, it should be easy to add tags (ie, INSERT or similar) or get
> a list of them (SELECT * from somewhere where type = "currency"). I'm
> sure this later will be the case system catalog or not.

The current implementation allows that. You just insert new tags or
update them.

Anyway, the code works if you want ot try it. Otherwise, maybe someone
will eventually build something equivalent into the backend...

Have a nice day.
--
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.