Re: Rethinking user-defined-typmod before it's too late - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Rethinking user-defined-typmod before it's too late
Date
Msg-id 200707170502.l6H52vB09793@momjian.us
Whole thread Raw
In response to Rethinking user-defined-typmod before it's too late  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: Rethinking user-defined-typmod before it's too late  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Is this something for 8.3 or 8.4?


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

Tom Lane wrote:
> The current discussion about the tsearch-in-core patch has convinced me
> that there are plausible use-cases for typmod values that aren't simple
> integers.  For instance it could be sane for a type to want a locale or
> language selection as a typmod, eg tsvector('ru') or tsvector('sv').
> (I'm not saying we are actually going to do that to tsvector, just that
> it's now clear to me that there are use-cases for such things.)
> 
> Teodor's work a few months ago generalized things enough so that
> something like this is within reach.  The grammar will actually allow
> darn near anything for a typmod, since the grammar production is
> expr_list to avoid shift/reduce conflict with the very similar-looking
> productions for function calls.  The only place where we are
> constraining what a typmod can be is that the defined API for
> user-written typmodin functions is "integer array".
> 
> At the time that patch was being worked on, I think I argued that
> integer typmods were enough because you'd have to pack them into such a
> small output representation anyway.  The hole in that logic is that you
> might have a fairly small enumerated set of possibilities, but that
> doesn't mean you want to make the user use a numeric code for them.
> You could even make the typmod be an integer key for a lookup table,
> if the set of possibilities is not hardwired.
> 
> Since this code hasn't been released yet, the API isn't set in stone
> ... but as soon as we ship 8.3, it will be, or at least changing it will
> be orders of magnitude more painful than it is today.  So, late as this
> is in the devel cycle, I think now is the time to reconsider.
> 
> I propose changing the typmodin signature to "typmodin(cstring[]) returns
> int4", that is, the typmods will be passed as strings not integers.  This
> will incur a bit of extra conversion overhead for the normal uses where
> the typmods are integers, but I think the gain in flexibility is worth
> it.  I'm inclined to make the code in parse_type.c take either integer
> constants, simple string literals, or unqualified names as input ---
> so you could write either tsvector('ru') or tsvector(ru) when using a
> type that wants a nonintegral typmod.
> 
> Note that the typmodout side is already OK since it is defined to return
> a string.
> 
> Comments?
> 
>             regards, tom lane
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly

--  Bruce Momjian  <bruce@momjian.us>          http://momjian.us EnterpriseDB
http://www.enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: Change sort order on UUIDs?
Next
From: Tom Lane
Date:
Subject: Re: Rethinking user-defined-typmod before it's too late