Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgadmin-hackers by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group