Re: extended operator classes vs. type interfaces - Mailing list pgsql-hackers

From Yeb Havinga
Subject Re: extended operator classes vs. type interfaces
Date
Msg-id 4BBF3F5F.3090803@gmail.com
Whole thread Raw
In response to Re: extended operator classes vs. type interfaces  (Robert Haas <robertmhaas@gmail.com>)
Responses Re: extended operator classes vs. type interfaces  (Yeb Havinga <yebhavinga@gmail.com>)
List pgsql-hackers
Robert Haas wrote:
> On Fri, Apr 9, 2010 at 10:33 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>   
>> On Fri, Apr 9, 2010 at 7:55 AM, Yeb Havinga <yebhavinga@gmail.com> wrote:
>>     
>>> Robert Haas wrote:
>>>       
>>>> Under the first type [4pm,5pm) =
>>>> [4pm,4:59:59pm], while under the second [4pm,5pm) = [4pm,4:59pm].
>>>>
>>>> Thoughts?
>>>>
>>>>         
>>> The examples with units look a lot like the IVL<PQ> datatype from HL7, see
>>> http://www.hl7.org/v3ballot/html/infrastructure/datatypes_r2/datatypes_r2.htm
>>>
>>> About a type interface, the HL7 spec talks about promotion from e.g. a
>>> timestamp to an interval (hl7 speak for range) of timestamps (a range), and
>>> demotion for the back direction. Every 'quantity type', which is any type
>>> with a (possibly partially) lineair ordered domain, can be promoted to an
>>> interval of that type. In PostgreSQL terms, this could perhaps mean that by
>>> 'tagging' a datatype as a lineair order, it could automatically have a range
>>> type defined on it, like done for the array types currently.
>>>       
>> The way we've handled array types is, quite frankly, horrible.  It's
>> bad enough that we now have two catalog entries in pg_type for each
>> base type; what's even worse is that if we actually wanted to enforce
>> things like the number of array dimensions we'd need even more - say,
>> seven per base type, one for the base type itself, one for a
>> one-dimensional array, one for a two-dimensional array, one for a
>> three-dimensional array.  And then if we want to support range types
>> that's another one for every base type, maybe more if there's more
>> than one kind of range over a base type.  It's just not feasible to
>> handle derived types in a way that require a new instance of each base
>> type to be created for each kind of derived type.  It scales as
>> O(number of base types * number of kinds of derived type), and that
>> rapidly gets completely out of hand
>>     
>
> ...which by the way, doesn't mean that your idea is bad (although it
> might not be what I would choose to do), just that I don't think our
> current infrastructure can support it.
>   
Well yeah the idea was to 'automagically' have a range type available, 
if the underlying type would support it, i.e. has a lineair order and 
therefore <,>,= etc defined on it, "just like the array types", from a 
user / datatype developer perspective.
From the implementers perspective, IMHO an extra catalog entry in 
pg_type is not bad on its own, you would have one anyway if the range 
type was explicitly programmed. About different kinds of range types - I 
would not know how to 'promote' integer into anything else but just one 
kind of 'range of integer' type. So the number of extra pg_types would 
be more like O(number of linear ordered base types).

regards,
Yeb Havinga



pgsql-hackers by date:

Previous
From: Necati Batur
Date:
Subject: Re: GSOC PostgreSQL partitioning issue
Next
From: Yeb Havinga
Date:
Subject: Re: extended operator classes vs. type interfaces