Re: Patch to add typmod's functions to a type's creation statement

From: Guillaume Lelarge <guillaume(at)lelarge(dot)info>
To: Dave Page <dpage(at)postgresql(dot)org>
Cc: pgadmin-hackers(at)postgresql(dot)org
Subject: Re: Patch to add typmod's functions to a type's creation statement
Date: 2007-12-03 18:20:01
Message-ID: 475448D1.6070705@lelarge.info
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgadmin-hackers

Hi,

Dave Page a écrit :
> Guillaume Lelarge wrote:
>> Here is a patch to support this new PostgreSQL 8.3 feature : the
>> possibility to add type modifier input and ouput functions to a newly
>> created type.
>
> Unfortunately this still needs some work. I found the following issues:
>
> - The typemod in/out functions are not included the reverse engineered
> SQL displayed on the main window when a type with such functions is
> selected (for reference, try pg_catalog.time).
>

Fixed.

> - I'm not so keen on the labelling. I would suggest:
>
> 'Typmod in function'/'Typmod out function' in the properties list.
> 'Typmod in func'/'Typmod out func' on dlgType.
>

Fixed too.

> - The code that loads the combo boxes in dlgType is broken. It's
> currently in loop designed to load the I/O and Send/Receive functions
> (which is somewhat broken in itself). The doc at
> http://www.postgresql.org/docs/8.3/static/sql-createtype.html describes
> the general signature of functions that are appropriate.
>

If I correctly understand what the code is doing, it selects all
functions that has a first argument but no second one, is this right ?
it does not check arguments' types.

In this case, I think we should change this SQL query

SELECT proname, nspname
FROM (
SELECT proname, nspname, max(proargtypes[0]) AS arg0,
max(proargtypes[1]) AS arg1
FROM pg_proc p
JOIN pg_namespace n ON n.oid=pronamespace
GROUP BY proname, nspname
HAVING count(proname) = 1 ) AS uniquefunc
WHERE arg0 <> 0 AND arg1 = 0

with this one

SELECT proname, nspname
FROM (
SELECT proname, nspname, max(proargtypes[0]) AS arg0,
max(proargtypes[1]) AS arg1
FROM pg_proc p
JOIN pg_namespace n ON n.oid=pronamespace
GROUP BY proname, nspname
HAVING count(proname) = 1 ) AS uniquefunc
WHERE arg0 <> 0 AND coalesce(arg1, 0) = 0

If I correctly read the CREATE TYPE manpage, I need to check that the
type_modifier_input_function function has one argument of type cstring[]
and returns an integer. And I need to check that the
type_modifier_output_function function has one integer argument and
returns a single ctring value. Is this right ?

If I'm right, all the code that get input, ouput, send and receive
functions is broken. Right ?

> [as a side note, the code here seems somewhat broken in general wrt the
> handling of the whole create function/create type chicken and egg
> scenario - I'll make a note to review that]
>

+1

Thanks.

--
Guillaume.
http://www.postgresqlfr.org
http://dalibo.com

In response to

Responses

Browse pgadmin-hackers by date

  From Date Subject
Next Message Guillaume Lelarge 2007-12-03 18:53:48 Re: Patch to add typmod's functions to a type's creation statement
Previous Message svn 2007-12-03 16:13:00 SVN Commit by guillaume: r6866 - in trunk/pgadmin3: . pgadmin/schema pgadmin/ui